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

📄 rscomm.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 634   5                                              
 635   5                                              //********
 636   5                                              EryBln_Flag = 1;
 637   5                                      }
 638   4                              }
 639   3                                                                      
 640   3                              else if((RS_CmdL==0x11)&&(TimeTerm()==1))//时间编程
 641   3                              {
 642   4                                      RTC_Set(0x00,&ComBuf[RS_CmdPtr+6],0x03);
 643   4                              
 644   4                                      AdjTime = 0;//校时条件满足
 645   4      
 646   4                              TimeAdj = 1;//校时时间
 647   4                                      Fee_Flag= 1;//费率检查                                                          
 648   4                      }               
 649   3                      
 650   3                      else if(((RS_CmdL==0x32)||(RS_CmdL==0x33))&&(Prog_Flag==1))
 651   3                      {
 652   4                              Addr[0] = 0xA0;
 653   4                              
 654   4                              Addr[1] = 0xF0;                                         //局编号                        
 655   4                              if(RS_CmdL==0x32)       Addr[1] = 0xF8; //出厂编号
 656   4                              //else                          Addr[1] = 0xF0; //局编号                        
 657   4                              Len[1]  = 0x07; 
 658   4                      
 659   4                              ComBuf[RS_CmdPtr+6+6]=SumCHK(&ComBuf[RS_CmdPtr+6],6);
 660   4      
 661   4                                      WriteEPMData(&ComBuf[RS_CmdPtr+6]);     
 662   4                              }
 663   3                              else Flag &= ~0x0A;      
 664   3              }
 665   2                      //else if((RS_CmdH==0xC1)&&(RS_CmdL==0x15)&&(Prog_Flag==1))//显示选择           
 666   2                      else if((RS_CmdH==0xC1)&&(RS_CmdL==0x15))                                       //显示选择
 667   2                      {
 668   3                              DspTime    = ComBuf[RS_CmdPtr+6+0];
 669   3                      DspCtrl2   = ComBuf[RS_CmdPtr+6+1];
 670   3                      DspCtrl1   = ComBuf[RS_CmdPtr+6+2]|0x1C;
 671   3                      if(DspTime>0x30||DspTime<0x02)DspTime=0x10;
 672   3                      
 673   3                      DspParaCHK = ~(DspCtrl1+DspCtrl2+DspTime);
 674   3                      
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 12  

 675   3                      Addr[0] = 0xA0;
 676   3                              Addr[1] = 0xDC;                 
 677   3                      Len[1]  = 0x04; 
 678   3                      WriteEPMData(DspPara);  
 679   3                      
 680   3                      DspSec = BCD2HEX(DspTime);
 681   3                      DspPtr = 0xFF;  
 682   3                      }
 683   2                      
 684   2                      else if((RS_CmdH==0xC1)&&(RS_CmdL==0x17)&&(Prog_Flag==1))//自动抄表日期
 685   2                      {
 686   3                              ComBuf[RS_CmdPtr+6+2]=~(ComBuf[RS_CmdPtr+6+0]+ComBuf[RS_CmdPtr+6+1]);//~SumCHK(&ComBuf[RS_CmdPtr+6],2);
 687   3                              
 688   3                              Addr[0] = 0xA0;
 689   3                              Addr[1] = 0xD4;                 
 690   3                      Len[1]  = 0x03;                 
 691   3                              WriteEPMData(&ComBuf[RS_CmdPtr+6]);
 692   3                      }
 693   2              
 694   2              else if((RS_CmdH==0xC3)&&(RS_CmdL==0x3F)&&(Prog_Flag==1))//时段表       
 695   2              {
 696   3                      //时段表数据分析
 697   3                      TFlag=0x00;             
 698   3                      i=RS_CmdPtr+6;//两位命令符+4位密码
 699   3                      j=RS_CmdPtr+RS_Len;
 700   3                      
 701   3                      //一个时段单位数据检查
 702   3                      do
 703   3                      {
 704   4                              //费率
 705   4                              if((ComBuf[i]<0x02)||(ComBuf[i]>0x04))              TFlag |= 0x01;
 706   4                              
 707   4                              //分
 708   4                              i++;
 709   4                              if((ComBuf[i]!=0x00)&&(ComBuf[i]!=0x30))                TFlag |= 0x01;                  
 710   4                              
 711   4                              //时
 712   4                              i++;
 713   4                              if(((ComBuf[i]&0x0F)>0x09)||(ComBuf[i]>0x23))   TFlag |= 0x01;                  
 714   4                              
 715   4                              i++;
 716   4                              
 717   4                      }while((TFlag==0x00)&&(i<j));
 718   3                      
 719   3                      
 720   3                      if(TFlag==0x00)//数据正确
 721   3                      {               
 722   4                              Temp[0] = (RS_Len/3)-2;         //有效时段数
 723   4                                              
 724   4                              j -= 3;                 
 725   4                              do//时段表排序算法(冒泡)
 726   4                              {
 727   5                                      k=1;
 728   5                                      for(i=RS_CmdPtr+6;i<j;)
 729   5                                      {
 730   6                                              //基于小时量的比较
 731   6                                              if(ComBuf[i+2]>ComBuf[i+5])
 732   6                                              {
 733   7                                                      //费率
 734   7                                                      Temp[1]         = ComBuf[i];
 735   7                                                      ComBuf[i]   = ComBuf[i+3];
 736   7                                                      ComBuf[i+3] = Temp[1]; 
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 13  

 737   7                                                      
 738   7                                                      //分
 739   7                                                      Temp[1]     = ComBuf[i+1];
 740   7                                                      ComBuf[i+1] = ComBuf[i+4];
 741   7                                                      ComBuf[i+4] = Temp[1];
 742   7                                                      
 743   7                                                      //时
 744   7                                                      Temp[1]         = ComBuf[i+2];
 745   7                                                      ComBuf[i+2]     = ComBuf[i+5];
 746   7                                                      ComBuf[i+5]     = Temp[1];              
 747   7                                              }
 748   6                                              else if(ComBuf[i+2]==ComBuf[i+5])
 749   6                                              {       
 750   7                                                      if(ComBuf[i+1]>ComBuf[i+4])//分比较
 751   7                                                      {
 752   8                                                              //费率
 753   8                                                              Temp[1]         = ComBuf[i];
 754   8                                                              ComBuf[i]   = ComBuf[i+3];
 755   8                                                              ComBuf[i+3] = Temp[1];
 756   8                                                              
 757   8                                                              //分
 758   8                                                              Temp[1]     = ComBuf[i+1];
 759   8                                                              ComBuf[i+1] = ComBuf[i+4];
 760   8                                                              ComBuf[i+4] = Temp[1];
 761   8                                                      }                                               
 762   7                                                      else if((ComBuf[i+1]==ComBuf[i+4])&&    //同时段,费率不同错误
 763   7                                                                      (  ComBuf[i]!=ComBuf[i+3]))             TFlag =0x01;
 764   7                                                      else k++;
 765   7                                              }
 766   6                                              else k++;                                       
 767   6                                              i += 0x03;              
 768   6                                      }                                               
 769   5                              }while(k<Temp[0]);
 770   4                      
 771   4                      
 772   4                              if(TFlag==0x00)         
 773   4                              {       
 774   5                                      Fee_Flag = 1;
 775   5                                      
 776   5                                      i = RS_Len-6;
 777   5                                      RS_CRC = ~SumCHK(&ComBuf[RS_CmdPtr+6],i);//时段费率检验和反码
 778   5                              
 779   5                                      //有效时段数
 780   5                                      Temp[1] = ~Temp[0];
 781   5                                      Addr[0] = 0xA2; 
 782   5                                              Addr[1] = 0xCE;                                 
 783   5                                      Len[1]  = 0x02; 
 784   5                                              WriteEPMData(Temp);
 785   5                                      
 786   5                                      if(Temp[0]<6)
 787   5                                      {
 788   6                                              Addr[0] = 0xA2; 
 789   6                                                      Addr[1] = 0xD0;                                         
 790   6                                              Len[1]  = i+1; 
 791   6                                                      WriteEPMData(&ComBuf[RS_CmdPtr+6]);
 792   6                                      }                       
 793   5                                              else if(Temp[0]>10)
 794   5                                              {
 795   6                                                      Addr[0] = 0xA2; 
 796   6                                                      Addr[1] = 0xD0;
 797   6                                              Len[1]  = 0x10; 
 798   6                                                      WriteEPMData(&ComBuf[RS_CmdPtr+6]);
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 14  

 799   6                                              
 800   6                                                      Addr[0] = 0xA2; 
 801   6                                                      Addr[1] = 0xE0; 
 802   6                                                      WriteEPMData(&ComBuf[RS_CmdPtr+6+16]);
 803   6                                              
 804   6                                                      Addr[0] = 0xA2; 
 805   6                                                      Addr[1] = 0xF0;                                         
 806   6                                              Len[1]  = i-32+1; 
 807   6                                                      WriteEPMData(&ComBuf[RS_CmdPtr+6+32]);
 808   6                                              }                       
 809   5                                              else
 810   5                                              {
 811   6                                                      Addr[0] = 0xA2; 
 812   6                                                      Addr[1] = 0xD0;                                         
 813   6                                              Len[1]  = 0x10; 
 814   6                                                      WriteEPMData(&ComBuf[RS_CmdPtr+6]);
 815   6                                                                                      
 816   6                                                      Addr[0] = 0xA2; 
 817   6                                                      Addr[1] = 0xE0;                                         
 818   6                                              Len[1]  = i-16+1; 
 819   6                                                      WriteEPMData(&ComBuf[RS_CmdPtr+6+16]);
 820   6                                              }                                       
 821   5                                      }
 822   4                                      else Flag &= ~0x0A;     
 823   4                      }
 824   3                      else Flag &= ~0x0A;      
 825   3              }
 826   2              else Flag &= ~0x0A;             
 827   2              }
 828   1              else Flag &= ~0x0A;
 829   1      }
 830          
 831          
 832          
 833          
 834          
 835          //**********************************************************
 836          //名称:
 837          //功能:
 838          //说明:
 839          //**********************************************************
 840          uchar RxdCheck(void)
 841          {       
 842   1              uchar Address[6];
 843   1              
 844   1              //帧长度、帧结构检查
 845   1              if( ComPtr<RS_MinSize || RS_Head!=0x68 || RS_Head0!=0x68 || RS_End!=0x16  ) return 0x00;  
 846   1              
 847   1              //校验错误      
 848   1          if( RS_CRC!=SumCHK(ComBuf,RS_CmdPtr+RS_Len)) return 0x00;     

⌨️ 快捷键说明

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