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