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