📄 rscomm.c
字号:
case 0x9410://上月正向总有功(总)指数
case 0x9412://上月正向总有功(峰)指数
case 0x9413://上月正向总有功(平)指数
case 0x9414://上月正向总有功(谷)指数
{
addr1 = 0x02;
addr2 = LastMonthSN(0+LLastEryFlag); //上月
addr2 <<= 4;
if(RS_CmdL==0x12) addr2 += 0x04;
if(RS_CmdL==0x13) addr2 += 0x08;
if(RS_CmdL==0x14) addr2 += 0x0C;
Read24C64(&ComBuf[12],addr1,addr2,4);
RS_Len =2+4;
break;
}
case 0x9810://上上月正向总有功(总)指数
case 0x9812://上上月正向总有功(峰)指数
case 0x9813://上上月正向总有功(平)指数
case 0x9814://上上月正向总有功(谷)指数
{
addr1 = 0x02;
addr2 = LastMonthSN(1+LLastEryFlag); //上上月
addr2 <<= 4;
if(RS_CmdL==0x12) addr2 += 0x04;
if(RS_CmdL==0x13) addr2 += 0x08;
if(RS_CmdL==0x14) addr2 += 0x0C;
Read24C64(&ComBuf[12],addr1,addr2,4);
RS_Len =2+4;
break;
}
case 0xB210://最近一次编程时间
{
Read24C64(Temp,0x08,0xFC,2); //读最近一次编程事件指针
//读编程事件指针失败的处理
if(Temp[0]!=~Temp[1])
{
Temp[0] = 0x00;
Temp[1] = 0xFF;
Write24C64(Temp,0x08,0xFC,2);
}
Read24C64(&ComBuf[12],0x08,0xE0+Temp[0]*5,4);
RS_Len =2+4;
break;
}
case 0xB212://编程次数
{
Read24C64(&ComBuf[12],0x08,0xF9,2);
RS_Len =2+2;
break;
}
case 0xB214://电池工作时间
{
Read24C64(&ComBuf[12],0x00,0xE6,3);
RS_Len =2+3;
break;
}
////////////////////////////////////////////////////////
case 0xB216://温度
{
ComBuf[12] = Temp_Read();
RS_Len =2+1;
break;
}
////////////////////////////////////////////////////////
case 0xC010://当前日期(周次)数据块
{
RTC_Read();
ComBuf[12] = Week;
ComBuf[13] = Day;
ComBuf[14] = Month;
ComBuf[15] = Year;
RS_Len = 2+4;
break;
}
case 0xC011://当前时间数据块
{
RTC_Read();
ComBuf[12] = Sec;
ComBuf[13] = Min;
ComBuf[14] = Hour;
RS_Len = 2+3;
break;
}
case 0xC01F://当前日期(周次)、时间数据块
{
RTC_Read();
ComBuf[12] = Week;
ComBuf[13] = Day;
ComBuf[14] = Month;
ComBuf[15] = Year;
ComBuf[16] = Sec;
ComBuf[17] = Min;
ComBuf[18] = Hour;
RS_Len = 2+7;
break;
}
case 0xC020://电表运行状态字
{
ComBuf[12] = MeterRunFlag;
RS_Len = 2+1;
break;
}
case 0xC030://电表有功常数:1600imp
{
ComBuf[12+0] = 0x00;
ComBuf[12+1] = 0x16;
ComBuf[12+2] = 0x00;
RS_Len = 2+3;
break;
}
case 0xC032://表号(资产条形码号)
{
Read24C64(&ComBuf[12],0x00,0xF7,6);
RS_Len = 2+6;
break;
}
case 0xC113://屏幕循显时间
{
Read24C64(&ComBuf[12],0x00,0x54,1);
RS_Len =2+1;
break;
}
case 0xC117://自动抄表日期
{
Read24C64(&ComBuf[12],0x08,0x88,2);
RS_Len =2+2;
break;
}
case 0xC211://输出脉冲宽度:80mS
{
//此处需注意数据上传先后顺序
ComBuf[12+0] = 0x80;
ComBuf[12+1] = 0x00;
RS_Len = 2+2;
break;
}
case 0xC311://日时段表数
{
ComBuf[12] = 0x02;
RS_Len = 2+1;
break;
}
case 0xC312://日时段数
{
ComBuf[12] = 0x08;
RS_Len = 2+1;
break;
}
case 0xC313://费率数
{
ComBuf[12] = 0x03;
RS_Len = 2+1;
break;
}
case 0xC32F://时区起始日期及日时段表号数据块
{
Read24C64(&ComBuf[12],0x09,0x47,6);
RS_Len =2+6;
break;
}
case 0xC33F://时段表1时段起始日期及费率号数据块
{
Read24C64(&ComBuf[12],0x00,0x60,24);
RS_Len =2+24;
break;
}
case 0xC34F://时段表2时段起始日期及费率号数据块
{
Read24C64(&ComBuf[12],0x00,0x80,24);
RS_Len =2+24;
break;
}
case 0xD400://自动显示数据域
{
Read24C64(&ComBuf[12],0x00,0x50,3);
RS_Len =2+3;
break;
}
case 0xD403://电表管理状态
{
Read24C64(&ComBuf[12],0x00,0xEE,1);
RS_Len =2+1;
break;
}
case 0xD404://检定人代码和检定时间:NNNNNN+YYMMDD
{
Read24C64(&ComBuf[12],0x00,0xF0,6);
RS_Len =2+6;
break;
}
case 0xD406://产品条形码号
{
//产品条形码号(低30字节)
Read24C64(&ComBuf[12],0x09,0xC0,30);
//产品条形码号(高30字节)
Read24C64(&ComBuf[42],0x09,0xE0,30);
RS_Len =2+60;
break;
}
case 0xD407://电池报警时间:YYMMDDhhmm
{
Read24C64(&ComBuf[12],0x00,0xE0,5);
RS_Len =2+5;
break;
}
case 0xD40B://最近一次开表盖、端钮盒时间:MMDDhhmm
case 0xD40C://最近上一次开表盖、端钮盒时间:MMDDhhmm
{
i = 0; //最近一次
if(RS_CmdL==0x0C) i = 10; //最近上一次
//读取最近一次开表盖时间
Read24C64(&ComBuf[12],0x09,0x00+i,5);
Temp[0] = ~SumCHK(&ComBuf[12],4);
if(ComBuf[16]!=Temp[0]) ArrayInit(&ComBuf[12],4);
//读取最近一次开端钮盒时间
Read24C64(&ComBuf[16],0x09,0x05+i,5);
Temp[0] = ~SumCHK(&ComBuf[16],4);
if(ComBuf[20]!=Temp[0]) ArrayInit(&ComBuf[16],4);
RS_Len =2+8;
break;
}
case 0xD40D://累计开表盖、端钮盒次数
{
//读取开表盖累计次数
Read24C64(&ComBuf[12],0x09,0x1C,3);
Temp[0] = ComBuf[12]+ComBuf[13];
if(ComBuf[14]!=~Temp[0])
{
ComBuf[12] = 0x00;
ComBuf[13] = 0x00;
}
//读取开端钮盒累计次数
Read24C64(&ComBuf[14],0x09,0x1F,3);
Temp[0] = ComBuf[14]+ComBuf[15];
if(ComBuf[16]!=~Temp[0])
{
ComBuf[14] = 0x00;
ComBuf[15] = 0x00;
}
RS_Len =2+4;
break;
}
case 0xD40E://累计开表盖、端钮盒时间
{
//读取累计开表盖时间
Read24C64(&ComBuf[12],0x09,0x14,4);
Temp[0] = ~SumCHK(&ComBuf[12],3);
if(ComBuf[15]!=Temp[0]) ArrayInit(&ComBuf[12],3);
//读取累计开端钮盒时间
Read24C64(&ComBuf[15],0x09,0x18,4);
Temp[0] = ~SumCHK(&ComBuf[15],3);
if(ComBuf[18]!=Temp[0]) ArrayInit(&ComBuf[15],3);
RS_Len =2+6;
break;
}
case 0xD413://最近5次编程日期:MMDDhhmm
{
//读最近一次编程事件指针
Read24C64(Temp,0x08,0xFC,2);
//读编程事件指针失败的处理
if(Temp[0]!=~Temp[1])
{
Temp[0] = 0x00;
Temp[1] = 0xFF;
Write24C64(Temp,0x08,0xFC,2);
}
for(i=0;i<5;++i)
{
Temp[1] = Temp[0]-i;
if(Temp[1]<0) Temp[1] += 5;
addr2 = 0xE0+Temp[1]*5; //最近第i次编程事件指针
Read24C64(&ComBuf[12+i*4],0x08,addr2,4);
}
RS_Len =2+20;
break;
}
case 0xD414://有功反向累计总时间
{
Read24C64(&ComBuf[12],0x04,0xD0,3);
RS_Len =2+3;
break;
}
case 0xD415://时段表切换及标志
{
Read24C64(&ComBuf[12],0x09,0x40,6);
RS_Len =2+6;
break;
}
case 0xD416://现在执行时段表编号
{
Read24C64(&ComBuf[12],0x09,0x4F,1);
RS_Len =2+1;
break;
}
case 0xD40F://日时段费率切换时间、电量记录
{
Read24C64(&ComBuf[12],0x09,0x6A,38);
RS_Len =2+38;
break;
}
case 0xD41F://最近上1次清零记录
case 0xD42F://最近上2次清零记录
case 0xD43F://最近上3次清零记录
case 0xD44F://最近上4次清零记录
case 0xD45F://最近上5次清零记录
{
RS_CmdL >>= 4;
//读取清零事件指针
Read24C64(Temp,0x05,0xE7,2);
//读编清零事件指针失败的处理
if(Temp[0]!=~Temp[1]) Temp[0] = 0x00;
Temp[0] &= 0x07;
Temp[0] -= (RS_CmdL-1);
if(Temp[0]<0) Temp[0] += 5;
//只保留5次清零记录
if((Temp[0]<0)||(Temp[0]>4)) { TxdFlag = 0; }//命令不在服务范围
addr2 = (Temp[0]*3)<<4;
Read24C64(&ComBuf[12],0x05,addr2,38);
RS_Len =2+38;
break;
}
case 0xD730://当前月总有功总指数
case 0xD732://当前月总有功峰指数
case 0xD733://当前月总有功平指数
case 0xD734://当前月总有功谷指数
{
if(RS_CmdL==0x30) i = 0;
else i = RS_CmdL-0x31;
CreateRealTimeEry();
for(j=0;j<4;j++)
{
ComBuf[RS_DataPtr+j] = CommVariant[0+i*4+j];
}
RS_Len =2+4;
break;
}
case 0xD73F://当前月总有功指数数据块
{
CreateRealTimeEry();
for(j=0;j<16;j++)
{
ComBuf[RS_DataPtr+j] = CommVariant[0+j];
}
//RS_Len =2+16;
break;
}
case 0xD74F://当前月总累计反向时间、最后一次反向起、止时间
{
Read24C64(&ComBuf[12],0x04,0xC0,11);
RS_Len =2+11;
break;
}
case 0xD750:
case 0xD752:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -