📄 rtc_dsp.lst
字号:
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 + -