📄 sypbprotocol.cpp
字号:
case 0x03: /*终端校时*/
mTreadBuf->DataBuf[count-6] = 0x4A; //改写控制码
mTreadBuf->DataBuf[count++] = 0x05; //AFN
mTreadBuf->DataBuf[count++] = 0x70; //SEQ
mTreadBuf->DataBuf[count++] = 0x00; //pn
mTreadBuf->DataBuf[count++] = 0x00;
mTreadBuf->DataBuf[count++] = 0x40; //DT
mTreadBuf->DataBuf[count++] = 0x03;
cTime = COleDateTime::GetCurrentTime();
mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetSecond());
mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetMinute());
mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetHour());
mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetDay());
mTreadBuf->DataBuf[count++] = (CUtilities::DecToHex((cTime.GetDayOfWeek()==1)?7:(cTime.GetDayOfWeek()-1))<<5) | CUtilities::DecToHex(cTime.GetMonth());
mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetYear()%100);
//memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
//count+=pQueueEle->nDataLenth;
mTreadBuf->DataBuf[count++] = 0x00; //PW
mTreadBuf->DataBuf[count++] = 0x00;
break;
case 0x04: /*设置终端抄表间隔*/
mTreadBuf->DataBuf[count++] = 0x04; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
mTreadBuf->DataBuf[count++] = 0;
else
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x80; //DT
mTreadBuf->DataBuf[count++] = 0x02;
memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
count+=pQueueEle->nDataLenth;
mTreadBuf->DataBuf[count++] = 0x00; //PW
mTreadBuf->DataBuf[count++] = 0x00;
break;
}/*end of (switch(pQueueEle->cnCtl[2]))*/
break;
case JCCTL_READPARA: /*查询终端参数*/
switch(pQueueEle->cnCtl[2])
{
case 0x01: /*主站IP地址和端口*/
mTreadBuf->DataBuf[count++] = 0x0A; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
mTreadBuf->DataBuf[count++] = 0x00; //pn
mTreadBuf->DataBuf[count++] = 0x00;
mTreadBuf->DataBuf[count++] = 0x04; //DT
mTreadBuf->DataBuf[count++] = 0x00;
break;
case 0x02: /*终端在线通信方式*/
mTreadBuf->DataBuf[count++] = 0x0A; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
mTreadBuf->DataBuf[count++] = 0x00; //pn
mTreadBuf->DataBuf[count++] = 0x00;
mTreadBuf->DataBuf[count++] = 0x01; //DT
mTreadBuf->DataBuf[count++] = 0x0B;
break;
case 0x03: /*读取终端时间*/
mTreadBuf->DataBuf[count++] = 0x0C; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
mTreadBuf->DataBuf[count++] = 0x00; //pn
mTreadBuf->DataBuf[count++] = 0x00;
mTreadBuf->DataBuf[count++] = 0x02; //DT
mTreadBuf->DataBuf[count++] = 0x00;
break;
case 0x04: /*读取终端抄表间隔*/
mTreadBuf->DataBuf[count++] = 0x0A; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
mTreadBuf->DataBuf[count++] = 0;
else
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x80; //DT
mTreadBuf->DataBuf[count++] = 0x02;
break;
}/*end of (switch(pQueueEle->cnCtl[2]))*/
break;
case JCCTL_SETMETERPARA: //设置电能表参数
switch(pQueueEle->cnCtl[2])
{
case 0x01: //测量点基本参数
mTreadBuf->DataBuf[count++] = 0x04; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
mTreadBuf->DataBuf[count++] = 0;
else
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x01; //DT
mTreadBuf->DataBuf[count++] = 0x03;
memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
count+=pQueueEle->nDataLenth;
mTreadBuf->DataBuf[count++] = 0x00; //PW
mTreadBuf->DataBuf[count++] = 0x00;
break;
case 0x02: //测量电限制参数
mTreadBuf->DataBuf[count++] = 0x04; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
mTreadBuf->DataBuf[count++] = 0;
else
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x02; //DT
mTreadBuf->DataBuf[count++] = 0x03;
memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
count+=pQueueEle->nDataLenth;
mTreadBuf->DataBuf[count++] = 0x00; //PW
mTreadBuf->DataBuf[count++] = 0x00;
break;
}
break;
case JCCTL_READMETERPARA: //读取电能表参数
switch(pQueueEle->cnCtl[2])
{
case 0x01: //测量点基本参数
mTreadBuf->DataBuf[count++] = 0x0A; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
mTreadBuf->DataBuf[count++] = 0;
else
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x01; //DT
mTreadBuf->DataBuf[count++] = 0x03;
break;
case 0x02: //测量电限制参数
mTreadBuf->DataBuf[count++] = 0x0A; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
mTreadBuf->DataBuf[count++] = 0;
else
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x02; //DT
mTreadBuf->DataBuf[count++] = 0x03;
break;
}
break;
case JCCTL_AUTOMISSIONSET: /*自动任务设置*/
switch(pQueueEle->cnCtl[2])
{
int n;
int N; //标定任务数
case 0x01: /*自动任务设置*/
mTreadBuf->DataBuf[count++] = 0x04; //AFN
mTreadBuf->DataBuf[count++] = 0x60; //SEQ
if(!(pQueueEle->devAddr[5]))
{
mTreadBuf->DataBuf[count++] = 0;
}
else
{
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
}
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));
mTreadBuf->DataBuf[count++] = 0x02; //DT
mTreadBuf->DataBuf[count++] = 0x08;
memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, 9 );//数据域 周期--标识个数
mTreadBuf->DataBuf[count+7] = 0x04; //抽取倍率设为3
N = count+8;
count+=9;
for(n=0;n<pQueueEle->strData[8];n++)
{
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->strData[8+n*3+1]+7) % 8));
mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->strData[8+n*3+1]+7) / 8-1));
if(pQueueEle->strData[8+n*3+2] == 0x01 && pQueueEle->strData[8+n*3+3] == 0x01)//正向有功
{
mTreadBuf->DataBuf[count++] = 0x10;
mTreadBuf->DataBuf[count++] = 0x0C;
}
if(pQueueEle->strData[8+n*3+2] == 0x01 && pQueueEle->strData[8+n*3+3] == 0x03)//正向无功
{
mTreadBuf->DataBuf[count++] = 0x20;
mTreadBuf->DataBuf[count++] = 0x0C;
}
if(pQueueEle->strData[8+n*3+2] == 0x01 && pQueueEle->strData[8+n*3+3] == 0x02)//反相有功
{
mTreadBuf->DataBuf[count++] = 0x40;
mTreadBuf->DataBuf[count++] = 0x0C;
}
if(pQueueEle->strData[8+n*3+2] == 0x01 && pQueueEle->strData[8+n*3+3] == 0x04)//反相无功
{
mTreadBuf->DataBuf[count++] = 0x80;
mTreadBuf->DataBuf[count++] = 0x0C;
}
if(pQueueEle->strData[8+n*3+2] == 0x02 && pQueueEle->strData[8+n*3+3] == 0x01)//最大需量及发生时间
{
mTreadBuf->DataBuf[count++] = 0x04;
mTreadBuf->DataBuf[count++] = 0x00;
mTreadBuf->DataBuf[N]++;
mTreadBuf->DataBuf[count++] = mTreadBuf->DataBuf[count-4];
mTreadBuf->DataBuf[count++] = mTreadBuf->DataBuf[count-4];
mTreadBuf->DataBuf[count++] = 0x08;
mTreadBuf->DataBuf[count++] = 0x00;
}
if(pQueueEle->strData[8+n*3+2] == 0x04 && pQueueEle->strData[8+n*3+3] == 0x01)//A相电压
{
mTreadBuf->DataBuf[count++] = 0x01;
mTreadBuf->DataBuf[count++] = 0x0B;
}
if(pQueueEle->strData[8+n*3+2] == 0x04 && pQueueEle->strData[8+n*3+3] == 0x02)//B相电压
{
mTreadBuf->DataBuf[count++] = 0x02;
mTreadBuf->DataBuf[count++] = 0x0B;
}
if(pQueueEle->strData[8+n*3+2] == 0x04 && pQueueEle->strData[8+n*3+3] == 0x03)//C相电压
{
mTreadBuf->DataBuf[count++] = 0x04;
mTreadBuf->DataBuf[count++] = 0x0B;
}
if(pQueueEle->strData[8+n*3+2] == 0x05 && pQueueEle->strData[8+n*3+3] == 0x01)//A相电流
{
mTreadBuf->DataBuf[count++] = 0x08;
mTreadBuf->DataBuf[count++] = 0x0B;
}
if(pQueueEle->strData[8+n*3+2] == 0x05 && pQueueEle->strData[8+n*3+3] == 0x02)//B相电流
{
mTreadBuf->DataBuf[count++] = 0x10;
mTreadBuf->DataBuf[count++] = 0x0B;
}
if(pQueueEle->strData[8+n*3+2] == 0x05 && pQueueEle->strData[8+n*3+3] == 0x03)//C相电流
{
mTreadBuf->DataBuf[count++] = 0x20;
mTreadBuf->DataBuf[count++] = 0x0B;
}
if(pQueueEle->strData[8+n*3+2] == 0x06 && pQueueEle->strData[8+n*3+3] == 0x01)//总有功功率
{
mTreadBuf->DataBuf[count++] = 0x01;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x06 && pQueueEle->strData[8+n*3+3] == 0x02)//A相有功功率
{
mTreadBuf->DataBuf[count++] = 0x02;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x06 && pQueueEle->strData[8+n*3+3] == 0x03)//B相有功功率
{
mTreadBuf->DataBuf[count++] = 0x04;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x06 && pQueueEle->strData[8+n*3+3] == 0x04)//C相有功功率
{
mTreadBuf->DataBuf[count++] = 0x08;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x07 && pQueueEle->strData[8+n*3+3] == 0x01)//总无功功率
{
mTreadBuf->DataBuf[count++] = 0x10;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x07 && pQueueEle->strData[8+n*3+3] == 0x02)//A相无功功率
{
mTreadBuf->DataBuf[count++] = 0x20;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x07 && pQueueEle->strData[8+n*3+3] == 0x03)//B相无功功率
{
mTreadBuf->DataBuf[count++] = 0x40;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x07 && pQueueEle->strData[8+n*3+3] == 0x04)//C相无功功率
{
mTreadBuf->DataBuf[count++] = 0x80;
mTreadBuf->DataBuf[count++] = 0x0A;
}
if(pQueueEle->strData[8+n*3+2] == 0x08 && pQueueEle->strData[8+n*3+3] == 0x01)//总功率因数
{
mTreadBuf->DataBuf[count++] = 0x01;
mTreadBuf->DataBuf[count++] = 0x0D;
}
if(pQueueEle->strData[8+n*3+2] == 0x08 && pQueueEle->strData[8+n*3+3] == 0x02)//A相功率因数
{
mTreadBuf->DataBuf[count++] = 0x02;
mTreadBuf->DataBuf[count++] = 0x0D;
}
if(pQueueEle->strData[8+n*3+2] == 0x08 && pQueueEle->strData[8+n*3+3] == 0x03)//B相功率因数
{
mTreadBuf->DataBuf[count++] = 0x04;
mTreadBuf->DataBuf[count++] = 0x0D;
}
if(pQueueEle->strData[8+n*3+2] == 0x08 && pQueueEle->strData[8+n*3+3] == 0x04)//C相功率因数
{
mTreadBuf->DataBuf[count++] = 0x08;
mTreadBuf->DataBuf[count++] = 0x0D;
}
if(pQueueEle->strData[8+n*3+2] == 0x09 && pQueueEle->strData[8+n*3+3] == 0x01)//视在功率
{
mTreadBuf->DataBuf[count++] = 0x20;
mTreadBuf->DataBuf[count++] = 0x13;
}
if(pQueueEle->strData[8+n*3+2] == 0x09 && pQueueEle->strData[8+n*3+3] == 0x02)//A相视在功率
{
mTreadBuf->DataBuf[count++] = 0x40;
mTreadBuf->DataBuf[count++] = 0x13;
}
if(pQueueEle->strData[8+n*3+2] == 0x09 && pQueueEle->strData[8+n*3+3] == 0x03)//B相视在功率
{
mTreadBuf->DataBuf[count++] = 0x80;
mTreadBuf->DataBuf[count++] = 0x13;
}
if(pQueueEle->strData[8+n*3+2] == 0x09 && pQueueEle->strData[8+n*3+3] == 0x04)//C相视在功率
{
mTreadBuf->DataBuf[count++] = 0x01;
mTreadBuf->DataBuf[count++] = 0x14;
}
if(pQueueEle->strData[8+n*3+2] == 0x09 && pQueueEle->strData[8+n*3+3] == 0x05)//频率
{
mTreadBuf->DataBuf[count++] = 0x10;
mTreadBuf->DataBuf[count++] = 0x13;
}
if(pQueueEle->strData[8+n*3+2] == 0x0B && pQueueEle->strData[8+n*3+3] == 0x01)//断相数据(日冻结数据)
{
mTreadBuf->DataBuf[count++] = 0x40;
mTreadBuf->DataBuf[count++] = 0x03;
}
if(pQueueEle->strData[8+n*3+2] == 0x10 && pQueueEle->strData[8+n*3+3] == 0x01)//日统计电压值(日统计数据A、B、C三相)
{
mTreadBuf->DataBuf[count++] = 0x04;
mTreadBuf->DataBuf[count++] = 0x03;
}
if(pQueueEle->strData[8+n*3+2] == 0x10 && pQueueEle->strData[8+n*3+3] == 0x02)//日统计电流值(日统计数据A、B、C三相)
{
mTreadBuf->DataBuf[count++] = 0x20;
mTreadBuf->DataBuf[count++] = 0x12;
}
if(pQueueEle->strData[8+n*3+2] == 0x10 && pQueueEle->strData[8+n*3+3] == 0x03)//日统计功率因数值(日统计数据A、B、C三相)
{
mTreadBuf->DataBuf[count++] = 0x02;
mTreadBuf->DataBuf[count++] = 0x13;
}
if(pQueueEle->strData[8+n*3+2] == 0x10 && pQueueEle->strData[8+n*3+3] == 0x04)//日统计有功功率值(日统计数据A、B、C三相)
{
mTreadBuf->DataBuf[count++] = 0x40;
mTreadBuf->DataBuf[count++] = 0x12;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -