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

📄 rscomm.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 421   1          {
 422   2              ReadMeterData(0xA0,0xE5,2);     
 423   2              RS_Len = 2+2;
 424   2              }
 425   1        
 426   1              else if((RS_CmdH==0xC0)&&(RS_CmdL==0x10))       //当前日期及周次
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 8   

 427   1              {  
 428   2              ComBuf[RS_DataPtr+0] = Week; 
 429   2              ComBuf[RS_DataPtr+1] = Day;
 430   2              ComBuf[RS_DataPtr+2] = Month;
 431   2              ComBuf[RS_DataPtr+3] = Year;            
 432   2              //RS_Len = 2+4;
 433   2          }
 434   1          
 435   1          else if((RS_CmdH==0xC0)&&(RS_CmdL==0x11))   //当前时间
 436   1          {    
 437   2              ComBuf[RS_DataPtr+0] = Sec; 
 438   2              ComBuf[RS_DataPtr+1] = Min;
 439   2            ComBuf[RS_DataPtr+2] = Hour;        
 440   2            RS_Len = 2+3;
 441   2                      }
 442   1          
 443   1          else if((RS_CmdH==0xC0)&&(RS_CmdL==0x20))   //运行状态
 444   1          {           
 445   2              ComBuf[RS_DataPtr] = MeterFlag;
 446   2              RS_Len = 2+1;  
 447   2          }
 448   1              
 449   1          else if((RS_CmdH==0xC0)&&(RS_CmdL==0x30))   //电表常数
 450   1          {   
 451   2              ComBuf[RS_DataPtr+0] = 0x00;
 452   2              ComBuf[RS_DataPtr+1] = 0x16;
 453   2              ComBuf[RS_DataPtr+2] = 0x00; 
 454   2      
 455   2                              RS_Len  = 2+3;
 456   2          }
 457   1              
 458   1              else if((RS_CmdH==0xC0)&&((RS_CmdL==0x32)||(RS_CmdL==0x33)))
 459   1              {                       
 460   2            Temp[0] = 0xF8;                                                   //出厂编号
 461   2            if(RS_CmdL==0x33)         Temp[0] = 0xF0;         //局编号        
 462   2              //else                  Temp[0] = 0xF8;         //出厂编号        
 463   2              
 464   2            ReadMeterData(0xA0,Temp[0],6);       
 465   2              RS_Len  = 2+6;
 466   2         } 
 467   1         
 468   1         else if((RS_CmdH==0xC1)&&(RS_CmdL==0x17))    //自动抄表日期 
 469   1         {            
 470   2                      ReadMeterData(0xA0,0xD4,3);
 471   2            RS_Len    = 2+2;
 472   2         }
 473   1              
 474   1         else if((RS_CmdH==0xC3)&&(RS_CmdL==0x3F))    //时段表 
 475   1         {            
 476   2                      //有效时段数
 477   2                      Addr[0] = 0xA2;
 478   2              Addr[1] = 0xCE;
 479   2            Len[1]  = 0x02;
 480   2            ReadData(Temp);
 481   2              
 482   2              //数据范围限制
 483   2            if( (Temp[0]>12)||(Temp[0]<2))Temp[0] = 0x02;
 484   2      
 485   2            Temp[0] *= 0x03;
 486   2                      ReadMeterData(0xA2,0xD0,Temp[0]);
 487   2                                              
 488   2            RS_Len  = 2+Temp[0];
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 9   

 489   2              }
 490   1              
 491   1              else if((RS_CmdH==0xD1)&&(RS_CmdL>=0x20)&&(RS_CmdL<=0x2B))//电量历史数据                
 492   1              {
 493   2                      Temp[0]  = LastMonthSN(RS_CmdL&0x0F)<<4;        
 494   2                      ReadMeterData(0xA2,Temp[0],16);                                                 
 495   2                      RS_Len =2+16;
 496   2              }
 497   1              else TxdFlag = 0;       //命令不在服务范围  
 498   1      }
 499          
 500          
 501          
 502          
 503          
 504          //**********************************************************
 505          //名称:
 506          //功能:
 507          //说明:
 508          //**********************************************************
 509          void WriteMeter(void)
 510          {
 511   1              uchar i;
 512   1              uchar j; 
 513   1              uchar k;        
 514   1              uchar TFlag;
 515   1              uchar Temp[2];
 516   1      
 517   1              Watchdog_feed();                                                                                        //喂狗
 518   1      
 519   1          Flag |= 0x0A;
 520   1          //TxdFlag = 1;      //回应
 521   1              //TimeProg= 1;  //编程时间
 522   1          
 523   1          TFlag = PsWdCHK(RS_DataPtr);                                                                //密码检查
 524   1                      
 525   1              if((TFlag==0x10)&&(RS_CmdH==0xC1)&&(RS_CmdL==0x19))                     //清零密码+电表清零指令
 526   1          {                   
 527   2              //编程允许+清零次数
 528   2              TFlag=0x00;
 529   2              
 530   2              if(Prog_Flag==1) TFlag = 0x03;                          //编程允许后有2次机会
 531   2                      else
 532   2                      {
 533   3                              Addr[0] = 0xA0;
 534   3                      Addr[1] = 0xBE;    
 535   3                      Len[1]  = 0x02;
 536   3                      do
 537   3                      {
 538   4                              ReadData(Temp);
 539   4                      } while((Temp[0]!=~Temp[1])&&(Addr[0]<=0xA4));
 540   3              
 541   3                              if((Temp[0]==~Temp[1])&&(Temp[0]<0x03)) TFlag = Temp[0];        //清零次数
 542   3                      }
 543   2      
 544   2              if(TFlag<3) ArrayInit(&ComBuf[RS_CmdPtr+6],16);
 545   2                      else
 546   2                      {
 547   3                              if( BCDCHK(&ComBuf[RS_CmdPtr+6],16)==0 )        TFlag = 0x00;
 548   3                      }
 549   2              
 550   2                      
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 10  

 551   2                      if( TFlag!=0x00 )
 552   2              {
 553   3                              ArrayInit(&ComBuf[RS_CmdPtr+6],16);
 554   3                      for(i=0;i<5;i++)
 555   3                      {
 556   4                              j= 4*i;
 557   4                              
 558   4                              //小数清零
 559   4                              EryTmp[i] = ComBuf[RS_CmdPtr+6+j];                      
 560   4                              Temp[0]   = EryTmp[i];
 561   4                              Temp[1]   =~EryTmp[i];                          
 562   4                                      
 563   4                              Addr[0]   = 0xA0;
 564   4                                      Addr[1]   = Ptr[i];                                     
 565   4                              Len[1]    = 0x02;
 566   4                                      WriteEPMData(Temp);
 567   4                                              
 568   4                                      //整数校验和
 569   4                              ComBuf[RS_CmdPtr+6+j]=SumCHK(&ComBuf[RS_CmdPtr+6+j+1],3);                               
 570   4                      }                       
 571   3                              
 572   3                              EryTmp[5]=SumCHK(EryTmp,5);//小数检验和
 573   3                      
 574   3      
 575   3                      //有功电量整数清零
 576   3                              Addr[0] = 0xA0; 
 577   3                              Addr[1] = 0xC0;                 
 578   3                      Len[1]  = 0x10; 
 579   3                              WriteEPMData(&ComBuf[RS_CmdPtr+6]);
 580   3      
 581   3                              //ArrayInit(&ComBuf[RS_CmdPtr+6],16);                   
 582   3      
 583   3                              //有功电量整数低字节清零
 584   3                              Addr[0] = 0xA0; 
 585   3                              Addr[1] = 0xA0;                 
 586   3                      Len[1]  = 0x0A; 
 587   3                              WriteEPMData(&ComBuf[RS_CmdPtr+6]);             
 588   3                              
 589   3                          //反向电量整数清零                  
 590   3                              Addr[0] = 0xA0;
 591   3                              Addr[1] = 0xD0;                 
 592   3            Len[1]  = 0x04;
 593   3                              WriteEPMData(&ComBuf[RS_CmdPtr+6]);
 594   3      //****
 595   3                          //反向累计总时间
 596   3                              Addr[0] = 0xA0;
 597   3                              Addr[1] = 0x30;                 
 598   3            Len[1]  = 0x10;
 599   3                              WriteEPMData(&ComBuf[RS_CmdPtr+6]);
 600   3      
 601   3                              //最近一次反向起始时间
 602   3                        Addr[0] = 0xA0;
 603   3                              Addr[1] = 0xAA;                 
 604   3            Len[1]  = 0x05;
 605   3                              WriteEPMData(&ComBuf[RS_CmdPtr+6]);                     
 606   3                              EryRev = 0;     //电能反向标志清零(060302)                    
 607   3      //****                                          
 608   3                              //清零次数回写
 609   3                              TFlag--;
 610   3                              Temp[0] =  TFlag;
 611   3                              Temp[1] = ~TFlag;
 612   3                      
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 11  

 613   3                              Addr[0] = 0xA0;
 614   3                              Addr[1] = 0xBE; 
 615   3                              Len[1]  = 0x02;         
 616   3                              WriteEPMData(Temp);     
 617   3                              
 618   3                              ArrayInit(PulseTmp,6);//剩余脉冲清零
 619   3              }       
 620   2              else Flag &= ~0x0A;     
 621   2              }       
 622   1                      
 623   1              else if(TFlag==0x11)                    //编程密码 
 624   1          {
 625   2                      if(RS_CmdH==0xC0)
 626   2              {                       
 627   3                      if( (RS_CmdL==0x10)&&(Prog_Flag==1) )//日期编程+编程允许
 628   3                      { 
 629   4                                      if((ComBuf[RS_CmdPtr+6]<0x07)&&(DateCHK(&ComBuf[RS_CmdPtr+7])==1))
 630   4                                      {
 631   5                                              //周日月年                                      
 632   5                                              RTC_Set(0x30,&ComBuf[RS_CmdPtr+6],0x04);                                                                
 633   5                                              TimeAdj = 1;//校时时间

⌨️ 快捷键说明

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