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

📄 rtc_dsp.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 864   2              ReadData(TMonth);
 865   2              } while((TMonth[0]!=~TMonth[1])&&(Addr[0]<=0xA6));
 866   1              
 867   1          if(TMonth[0]!=~TMonth[1])   TMonth[0] = 0x01; //默认上次结算为1月
 868   1          
 869   1          //读取自动抄表日期
 870   1          Addr[0] = 0xA0;     
 871   1          Addr[1] = 0xD4;     
 872   1          Len[1]  = 0x03;
 873   1          do
 874   1          {
 875   2              ReadData(TBalance);
 876   2                      Temp = TBalance[0]+TBalance[1];//SumCHK(TBalance,2);                                                    
 877   2          } while((TBalance[2]!=~Temp)&&(Addr[0]<=0xA4));    
 878   1              
 879   1          //写入默认月末24时冻结时间(00:00)
 880   1          if(TBalance[2]!=~Temp)
 881   1          {           
 882   2              TBalance[0] =  0x00;//时
 883   2              TBalance[1] =  0x01;//日
 884   2              TBalance[2] =  0xFE;//校验
 885   2          }   
 886   1      
 887   1              ErrorModify(0xA4,TBalance);
 888   1      
 889   1              //月判断
 890   1              TMonth[1] = BCD2HEX(Month);                     //当前月份
 891   1              Temp      = TMonth[1];                                  //当前月份HEX数据
 892   1              if(TMonth[1]<TMonth[0])TMonth[1] +=12;  //跨年
 893   1              TMonth[1] -= TMonth[0]; 
 894   1              
 895   1              if(TMonth[1]>0x01)                                              //大于1个月
 896   1              {
 897   2                      TBalance[2] = TMonth[1];                        //结算标志
 898   2              }       
 899   1              else if(TMonth[1]==0x01)
 900   1              {       
 901   2                      if(Day>TBalance[1])TBalance[2]=0x01;//超过结算日
 902   2                      else if((Day==TBalance[1])&&(Hour>=TBalance[0]))TBalance[2] = 0x01;//超过结算日时
 903   2                      else TBalance[2] = 0x00;
 904   2              }
 905   1              else     TBalance[2] = 0x00;
 906   1              
 907   1              if(TBalance[2]>=0x01)
 908   1              {
 909   2                      Addr[0] = 0xA0; 
 910   2              Addr[1] = 0xC0;
 911   2              Len[1]  = 0x10;
 912   2                      ReadData(ComBuf);                                       //读取正向有功电量集合          
 913   2                                      
 914   2                      ComBuf[0]  = EryTmp[0];
 915   2                      ComBuf[4]  = EryTmp[1];
 916   2                      ComBuf[8]  = EryTmp[2];
 917   2                      ComBuf[12] = EryTmp[3];
 918   2                      
 919   2                      TMonth[0]  =  Temp;
 920   2              TMonth[1]  = ~Temp;     
 921   2      
 922   2                      for(Temp=0x00;Temp<TBalance[2];Temp++)  //正向有功电量数据
 923   2                      {                       
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 16  

 924   3                              Addr[0] = 0xA2;                 
 925   3                              Addr[1] = LastMonthSN(Temp)<<4;                 
 926   3                      Len[1]  = 0x10;
 927   3                              WriteEPMData(ComBuf);           
 928   3                      } 
 929   2      
 930   2                      Addr[0] = 0xA2; 
 931   2                      Addr[1] = 0xCC;                 
 932   2              Len[1]  = 0x02;
 933   2                      WriteEPMData(TMonth);                           //结算月份
 934   2              }
 935   1              
 936   1              EryBln_Flag = 0;
 937   1      
 938   1              ArrayInit(ComBuf,RS_MaxSize);
 939   1                      
 940   1              ES     = 1;
 941   1              KBMASK = 0x40;
 942   1      }
 943          
 944          
 945          
 946          
 947          //**********************************************************
 948          // 名称:
 949          // 功能:
 950          // 说明:
 951          //**********************************************************
 952          void Fee_CHK(void)//时段费率检查
 953          {
 954   1              uchar TFlag;
 955   1              uchar TFee;
 956   1              uchar Num[2];
 957   1              
 958   1              ES  = 0;
 959   1              TR0 = 0;
 960   1              CommTimer = 0x00;                          //关UART中断
 961   1              ComPtr    = 0x00;
 962   1              
 963   1              //读有效时段数
 964   1              Addr[0] = 0xA2; 
 965   1          Addr[1] = 0xCE;
 966   1          Len[1]  = 0x02;    
 967   1          do
 968   1          {
 969   2              ReadData(Num);
 970   2          } while((Num[0]!=~Num[1])&&(Addr[0]<=0xA6));
 971   1                      
 972   1              TFlag = 0x00;           
 973   1              if((Num[0]!=~Num[1])||(Num[0]<2)||(Num[0]>12)) TFlag = 0x01;//有效时段数错误    
 974   1              else
 975   1              {       
 976   2                      ErrorModify(0xA6,Num);
 977   2                      Num[0] *= 0x03;   
 978   2                                      
 979   2                      Addr[0] = 0xA2; 
 980   2              Addr[1] = 0xD0;    
 981   2              Len[1]  = Num[0]+1;//长度:数据+校验和          
 982   2              do
 983   2              {
 984   3                      ReadData(ComBuf);
 985   3                  Num[1]   = SumCHK(ComBuf,Num[0]);//校验和                                                           
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 17  

 986   3              } while((Num[1]!=~ComBuf[Num[0]])&&(Addr[0]<=0xA6));    
 987   2                      
 988   2                      if(Num[1]!=~ComBuf[Num[0]])     TFlag=0x01;             //时段数据错误
 989   2                      else
 990   2                      {                       
 991   3                              TFee    = 0x00;                         
 992   3                              Num[1]  = 0x00;
 993   3                              Num[0]--;
 994   3      
 995   3                              if((Hour<ComBuf[2])||(Hour>ComBuf[Num[0]]))     TFee=ComBuf[Num[0]-2];//跨零点区域费率判断
 996   3                              else
 997   3                              {       
 998   4                                      do                                      
 999   4                                      {                                       
1000   5                                              if(Num[1]==(Num[0]-2))  TFee=ComBuf[Num[0]-2];//时段表末尾
1001   5                                              else
1002   5                                              {
1003   6                                                      if(Hour>=ComBuf[Num[1]+2])
1004   6                                                      {
1005   7                                                              if(Hour<ComBuf[Num[1]+5])
1006   7                                                              {
1007   8                                                                      TFee = ComBuf[Num[1]];
1008   8                                                              }                                       
1009   7                                                              else
1010   7                                                              {
1011   8                                                                      if((Hour==ComBuf[Num[1]+2])&&(Hour==ComBuf[Num[1]+5]))
1012   8                                                                      {
1013   9                                                                              if(Min<0x30)    TFee = ComBuf[Num[1]];
1014   9                                                                              else                    TFee = ComBuf[Num[1]+3];
1015   9                                                                      }
1016   8                                                              }                               
1017   7                                                      }
1018   6                                              }
1019   5      
1020   5                                              Num[1] += 0x03;
1021   5      
1022   5                                      }while( (TFee==0x00)&&(Num[1]<Num[0]));//后条件为冗余条件
1023   4                                      
1024   4                                      if(TFee==0x00)  TFlag=0x01;//冗余代码,时段费率查找失败
1025   4                              }
1026   3                      }
1027   2              }
1028   1              
1029   1              if(TFlag!=0x00)
1030   1              {
1031   2                      //默认有效时段数 
1032   2              Num[0] =  0x02;
1033   2              Num[1] = ~0x02;
1034   2              
1035   2                      Addr[0] = 0xA2;
1036   2                      Addr[1] = 0xCE;                         
1037   2              Len[1]  = 0x02;
1038   2                      WriteEPMData(Num);
1039   2                      
1040   2                      //默认时段值
1041   2              ComBuf[0] = 0x02;//峰时段8:00~21:00
1042   2              ComBuf[1] = 0x00;
1043   2              ComBuf[2] = 0x08;
1044   2              
1045   2              ComBuf[3] = 0x04;//谷时段21:00~8:00
1046   2              ComBuf[4] = 0x00;
1047   2              ComBuf[5] = 0x21;
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 18  

1048   2              
1049   2              ComBuf[6] = 0xD0;//校验和反码
1050   2              
1051   2                      Addr[0] = 0xA2;
1052   2                      Addr[1] = 0xD0;          
1053   2              Len[1]  = 0x07; 
1054   2                      WriteEPMData(ComBuf);
1055   2              
1056   2                      Num[1]=BCD2HEX(Hour);
1057   2      
1058   2                      TFee=0x04;                                                              //谷费率                
1059   2                      if((Num[1]>=8)&&(Num[1]<21))TFee=0x02;  //峰费率                
1060   2              }
1061   1              
1062   1              LED_F = 1;
1063   1              LED_G = 1;
1064   1              
1065   1              if(TFee==0x04)          //谷
1066   1              {
1067   2                      Fee1=1;
1068   2                      Fee0=1;
1069   2                      LED_G = 0;              //谷时段指示亮          
1070   2              }
1071   1              else if(TFee==0x03)     //平
1072   1              {
1073   2                      Fee1=1;
1074   2                      Fee0=0;                
1075   2              }
1076   1              else                            //峰
1077   1              {
1078   2                      Fee1=0;
1079   2                      Fee0=1;
1080   2                      LED_F = 0;              //峰时段指示亮 
1081   2              }
1082   1 

⌨️ 快捷键说明

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