找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3258|回复: 0
打印 上一主题 下一主题
收起左侧

工控中用RS485总线读取PLC采样单元单片机源代码

[复制链接]
跳转到指定楼层
楼主
本项目主要用到了RS485总线读取工业现场的PLC,包括吊机的主钩吊取得重量,现场小车的位移,速度等等。本代码仅供参考学习,禁止商用!



单片机源程序如下:
  1. #include "STC15Fxxxx.H"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <math.H>
  6. #include "MyTypedef.H"
  7. #include  "eeprom.h"
  8. unsigned int CRC_16(unsigned int puiCRCWord, unsigned char pucChechingChar);
  9. void Uart1_Tx_str(unsigned char *ptr,unsigned char n);
  10. void Uart2_Tx_str(unsigned char *ptr,unsigned char n);
  11. void delay_ms(unsigned int x);
  12. void sys_ini(void);
  13. void fIntUart1Rev(void);
  14. void fIntUart2Rev(void);
  15. void readCS(void);
  16. void fCalHigh(void);
  17. bit Uart1_RxF,Uart2_RxF;
  18. bit B_TI,B_TI2,bFlag1s;
  19. unsigned char data Rx1count,wRx1TimeOut,Rx2count,wRx2TimeOut ;
  20. unsigned char volatile xdata RX1BUF[38]= {0};
  21. unsigned char volatile xdata RX2BUF[15]= {0};
  22. //unsigned char   tmpbuf[10];
  23. xdata unsigned char E_buf[80],E_buf2[8];
  24. unsigned int Rs485Ledms,Rs485Led2ms,uiCountMs=0;
  25. xdata float   gfCountH3,gfCountH1,gfCountY1,gfCountY2,gfCountX;
  26. xdata float   gfLastHighH3,gfLastHighH1,gfLastHighY1,gfLastHighY2,gfLastHighX;
  27. idata float fXsValH3,fXsValH1,fXsValY1,fXsValY2,fXsValX;        //修正系数
  28. idata float fIniValH3,fIniValH1,fIniValY1,fIniValY2,fIniValX;        //初始值
  29. idata float fIniH3,fIniH1,fIniY1,fIniY2,fIniX;        //始值高度
  30. bit bXsH3,bXsH1,bXsY1,bXsY2,bXsX;
  31. union
  32. {
  33.     float fVal;
  34.     uChar fToChar[4];
  35. } highH3,highH1,highY1,highY2,highX;
  36. union
  37. {
  38.     float fVal;
  39.     uChar fToChar[4];
  40. } SpeedH3,SpeedH1;
  41. union
  42. {
  43.         float    fVal;
  44.         unsigned char   ucChar[ 4];
  45. } fdat;
  46. float ftmp;
  47. char str[]="wangzugang";
  48. //*******************************************
  49. void main()
  50. {
  51. //    unsigned char   i,buf[5];
  52.     unsigned char luc;
  53.     //delay_ms(100);
  54.    
  55.     sys_ini();
  56.     CON   = 0;
  57.     CON2   = 0;
  58.     Rx1count=0;
  59.     Rx2count=0;
  60.     for( luc = 0; luc < 8; luc++)
  61.                     E_buf2[luc] = 0;
  62.     readCS();   
  63.     fCalHigh();
  64.     while(1)
  65.     {
  66.             if(bFlag1s)
  67.         {       
  68.             fCalHigh();
  69.                 //计算起升速度
  70.             ftmp = 60*(highH3.fVal - gfLastHighH3);                //单位:米/分
  71.             SpeedH3.fVal = ftmp;
  72.             gfLastHighH3 = highH3.fVal;
  73.             
  74.             ftmp = 60*(highH1.fVal - gfLastHighH1);                //单位:米/分
  75.             SpeedH1.fVal = ftmp;
  76.             gfLastHighH1 = highH1.fVal;            
  77.                   bFlag1s=0;
  78.                 }
  79.             if(Uart1_RxF==1)
  80.             fIntUart1Rev();   
  81.         if(Uart2_RxF==1)
  82.             fIntUart2Rev();
  83.     }
  84. }
  85. /************************************************************
  86. crc16校验程序:功能:接收字节crc校验,返回校验值
  87. unsigned int CRC_16(unsigned int puiCRCWord,unsigned char pucChechingChar)
  88. 形参:  pucChechingChar    需要校验数据
  89.             puiCRCWord         校验后的数据
  90. *************************************************************/
  91. unsigned int CRC_16(unsigned int puiCRCWord, unsigned char pucChechingChar)
  92. {
  93.     unsigned char data luc;
  94.     puiCRCWord ^= pucChechingChar;
  95.     for( luc = 8; luc > 0; luc--)
  96.     {
  97.         if( puiCRCWord & 0x0001)
  98.         {
  99.             puiCRCWord >>= 1;
  100.             puiCRCWord ^= 0xA001;
  101.         }
  102.         else
  103.         {
  104.             puiCRCWord >>= 1;
  105.         }
  106.     }
  107.     return puiCRCWord;
  108. }
  109. //*******************************************
  110. void Time0Int( void ) interrupt 1
  111. {
  112.         uiCountMs++;
  113.         if(uiCountMs>50000)
  114.             uiCountMs=0;
  115.            
  116.     if((uiCountMs%10000)==0)
  117.     {
  118.                            bFlag1s=1;
  119.         }       
  120.            
  121.         if((wRx2TimeOut != 0)&&(Rx2count!=0))
  122.         wRx2TimeOut --;    //通信超时值
  123.     else
  124.         Rx2count=0;

  125.         if((wRx1TimeOut != 0)&&(Rx1count!=0))
  126.         wRx1TimeOut --;    //通信超时值
  127.     else
  128.         Rx1count=0;       
  129.         
  130.    if(Rs485Led==0)
  131.     {
  132.             Rs485Ledms++;
  133.             if(Rs485Ledms>500)
  134.             {
  135.                     Rs485Led=1        ;
  136.                     Rs485Ledms = 0;
  137.             }
  138.            
  139.     }
  140.     else
  141.             Rs485Ledms = 0;
  142.    
  143.     if(Rs485Led2==0)
  144.     {
  145.             Rs485Led2ms++;
  146.             if(Rs485Led2ms>500)
  147.             {
  148.                     Rs485Led2=1        ;
  149.                     Rs485Led2ms = 0;
  150.             }
  151.            
  152.     }
  153.     else
  154.             Rs485Led2ms = 0;
  155. }
  156. //*******************************************
  157. void Uart1int( void ) interrupt 4
  158. {
  159.     if ( RI )
  160.     {
  161.         if(Rx1count==0)
  162.                 {
  163.                           if(SBUF==PLC_Adr)                        //
  164.                           {
  165.                                   RX1BUF[Rx1count]=SBUF;
  166.                                 Rx1count++;                               
  167.                         }
  168.                         else
  169.                                 Rx1count=0;
  170.                 }
  171.                 else
  172.                 {
  173.                         RX1BUF[Rx1count]=SBUF;
  174.                         Rx1count++;
  175.                         if((Rx1count==37)&&(RX1BUF[1]==0x10))
  176.                         {
  177.                                 Uart1_RxF=1;
  178.                                 Rx1count=0;
  179.                         }
  180.                         if(Rx1count>37)
  181.                                 Rx1count=0;               
  182.                 }
  183.                 RI = 0;
  184.                 wRx1TimeOut=100;
  185.     }
  186.     if(TI)
  187.     {
  188.         TI = 0;
  189.         B_TI = 1;
  190.     }
  191. }
  192. //***********************************
  193. void sys_ini(void)
  194. {

  195.     //初始T0
  196.     TMOD    =  0x00;                //T0 Mode 0 ,16 Bit自动重装
  197.     TH0 =   T100uS>>8; //初值
  198.     TL0 =   T100uS;
  199.     ET0 =   1;      //T0中断允许
  200.     TR0 =   1;      //启动T0
  201.    
  202.     //初始int0
  203.     //TCON    |=  0x01;   //int0下降沿触发
  204.     //EX0 = 0;//EX0 = 1;            //允许int0中断
  205.    
  206.     //初始int0
  207.     //IT1 = 1;   //int1下降沿触发
  208.     //EX1 = 0;//EX1 = 1;            //允许int1中断
  209.    
  210.     //初始串行口1,2
  211.         TL2 = (65536-(MAIN_Fosc/4/Baudrate1));                //设置波特率重装值
  212.         TH2 = (65536-(MAIN_Fosc/4/Baudrate1))>>8;
  213.         //AUXR = 0X14;                //T2为1T模式,并启动定时器2
  214.         AUXR = 0X14;
  215.         AUXR |= 0X01;                //选择定时器2为串口1的波特率发生器
  216.         SCON    =   0x50;       //mode 1, SM2=0, REN=1
  217.         S2CON    =   0x50;
  218.         ES  = 1;             //使能串行1中断
  219.         IE2 |=  1;                        //允许串口2中断
  220.                
  221.     EA = 1;
  222.   //  P3M1=0x00;
  223.   //  P3M0=0x00;

  224. }
  225. //***********************************
  226. void delay_ms(unsigned int x)
  227. {
  228.     unsigned int i,j;
  229.     i=0;
  230.     for(i=0; i<x; i++)
  231.     {
  232.         j=108;
  233.         ;
  234.         while(j--)
  235.         {
  236.             ;
  237.         }
  238.     }
  239. }
  240. //***********************************
  241. void fIntUart1Rev(void)
  242. {
  243.     uCharD luc;
  244.     uIntD luiCRC16;
  245.     xdata unsigned char lucBuffers[ 38];       //
  246.     union
  247.     {
  248.         uInt liAddress;
  249.         uChar IntToChar[ 2];
  250.     } xdata AddressList;
  251.     union
  252.     {
  253.         unsigned long ulVal;
  254.         uChar ulToChar[4];
  255.     } xdata ultmp;
  256.     Uart1_RxF=0;

  257.     for( luc = 0; luc < 38; luc++)
  258.             lucBuffers[luc] = RX1BUF[luc];

  259.     luiCRC16 = 0xFFFF;
  260.     for( luc = 0; luc < 37; luc++)
  261.         luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  262. if( !luiCRC16 )                      
  263.    {  
  264.             Rs485Led2 =~Rs485Led2;
  265.             for( luc = 0; luc < 6; luc++)
  266.                     E_buf2[luc] = lucBuffers[7+luc];
  267.                                
  268.             for( luc = 0; luc < 4; luc++)
  269.                     ultmp.ulToChar[luc] = lucBuffers[23+luc];
  270.             gfCountH3 = (float)ultmp.ulVal;
  271.            
  272.             for( luc = 0; luc < 4; luc++)
  273.                     ultmp.ulToChar[luc] = lucBuffers[27+luc];
  274.             gfCountH1 = (float)ultmp.ulVal;
  275.            
  276.             for( luc = 0; luc < 4; luc++)
  277.                     ultmp.ulToChar[luc] = lucBuffers[15+luc];
  278.             gfCountY1 = (float)ultmp.ulVal;
  279.            
  280.             for( luc = 0; luc < 4; luc++)
  281.                     ultmp.ulToChar[luc] = lucBuffers[19+luc];
  282.             gfCountY2 = (float)ultmp.ulVal;
  283.            
  284.             for( luc = 0; luc < 4; luc++)
  285.                     ultmp.ulToChar[luc] = lucBuffers[31+luc];
  286.             gfCountX = (float)ultmp.ulVal;
  287.            
  288.             luiCRC16 = 0xFFFF;
  289.         for( luc = 0; luc < 6; luc++)
  290.             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  291.         //放置CRC16校验码,低位在前,高位在后
  292.         AddressList.liAddress = luiCRC16;
  293.         lucBuffers[ 6]  =   AddressList.IntToChar[ 1];
  294.         lucBuffers[ 7]  =   AddressList.IntToChar[ 0];
  295.         Uart1_Tx_str(lucBuffers,8);
  296.            
  297.    }   

  298. }

  299. //*******************************************
  300. void Uart2int( void ) interrupt 8
  301. {
  302.     if ( RI2 )
  303.     {
  304.             if(Rx2count==0)
  305.         {
  306.                   if(S2BUF==PlcCaiYang_Adr)
  307.                   {
  308.                           RX2BUF[Rx2count]=S2BUF;
  309.                         Rx2count++;                               
  310.                 }
  311.                 else
  312.                         Rx2count=0;
  313.         }
  314.         else
  315.         {
  316.                 RX2BUF[Rx2count]=S2BUF;
  317.                 Rx2count++;
  318.                 if((Rx2count==8)&&(RX2BUF[1]==0x03))
  319.                 {
  320.                         Uart2_RxF=1;
  321.                         Rx2count=0;
  322.                 }
  323.                 if((Rx2count==13)&&(RX2BUF[1]==0x10))
  324.                 {
  325.                         Uart2_RxF=1;
  326.                         Rx2count=0;
  327.                 }
  328.                 if(Rx2count>13)
  329.                         Rx2count=0;                       
  330.         }
  331.         CLR_RI2();
  332.         wRx2TimeOut=50;
  333.     }
  334.     if(TI2)
  335.     {
  336.         CLR_TI2();
  337.         B_TI2 = 1;
  338.     }

  339. }
  340. //**********************************************************
  341. ///*
  342. void Uart1_Tx_str(unsigned char *ptr,unsigned char n)
  343. {
  344.     unsigned char  data k;
  345.     B_TI  =   0;
  346.     CON2 =1;
  347.     for( k = 0; k < n; k++)
  348.     {
  349.         SBUF    =   *ptr++;
  350.         while( !B_TI)
  351.         {
  352.             ;
  353.         }
  354.         B_TI  =   0;
  355.     }
  356.     CON2 =0;
  357. }
  358. //*/
  359. //**********************************************************
  360. void Uart2_Tx_str(unsigned char *ptr,unsigned char n)
  361. {
  362.     unsigned char  data k;
  363.     B_TI2  =   0;
  364.     CON =1;
  365.     for( k = 0; k < n; k++)
  366.     {
  367.         S2BUF    =   *ptr++;
  368.         while( !B_TI2)
  369.         {
  370.             ;
  371.         }
  372.         B_TI2  =   0;
  373.     }
  374.     CON =0;
  375. }
  376. //***********************************************************
  377. void readCS(void)
  378. {
  379.         unsigned char   i,buf[5];
  380.        
  381.         //高度3
  382.     for(i=0; i<5; i++) //读取修正系数
  383.         buf[i]=byte_read(0x0+i);
  384.     if(buf[0]==0)
  385.     {
  386.             for(i=0; i<4; i++)
  387.                     fdat.ucChar[i] = buf[i+1];
  388.             fXsValH3 = fdat.fVal;
  389.             bXsH3=1;
  390.     }
  391.     else
  392.     {
  393.             bXsH3=0;       
  394.     }
  395.        
  396.     for(i=0; i<5; i++) //读取初始值
  397.         buf[i]=byte_read(0x0+5+i);
  398.     if(buf[0]==0)
  399.     {
  400.             for(i=0; i<4; i++)
  401.                     fdat.ucChar[i] = buf[i+1];
  402.             fIniValH3 = fdat.fVal;
  403.     }
  404.     else
  405.     {
  406.             fIniValH3=0;       
  407.     }
  408.    
  409.     for(i=0; i<5; i++) //读取初始高度
  410.         buf[i]=byte_read(0x0+10+i);
  411.     if(buf[0]==0)
  412.     {
  413.             for(i=0; i<4; i++)
  414.                     fdat.ucChar[i] = buf[i+1];
  415.             fIniH3 = fdat.fVal;
  416.     }
  417.     else
  418.     {
  419.             fIniH3=0;       
  420.     }
  421.    
  422.     //高度1
  423.     for(i=0; i<5; i++) //读取修正系数
  424.         buf[i]=byte_read(0x10+i);
  425.     if(buf[0]==0)
  426.     {
  427.             for(i=0; i<4; i++)
  428.                     fdat.ucChar[i] = buf[i+1];
  429.             fXsValH1 = fdat.fVal;
  430.             bXsH1=1;
  431.     }
  432.     else
  433.     {
  434.             bXsH1=0;       
  435.     }
  436.        
  437.         for(i=0; i<5; i++) //读取初始值
  438.         buf[i]=byte_read(0x10+5+i);
  439.     if(buf[0]==0)
  440.     {
  441.             for(i=0; i<4; i++)
  442.                     fdat.ucChar[i] = buf[i+1];
  443.             fIniValH1 = fdat.fVal;
  444.     }
  445.     else
  446.     {
  447.             fIniValH1=0;       
  448.     }
  449.    
  450.     for(i=0; i<5; i++) //读取初始高度
  451.         buf[i]=byte_read(0x10+10+i);
  452.     if(buf[0]==0)
  453.     {
  454.             for(i=0; i<4; i++)
  455.                     fdat.ucChar[i] = buf[i+1];
  456.             fIniH1 = fdat.fVal;
  457.     }
  458.     else
  459.     {
  460.             fIniH1=0;       
  461.     }
  462.     /////////////////////////////////////
  463.     //Y1
  464.     for(i=0; i<5; i++) //读取修正系数
  465.         buf[i]=byte_read(0x20+i);
  466.     if(buf[0]==0)
  467.     {
  468.             for(i=0; i<4; i++)
  469.                     fdat.ucChar[i] = buf[i+1];
  470.             fXsValY1 = fdat.fVal;
  471.             bXsY1=1;
  472.     }
  473.     else
  474.     {
  475.             bXsY1=0;       
  476.     }
  477.        
  478.         for(i=0; i<5; i++) //读取初始值
  479.         buf[i]=byte_read(0x20+5+i);
  480.     if(buf[0]==0)
  481.     {
  482.             for(i=0; i<4; i++)
  483.                     fdat.ucChar[i] = buf[i+1];
  484.             fIniValY1 = fdat.fVal;
  485.     }
  486.     else
  487.     {
  488.             fIniValY1=0;       
  489.     }
  490.    
  491.     for(i=0; i<5; i++) //读取初始高度
  492.         buf[i]=byte_read(0x20+10+i);
  493.     if(buf[0]==0)
  494.     {
  495.             for(i=0; i<4; i++)
  496.                     fdat.ucChar[i] = buf[i+1];
  497.             fIniY1 = fdat.fVal;
  498.     }
  499.     else
  500.     {
  501.             fIniY1=0;       
  502.     }
  503.     /////////////////////////////////////
  504.     //Y2
  505.     for(i=0; i<5; i++) //读取修正系数
  506.         buf[i]=byte_read(0x30+i);
  507.     if(buf[0]==0)
  508.     {
  509.             for(i=0; i<4; i++)
  510.                     fdat.ucChar[i] = buf[i+1];
  511.             fXsValY2 = fdat.fVal;
  512.             bXsY2=1;
  513.     }
  514.     else
  515.     {
  516.             bXsY2=0;       
  517.     }
  518.        
  519.         for(i=0; i<5; i++) //读取初始值
  520.         buf[i]=byte_read(0x30+5+i);
  521.     if(buf[0]==0)
  522.     {
  523.             for(i=0; i<4; i++)
  524.                     fdat.ucChar[i] = buf[i+1];
  525.             fIniValY2 = fdat.fVal;
  526.     }
  527.     else
  528.     {
  529.             fIniValY2=0;       
  530.     }
  531.    
  532.     for(i=0; i<5; i++) //读取初始高度
  533.         buf[i]=byte_read(0x30+10+i);
  534.     if(buf[0]==0)
  535.     {
  536.             for(i=0; i<4; i++)
  537.                     fdat.ucChar[i] = buf[i+1];
  538.             fIniY2 = fdat.fVal;
  539.     }
  540.     else
  541.     {
  542.             fIniY2=0;       
  543.     }
  544.     /////////////////////////////////////
  545.     //X
  546.     for(i=0; i<5; i++) //读取修正系数
  547.         buf[i]=byte_read(0x40+i);
  548.     if(buf[0]==0)
  549.     {
  550.             for(i=0; i<4; i++)
  551.                     fdat.ucChar[i] = buf[i+1];
  552.             fXsValX = fdat.fVal;
  553.             bXsX=1;
  554.     }
  555.     else
  556.     {
  557.             bXsX=0;       
  558.     }
  559.        
  560.         for(i=0; i<5; i++) //读取初始值
  561.         buf[i]=byte_read(0x40+5+i);
  562.     if(buf[0]==0)
  563.     {
  564.             for(i=0; i<4; i++)
  565.                     fdat.ucChar[i] = buf[i+1];
  566.             fIniValX = fdat.fVal;
  567.     }
  568.     else
  569.     {
  570.             fIniValX=0;       
  571.     }
  572.    
  573.     for(i=0; i<5; i++) //读取初始高度
  574.         buf[i]=byte_read(0x40+10+i);
  575.     if(buf[0]==0)
  576.     {
  577.             for(i=0; i<4; i++)
  578.                     fdat.ucChar[i] = buf[i+1];
  579.             fIniX = fdat.fVal;
  580.     }
  581.     else
  582.     {
  583.             fIniX=0;       
  584.     }  
  585. }
  586. //***********************************************************
  587. //***********************************************************
  588. void fIntUart2Rev(void)
  589. {
  590.     uCharD luc;
  591.     uIntD luiCRC16;
  592.     xdata unsigned char lucBuffers[40];       //
  593.     union
  594.     {
  595.         uInt liAddress;
  596.         uChar IntToChar[ 2];
  597.     } data AddressList;
  598.     Uart2_RxF=0;
  599.    
  600.     for( luc = 0; luc < 15; luc++)
  601.             lucBuffers[luc] = RX2BUF[luc];

  602.     if((lucBuffers[1]==0x03)&&(lucBuffers[0]==PlcCaiYang_Adr))
  603.     {
  604.             luiCRC16 = 0xFFFF;
  605.             for( luc = 0; luc < 8; luc++)
  606.                 luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  607.         if( !luiCRC16 )                      
  608.             {  
  609.                     Rs485Led =~Rs485Led;
  610.                     if(lucBuffers[3]==1)    //1为读数据
  611.                 {
  612.                             lucBuffers[2]=34;
  613.                         for(luc=0; luc<6; luc++)
  614.                                     lucBuffers[3+luc]=E_buf2[luc];
  615.                             for(luc=0; luc<4; luc++)
  616.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  617.                         for(luc=0; luc<4; luc++)
  618.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  619.                             for(luc=0; luc<4; luc++)
  620.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  621.                         for(luc=0; luc<4; luc++)
  622.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  623.                             for(luc=0; luc<4; luc++)
  624.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  625.                         for(luc=0; luc<4; luc++)
  626.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  627.                             for(luc=0; luc<4; luc++)
  628.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  629.                             luiCRC16 = 0xFFFF;
  630.                                 for( luc = 0; luc < 37; luc++)
  631.                                     luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  632.                                 //放置CRC16校验码,低位在前,高位在后
  633.                                 AddressList.liAddress = luiCRC16;
  634.                                 lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  635.                                 lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  636.                                 Uart2_Tx_str(lucBuffers,39);
  637.                                 return;       
  638.                 }

  639.                 }
  640.       }
  641.       ///////////////////////////////////
  642.     if((lucBuffers[1]==0x10)&&(lucBuffers[0]==PlcCaiYang_Adr))
  643.     {
  644.             luiCRC16 = 0xFFFF;
  645.             for( luc = 0; luc < 13; luc++)
  646.                 luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  647.         if( !luiCRC16 )      
  648.             {                         
  649.                 Rs485Led =~Rs485Led;                               
  650.                 if(lucBuffers[3]==0x02)     //2#小车起升高度H1初始值
  651.                 {
  652.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  653.                                     E_buf[luc] = byte_read(luc);
  654.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  655.                         E_buf[0x10+5] = 0x0;                //0x15单元清零表示高度H1初始值已经保存过
  656.                         fdat.fVal = gfCountH1;                //把当前的值当初始值
  657.                         fIniValH1 = gfCountH1;
  658.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x16,0x17,0x18,0x19
  659.                                 E_buf[0x10+6+luc] = fdat.ucChar[luc];
  660.                         E_buf[0x10+10] = 0x0;                //0x1A单元清零表示高度H1初高度已经保存过
  661.                         for( luc = 0; luc < 4; luc++)        //把初高度保存0x1B,0x1C,0x1D,0x1E
  662.                         {
  663.                                 E_buf[0x10+11+luc] = lucBuffers[luc+7];
  664.                                 fdat.ucChar[luc]   = lucBuffers[luc+7];
  665.                         }
  666.                         fIniH1 = fdat.fVal;
  667.                         for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  668.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程                       
  669.                             fCalHigh();
  670.                             /*                   
  671.                             lucBuffers[2]=26;
  672.                         for(luc=0; luc<6; luc++)
  673.                                     lucBuffers[3+luc]=E_buf2[luc];
  674.                             for(luc=0; luc<4; luc++)
  675.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  676.                         for(luc=0; luc<4; luc++)
  677.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  678.                             for(luc=0; luc<4; luc++)
  679.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  680.                         for(luc=0; luc<4; luc++)
  681.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  682.                             for(luc=0; luc<4; luc++)
  683.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  684.                         for(luc=0; luc<4; luc++)
  685.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  686.                             for(luc=0; luc<4; luc++)
  687.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  688.                             luiCRC16 = 0xFFFF;
  689.                         for( luc = 0; luc < 37; luc++)
  690.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  691.                         //放置CRC16校验码,低位在前,高位在后
  692.                         AddressList.liAddress = luiCRC16;
  693.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  694.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  695.                         Uart2_Tx_str(lucBuffers,39);
  696.                        
  697.                         return;       
  698.                         */
  699.                         }
  700.                                        
  701.                 if(lucBuffers[3]==0x03)    //3为高度H1标定数据,
  702.                 {
  703.                         for( luc = 0; luc < 4; luc++)
  704.                                 fdat.ucChar[luc] = lucBuffers[luc+7];
  705.              
  706.                         if((gfCountH1 - fIniValH1)==0)
  707.                                 fXsValH1 = ((fdat.fVal-fIniH1)/1.0);
  708.                         else
  709.                                 fXsValH1 = ((fdat.fVal-fIniH1)/(gfCountH1 - fIniValH1));
  710.                        
  711.                         fdat.fVal = fXsValH1;
  712.                         bXsH1=1;
  713.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  714.                                     E_buf[luc] = byte_read(luc);
  715.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  716.                         E_buf[0x10] = 0x0;                //0x10单元清零表示高度H1标定数据已经保存过
  717.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x11,0x12,0x13,0x14
  718.                                 E_buf[0x10+1+luc] = fdat.ucChar[luc];       
  719.                             for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  720.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程
  721.                             fCalHigh();
  722.                     /*
  723.                                 lucBuffers[2]=26;
  724.                         for(luc=0; luc<6; luc++)
  725.                                     lucBuffers[3+luc]=E_buf2[luc];
  726.                             for(luc=0; luc<4; luc++)
  727.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  728.                         for(luc=0; luc<4; luc++)
  729.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  730.                             for(luc=0; luc<4; luc++)
  731.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  732.                         for(luc=0; luc<4; luc++)
  733.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  734.                             for(luc=0; luc<4; luc++)
  735.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  736.                         for(luc=0; luc<4; luc++)
  737.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  738.                             for(luc=0; luc<4; luc++)
  739.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  740.                             luiCRC16 = 0xFFFF;
  741.                         for( luc = 0; luc < 37; luc++)
  742.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  743.                         //放置CRC16校验码,低位在前,高位在后
  744.                         AddressList.liAddress = luiCRC16;
  745.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  746.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  747.                         Uart2_Tx_str(lucBuffers,39);
  748.                        
  749.                         return;
  750.                         */
  751.                 }
  752.                 //-------------------------------------------------------------------
  753.                 if(lucBuffers[3]==0x04)     //1#小车起升高度H3初始值
  754.                 {
  755.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  756.                                     E_buf[luc] = byte_read(luc);
  757.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  758.                         E_buf[0x0+5] = 0x0;                //0x05单元清零表示高度H3初始值已经保存过
  759.                         fdat.fVal = gfCountH3;                //把当前的值当初始值
  760.                         fIniValH3 = gfCountH3;
  761.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x06,0x07,0x08,0x09
  762.                                 E_buf[0x0+6+luc] = fdat.ucChar[luc];
  763.                         E_buf[0x0+10] = 0x0;                //0x0A单元清零表示高度H3初高度已经保存过
  764.                         for( luc = 0; luc < 4; luc++)        //把初高度保存0x0B,0x0C,0x0D,0x0E
  765.                         {
  766.                                 E_buf[0x0+11+luc] = lucBuffers[luc+7];
  767.                                 fdat.ucChar[luc]   = lucBuffers[luc+7];
  768.                         }
  769.                         fIniH3 = fdat.fVal;
  770.                         for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  771.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程                       
  772.                             fCalHigh();
  773.                             /*                   
  774.                             lucBuffers[2]=26;
  775.                         for(luc=0; luc<6; luc++)
  776.                                     lucBuffers[3+luc]=E_buf2[luc];
  777.                             for(luc=0; luc<4; luc++)
  778.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  779.                         for(luc=0; luc<4; luc++)
  780.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  781.                             for(luc=0; luc<4; luc++)
  782.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  783.                         for(luc=0; luc<4; luc++)
  784.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  785.                             for(luc=0; luc<4; luc++)
  786.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  787.                         for(luc=0; luc<4; luc++)
  788.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  789.                             for(luc=0; luc<4; luc++)
  790.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  791.                             luiCRC16 = 0xFFFF;
  792.                         for( luc = 0; luc < 37; luc++)
  793.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  794.                         //放置CRC16校验码,低位在前,高位在后
  795.                         AddressList.liAddress = luiCRC16;
  796.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  797.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  798.                         Uart2_Tx_str(lucBuffers,39);
  799.                        
  800.                         return;       
  801.                         */
  802.                         }
  803.                                        
  804.                 if(lucBuffers[3]==0x05)    //5为高度H3标定数据,
  805.                 {
  806.                         for( luc = 0; luc < 4; luc++)
  807.                                 fdat.ucChar[luc] = lucBuffers[luc+7];
  808.              
  809.                         if((gfCountH3 - fIniValH3)==0)
  810.                                 fXsValH3 = ((fdat.fVal-fIniH3)/1.0);
  811.                         else
  812.                                 fXsValH3 = ((fdat.fVal-fIniH3)/(gfCountH3 - fIniValH3));
  813.                        
  814.                         fdat.fVal = fXsValH3;
  815.                         bXsH3=1;
  816.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  817.                                     E_buf[luc] = byte_read(luc);
  818.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  819.                         E_buf[0x0] = 0x0;                //0x0单元清零表示高度H3标定数据已经保存过
  820.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x11,0x12,0x13,0x14
  821.                                 E_buf[0x0+1+luc] = fdat.ucChar[luc];       
  822.                             for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  823.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程
  824.                             fCalHigh();
  825.                     /*
  826.                                 lucBuffers[2]=26;
  827.                         for(luc=0; luc<6; luc++)
  828.                                     lucBuffers[3+luc]=E_buf2[luc];
  829.                             for(luc=0; luc<4; luc++)
  830.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  831.                         for(luc=0; luc<4; luc++)
  832.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  833.                             for(luc=0; luc<4; luc++)
  834.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  835.                         for(luc=0; luc<4; luc++)
  836.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  837.                             for(luc=0; luc<4; luc++)
  838.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  839.                         for(luc=0; luc<4; luc++)
  840.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  841.                             for(luc=0; luc<4; luc++)
  842.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  843.                             luiCRC16 = 0xFFFF;
  844.                         for( luc = 0; luc < 37; luc++)
  845.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  846.                         //放置CRC16校验码,低位在前,高位在后
  847.                         AddressList.liAddress = luiCRC16;
  848.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  849.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  850.                         Uart2_Tx_str(lucBuffers,39);
  851.                        
  852.                         return;
  853.                         */
  854.                 }
  855.                 //---------------------------------------------------------------------
  856.                 if(lucBuffers[3]==0x06)     //1#小车起Y1初始值
  857.                 {
  858.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  859.                                     E_buf[luc] = byte_read(luc);
  860.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  861.                         E_buf[0x20+5] = 0x0;                //0x25单元清零表示高度Y1初始值已经保存过
  862.                         fdat.fVal = gfCountY1;                //把当前的值当初始值
  863.                         fIniValY1 = gfCountY1;
  864.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x26,0x27,0x28,0x29
  865.                                 E_buf[0x20+6+luc] = fdat.ucChar[luc];
  866.                         E_buf[0x20+10] = 0x0;                //0x2A单元清零表示高度Y1初高度已经保存过
  867.                         for( luc = 0; luc < 4; luc++)        //把初高度保存0x2B,0x2C,0x2D,0x2E
  868.                         {
  869.                                 E_buf[0x20+11+luc] = lucBuffers[luc+7];
  870.                                 fdat.ucChar[luc]   = lucBuffers[luc+7];
  871.                         }
  872.                         fIniY1 = fdat.fVal;
  873.                         for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  874.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程                       
  875.                             fCalHigh();
  876.                             /*                   
  877.                             lucBuffers[2]=26;
  878.                         for(luc=0; luc<6; luc++)
  879.                                     lucBuffers[3+luc]=E_buf2[luc];
  880.                             for(luc=0; luc<4; luc++)
  881.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  882.                         for(luc=0; luc<4; luc++)
  883.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  884.                             for(luc=0; luc<4; luc++)
  885.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  886.                         for(luc=0; luc<4; luc++)
  887.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  888.                             for(luc=0; luc<4; luc++)
  889.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  890.                         for(luc=0; luc<4; luc++)
  891.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  892.                             for(luc=0; luc<4; luc++)
  893.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  894.                             luiCRC16 = 0xFFFF;
  895.                         for( luc = 0; luc < 37; luc++)
  896.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  897.                         //放置CRC16校验码,低位在前,高位在后
  898.                         AddressList.liAddress = luiCRC16;
  899.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  900.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  901.                         Uart2_Tx_str(lucBuffers,39);
  902.                        
  903.                         return;       
  904.                         */
  905.                         }
  906.                                        
  907.                 if(lucBuffers[3]==0x07)    //7为高度Y1标定数据,
  908.                 {
  909.                         for( luc = 0; luc < 4; luc++)
  910.                                 fdat.ucChar[luc] = lucBuffers[luc+7];
  911.              
  912.                         if((gfCountY1 - fIniValY1)==0)
  913.                                 fXsValY1 = ((fdat.fVal-fIniY1)/1.0);
  914.                         else
  915.                                 fXsValY1 = ((fdat.fVal-fIniY1)/(gfCountY1 - fIniValY1));
  916.                        
  917.                         fdat.fVal = fXsValY1;
  918.                         bXsY1=1;
  919.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  920.                                     E_buf[luc] = byte_read(luc);
  921.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  922.                         E_buf[0x20] = 0x0;                //0x20单元清零表示高度Y1标定数据已经保存过
  923.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x21,0x2,0x23,0x24
  924.                                 E_buf[0x20+1+luc] = fdat.ucChar[luc];       
  925.                             for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  926.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程
  927.                             fCalHigh();
  928.                     /*
  929.                                 lucBuffers[2]=26;
  930.                         for(luc=0; luc<6; luc++)
  931.                                     lucBuffers[3+luc]=E_buf2[luc];
  932.                             for(luc=0; luc<4; luc++)
  933.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  934.                         for(luc=0; luc<4; luc++)
  935.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  936.                             for(luc=0; luc<4; luc++)
  937.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  938.                         for(luc=0; luc<4; luc++)
  939.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  940.                             for(luc=0; luc<4; luc++)
  941.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  942.                         for(luc=0; luc<4; luc++)
  943.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  944.                             for(luc=0; luc<4; luc++)
  945.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  946.                             luiCRC16 = 0xFFFF;
  947.                         for( luc = 0; luc < 37; luc++)
  948.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  949.                         //放置CRC16校验码,低位在前,高位在后
  950.                         AddressList.liAddress = luiCRC16;
  951.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  952.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  953.                         Uart2_Tx_str(lucBuffers,39);
  954.                        
  955.                         return;
  956.                         */
  957.                 }
  958.                 //---------------------------------------------------------------------
  959.                 if(lucBuffers[3]==0x10)     //大车X初始值
  960.                 {
  961.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  962.                                     E_buf[luc] = byte_read(luc);
  963.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  964.                         E_buf[0x40+5] = 0x0;                //0x45单元清零表示高度X初始值已经保存过
  965.                         fdat.fVal = gfCountX;                //把当前的值当初始值
  966.                         fIniValX = gfCountX;
  967.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x46,0x47,0x48,0x49
  968.                                 E_buf[0x40+6+luc] = fdat.ucChar[luc];
  969.                         E_buf[0x40+10] = 0x0;                //0x4A单元清零表示高度X初高度已经保存过
  970.                         for( luc = 0; luc < 4; luc++)        //把初高度保存0x4B,0x4C,0x4D,0x4E
  971.                         {
  972.                                 E_buf[0x40+11+luc] = lucBuffers[luc+7];
  973.                                 fdat.ucChar[luc]   = lucBuffers[luc+7];
  974.                         }
  975.                         fIniX = fdat.fVal;
  976.                         for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  977.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程                       
  978.                             fCalHigh();
  979.                             /*                   
  980.                             lucBuffers[2]=26;
  981.                         for(luc=0; luc<6; luc++)
  982.                                     lucBuffers[3+luc]=E_buf2[luc];
  983.                             for(luc=0; luc<4; luc++)
  984.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  985.                         for(luc=0; luc<4; luc++)
  986.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  987.                             for(luc=0; luc<4; luc++)
  988.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  989.                         for(luc=0; luc<4; luc++)
  990.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  991.                             for(luc=0; luc<4; luc++)
  992.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  993.                         for(luc=0; luc<4; luc++)
  994.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  995.                             for(luc=0; luc<4; luc++)
  996.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  997.                             luiCRC16 = 0xFFFF;
  998.                         for( luc = 0; luc < 37; luc++)
  999.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  1000.                         //放置CRC16校验码,低位在前,高位在后
  1001.                         AddressList.liAddress = luiCRC16;
  1002.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  1003.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  1004.                         Uart2_Tx_str(lucBuffers,39);
  1005.                        
  1006.                         return;       
  1007.                         */
  1008.                         }
  1009.                                        
  1010.                 if(lucBuffers[3]==0x11)    //11为高度X标定数据,
  1011.                 {
  1012.                         for( luc = 0; luc < 4; luc++)
  1013.                                 fdat.ucChar[luc] = lucBuffers[luc+7];
  1014.              
  1015.                         if((gfCountX - fIniValX)==0)
  1016.                                 fXsValX = ((fdat.fVal-fIniX)/1.0);
  1017.                         else
  1018.                                 fXsValX = ((fdat.fVal-fIniX)/(gfCountX - fIniValX));
  1019.                        
  1020.                         fdat.fVal = fXsValX;
  1021.                         bXsX=1;
  1022.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  1023.                                     E_buf[luc] = byte_read(luc);
  1024.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  1025.                         E_buf[0x40] = 0x0;                //0x40单元清零表示高度X标定数据已经保存过
  1026.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x41,0x42,0x43,0x44
  1027.                                 E_buf[0x40+1+luc] = fdat.ucChar[luc];       
  1028.                             for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  1029.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程
  1030.                             fCalHigh();
  1031.                     /*
  1032.                                 lucBuffers[2]=26;
  1033.                         for(luc=0; luc<6; luc++)
  1034.                                     lucBuffers[3+luc]=E_buf2[luc];
  1035.                             for(luc=0; luc<4; luc++)
  1036.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  1037.                         for(luc=0; luc<4; luc++)
  1038.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  1039.                             for(luc=0; luc<4; luc++)
  1040.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  1041.                         for(luc=0; luc<4; luc++)
  1042.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  1043.                             for(luc=0; luc<4; luc++)
  1044.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  1045.                         for(luc=0; luc<4; luc++)
  1046.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  1047.                             for(luc=0; luc<4; luc++)
  1048.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  1049.                             luiCRC16 = 0xFFFF;
  1050.                         for( luc = 0; luc < 37; luc++)
  1051.                             luiCRC16 = CRC_16( luiCRC16, lucBuffers[luc]);
  1052.                         //放置CRC16校验码,低位在前,高位在后
  1053.                         AddressList.liAddress = luiCRC16;
  1054.                         lucBuffers[ 37]  =   AddressList.IntToChar[ 1];
  1055.                         lucBuffers[ 38]  =   AddressList.IntToChar[ 0];
  1056.                         Uart2_Tx_str(lucBuffers,39);
  1057.                        
  1058.                         return;
  1059.                         */
  1060.                 }
  1061.                 //---------------------------------------------------------------------
  1062.                 if(lucBuffers[3]==0x08)     //2#小车起Y2初始值
  1063.                 {
  1064.                         for(luc=0; luc<80; luc++)          //把参数区的数据读出暂存
  1065.                                     E_buf[luc] = byte_read(luc);
  1066.                         sector_erase(0x0000);                // 扇区擦除,清空参数区的数据
  1067.                         E_buf[0x30+5] = 0x0;                //0x35单元清零表示高度Y2初始值已经保存过
  1068.                         fdat.fVal = gfCountY2;                //把当前的值当初始值
  1069.                         fIniValY2 = gfCountY2;
  1070.                         for( luc = 0; luc < 4; luc++)        //把初始值保存0x36,0x37,0x38,0x39
  1071.                                 E_buf[0x30+6+luc] = fdat.ucChar[luc];
  1072.                         E_buf[0x30+10] = 0x0;                //0x3A单元清零表示高度Y2初高度已经保存过
  1073.                         for( luc = 0; luc < 4; luc++)        //把初高度保存0x3B,0x3C,0x3D,0x3E
  1074.                         {
  1075.                                 E_buf[0x30+11+luc] = lucBuffers[luc+7];
  1076.                                 fdat.ucChar[luc]   = lucBuffers[luc+7];
  1077.                         }
  1078.                         fIniY2 = fdat.fVal;
  1079.                         for(luc=0; luc<80; luc++)                //把暂存区的数据写入参数区
  1080.                                     byte_program(0x0000+luc, E_buf[luc]);// 字节编程                       
  1081.                             fCalHigh();
  1082.                             /*                   
  1083.                             lucBuffers[2]=26;
  1084.                         for(luc=0; luc<6; luc++)
  1085.                                     lucBuffers[3+luc]=E_buf2[luc];
  1086.                             for(luc=0; luc<4; luc++)
  1087.                                     lucBuffers[9+luc]=highH3.fToChar[luc];
  1088.                         for(luc=0; luc<4; luc++)
  1089.                                     lucBuffers[13+luc]=SpeedH3.fToChar[luc];
  1090.                             for(luc=0; luc<4; luc++)
  1091.                                     lucBuffers[17+luc]=highH1.fToChar[luc];
  1092.                         for(luc=0; luc<4; luc++)
  1093.                                     lucBuffers[21+luc]=SpeedH1.fToChar[luc];
  1094.                             for(luc=0; luc<4; luc++)
  1095.                                     lucBuffers[25+luc]=highY1.fToChar[luc];
  1096.                         for(luc=0; luc<4; luc++)
  1097.                                     lucBuffers[29+luc]=highY2.fToChar[luc];
  1098.                             for(luc=0; luc<4; luc++)
  1099.                                     lucBuffers[33+luc]=highX.fToChar[luc];
  1100.                             luiCRC16 = 0xFFFF;
  1101. ……………………

  1102. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
读PLC采样单元.rar (119.14 KB, 下载次数: 31)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表