⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rscomm.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 206   3                                  ArrayInit(ComBuf,RS_MaxSize);
 207   3                                  
 208   3                                  //数据清零                      
 209   3                                              for(i=0;i<16;i++)
 210   3                          {
 211   3                              Addr[0] = 0xA0;
 212   3                                                  Addr[1] = i*16;                                             
 213   3                                          Len[1]      = 16; 
 214   3                                          WriteEPMData(ComBuf);
 215   3                                          
 216   3                                          Addr[0] = 0xA2;
 217   3                                          WriteEPMData(ComBuf);
 218   3                              }
 219   3      
 220   3                                              ComBuf[0] = 0x02;
 221   3                                              ComBuf[1] =~0x02;
 222   3      
 223   3                                              Addr[0]   = 0xA0;
 224   3                                              Addr[1]   = 0xBE; 
 225   3                                              Len[1]    = 0x02;       
 226   3                                              WriteEPMData(ComBuf);
 227   3                           
 228   3                          AUXR1 |= 0x08;                                      //复位  
 229   3                      }                              
 230   3                      }
 231   3                  //※※※※※※※※※※※※※※※※※※※※※※※※※※※※  
 232   3                      */
 233   3                              
 234   3                      else if(TFlag==0x20)            //密码修改
 235   3                      {
 236   4                              j = PsWdCHK(RS_CmdPtr); //旧密码检查
 237   4      
 238   4                                      for(i=0;i<4;i++)                //构造返回数据
 239   4                              {
 240   5                                      ComBuf[RS_CmdPtr+i] = ComBuf[RS_CmdPtr+4+i];
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 5   

 241   5                      }
 242   4      
 243   4                      ComBuf[RS_CmdPtr+4] = ~SumCHK(&ComBuf[RS_CmdPtr+1],3);//密码的校验和
 244   4                      
 245   4                      Addr[0] = 0xA0;
 246   4                      Len[1]  = 0x04;                 
 247   4      
 248   4                                      if((j==0x10)&&(ComBuf[RS_CmdPtr]==0x00))//清零密码
 249   4                              {
 250   5                              Addr[1] = 0xE8;         
 251   5                                              WriteEPMData(&ComBuf[RS_CmdPtr+1]);
 252   5                                              
 253   5                              Flag |= 0x0A;
 254   5                              //TimeProg = 1;
 255   5                              //TxdFlag  = 1;         
 256   5                                      }
 257   4                                              
 258   4                              if((j==0x11)&&(ComBuf[RS_CmdPtr]==0x01))//编程密码
 259   4                              {
 260   5                              Addr[1] = 0xEC;
 261   5                              WriteEPMData(&ComBuf[RS_CmdPtr+1]);
 262   5                                              
 263   5                              Flag |= 0x0A;
 264   5                              //TimeProg = 1;
 265   5                              //TxdFlag  = 1;         
 266   5                                      }
 267   4                                      RS_Len  = 0x04;         
 268   4                              } 
 269   3                      
 270   3                      else if(TFlag==0x21) ReadMeter();                       //读电表数据 
 271   3                      else
 272   3                      {                                
 273   4                              WriteMeter();                                                   //设置电表数据
 274   4                                      RS_Len = 0x00;                  
 275   4                      }               
 276   3              }
 277   2              
 278   2              if( TimeProg==1 )                                                           //编程时间及编程次数
 279   2              {
 280   3                      TimeProg = 0;
 281   3              
 282   3                      RTC_Read();
 283   3                              
 284   3                      //编程时间
 285   3                      ComBuf[40] = Min;                                                       //分
 286   3                      ComBuf[41] = Hour;                                                      //时
 287   3                      ComBuf[42] = Day;                                                       //日
 288   3                      ComBuf[43] = Month;                                             //月
 289   3                      ComBuf[44] = SumCHK(&ComBuf[40],4);         //校验和
 290   3                              
 291   3                      //编程次数
 292   3                                      Addr[0] = 0xA0;
 293   3              Addr[1] = 0xE5;
 294   3              Len[1]  = 0x03;
 295   3              do
 296   3              {
 297   4                              ReadData(&ComBuf[45]);
 298   4                                                      i= ComBuf[45]+ComBuf[46];                               //SumCHK(&ComBuf[45],2);                                                                
 299   4              } while((i!=ComBuf[47])&&(Addr[0]<=0xA4));
 300   3                              
 301   3              if(i!=ComBuf[47])
 302   3              {
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 6   

 303   4                      ComBuf[45] = 0x00;
 304   4                                              ComBuf[46] = 0x00;
 305   4              }                       
 306   3                              
 307   3                      BCDINC(&ComBuf[45],2,1);                                        //编程次数+1
 308   3                      ComBuf[47]=ComBuf[45]+ComBuf[46];                       //SumCHK(&ComBuf[45],2);                
 309   3                              
 310   3                              //写编程时间+编程次数   
 311   3                      Addr[0] = 0xA0;
 312   3                      Addr[1] = 0xE0;
 313   3                      Len[1]  = 0x08;                         
 314   3                                      WriteEPMData(&ComBuf[40]);
 315   3                              
 316   3                      //写校时时间
 317   3                                      if(TimeAdj==1)
 318   3                      {   
 319   4                                                      TimeAdj = 0; 
 320   4                              
 321   4                                              Addr[0] = 0xA2;
 322   4                              Addr[1] = 0xF8;                                         
 323   4                              Len[1]  = 0x05;
 324   4                              WriteEPMData(&ComBuf[40]);                              
 325   4                      }               
 326   3              }
 327   2      
 328   2              ComPtr  = 0x00;                                         //通讯缓冲区初始指针
 329   2                      
 330   2                              if(TxdFlag==1)                                          //电表应答
 331   2              {                       
 332   3                                      TxdFlag  = 0;
 333   3                              
 334   3                                      LED_COMM = 0;                   
 335   3                                      CommSec  = CommLEDTime;                 //亮10秒
 336   3                 
 337   3                                      Proc33(0x33);                   //数据加0x33处理
 338   3      
 339   3                                      RS_Ctrl |= 0x80;                                //从机应答标识符
 340   3                              RS_CRC   = SumCHK(ComBuf,RS_CmdPtr+RS_Len);
 341   3                                      RS_End   = 0x16;
 342   3                                              
 343   3                                      TxdWork  = 1;                                   //发送标志                              
 344   3                                      ES       = 1;
 345   3                                                      
 346   3                                      TB8      = 1;                                   //偶校验
 347   3                                      SBUF     = 0xFE;                                        //发送第一个字节值
 348   3                              }       
 349   2              else 
 350   2                              {
 351   3                                      COMMSEL = 0;                                    //默认红外通讯方式
 352   3                                      CTRL485 = 1;                                    //RS485接收状态         
 353   3      
 354   3                                      TR1     = 0;                                    //Timer1关闭,无红外载波
 355   3      //                      HW38K   = 1;                                    //P0.7置高                                                                      
 356   3                                      CommFlag= 0;
 357   3                              
 358   3                                      ArrayInit(ComBuf,RS_MaxSize);           
 359   3                              
 360   3                                      TR0 = 0;
 361   3                      TH0 = 0x53;                                     //Timer0定时12mS初值                    
 362   3                      TL0 = 0x33;     
 363   3                                      TR0 = 1;                                                //打开Timer0  
 364   3                      }                       
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 7   

 365   2              } 
 366   1      }
 367          
 368          
 369          
 370          //**********************************************************
 371          //名称:ReadMeter()
 372          //功能:读电表中的数据
 373          //说明:
 374          //**********************************************************
 375          void ReadMeter(void)
 376          {       
 377   1              uchar Temp[2];  
 378   1              
 379   1              TxdFlag = 1;                                                            //数据返回标志
 380   1        
 381   1          RS_Len  = 2+4;                                                              //返回数据长度
 382   1           
 383   1              if((RS_CmdH==0x90)&&(RS_CmdL==0x1F))            //当前有功电量集合
 384   1              {
 385   2                      ReadMeterData(0xA0,0xC0,16);                    //整数
 386   2                      
 387   2                      ComBuf[RS_DataPtr+0]  = EryTmp[0];              //总电量小数
 388   2                      ComBuf[RS_DataPtr+4]  = EryTmp[1];              //峰电量小数
 389   2                      ComBuf[RS_DataPtr+8]  = EryTmp[2];              //平电量小数
 390   2                      ComBuf[RS_DataPtr+12] = EryTmp[3];              //谷电量小数
 391   2                      
 392   2                      RS_Len  = 2+16;
 393   2              }               
 394   1                      
 395   1              else if((RS_CmdH==0x90)&&(RS_CmdL==0x20))       //反向累计电量
 396   1              {                       
 397   2              ReadMeterData(0xA0,0xD0,0x04);              //反向电量整数        
 398   2              ComBuf[RS_DataPtr]  = EryTmp[4];                //反向电量小数         
 399   2              //RS_Len  = 2+4;        
 400   2          } 
 401   1        
 402   1              else if((RS_CmdH==0xB0)&&(RS_CmdL==0x20))       //反向起始时间
 403   1              {   
 404   2                      ReadMeterData(0xA0,0xAA,4);             
 405   2              //RS_Len = 2+4;
 406   2          }
 407   1          
 408   1          else if((RS_CmdH==0xB0)&&(RS_CmdL==0x21))   //反向累计时间
 409   1          { 
 410   2              ReadMeterData(0xA0,Ptr[6],3);           
 411   2              RS_Len = 2+3;
 412   2              }               
 413   1              
 414   1              else if((RS_CmdH==0xB2)&&(RS_CmdL==0x10))       //编程时间
 415   1              { 
 416   2              ReadMeterData(0xA0,0xE0,4);             
 417   2              //RS_Len = 2+4;
 418   2          }
 419   1      
 420   1          else if((RS_CmdH==0xB2)&&(RS_CmdL==0x12))   //编程次数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -