📄 protocol101.cpp
字号:
{
bMessageLen = m_waAnalog.GetSize()*4 + 12;
bSend.SetSize(bMessageLen);
bSend[0] = 0x68;
bSend[1] = bSend[2] = bMessageLen - 6;
bSend[3] = 0x68;
bSend[4] = 0xa8;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x15;//类型标识
bSend[7] = m_waAnalog.GetSize();//
bSend[8] = 0x05;//传送原因
for(int i = 0, n = 0;i<m_waAnalog.GetSize();i++)
{
bSend[10+n] = BYTE(0x01+i);
bSend[11+n] = 0x07;
YCData = m_waAnalog[i];
pYCByte = (unsigned char *)(&YCData);
bSend[12+n] = pYCByte[0];
bSend[13+n] = pYCByte[1];
n += 4;
}
for(i = 4;i<bMessageLen-2;i++)
bCSByte += bSend[i];
bSend[bMessageLen-2] = bCSByte;
bSend[bMessageLen-1] = 0x16;
}
}
void CProtocol101::RespondOpenSelect(CByteArray& bSend)
{
BYTE CSByte = 0;
bSend.SetSize(15);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x2e;
bSend[7] = 0x01;
bSend[8] = 0x07;
bSend[10] = 0x01;
bSend[11] = 0x0b;
if (m_baDigital[0]&0x01)
{//开关状态为合
bSend[12] = 0x81;
m_bOpenSelect = TRUE; //置相应的状态
}
else
{
m_bOpenSelect = FALSE;
bSend[12] = 0x83;
}
for(int i= 4;i<13;i++)
{
CSByte += bSend[i];
}
bSend[13] = CSByte;
bSend[14] = 0x16;
}
void CProtocol101::RespondOpenExecute(CByteArray& bSend)
{
BYTE CSByte = 0;
//生成返回报文
bSend.SetSize(15);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x2e;
bSend[7] = 0x01;
bSend[8] = 0x07;
bSend[10] = 0x01;
bSend[11] = 0x0b;
if(m_bOpenSelect)
{
bSend[12] = 0x01;
}
else
{
bSend[12] = 0x03;
}
for(int i= 4;i<13;i++)
{
CSByte += bSend[i];
}
bSend[13] = CSByte;
bSend[14] = 0x16;
if(m_bOpenSelect)
{
m_baDigital[0] = m_baDigital[0]&0xfe;//设定相应的遥信状态
m_bOpenSelect = FALSE;
}
}
void CProtocol101::RespondCancelOpenSelect(CByteArray &bSend)
{
BYTE CSByte = 0;
//生成返回报文
bSend.SetSize(15);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x2e;
bSend[7] = 0x01;
bSend[8] = 0x09;//传送原因
bSend[10] = 0x01;
bSend[11] = 0x0b;
if(m_bOpenSelect)
{
bSend[12] = 0x01;
m_bOpenSelect = FALSE;
}
else
{
bSend[12] = 0x03;
}
for(int i= 4;i<13;i++)
{
CSByte += bSend[i];
}
bSend[13] = CSByte;
bSend[14] = 0x16;
}
void CProtocol101::RespondCloseSelect(CByteArray& bSend)
{
BYTE CSByte = 0;
bSend.SetSize(15);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x2e;
bSend[7] = 0x01;
bSend[8] = 0x07;
bSend[10] = 0x01;
bSend[11] = 0x0b;
if (!(m_baDigital[0]&0x01))
{//开关状态为分
bSend[12] = 0x82;
m_bCloseSelect = TRUE;//置相应的状态
}
else
{
bSend[12] = 0x83;
m_bCloseSelect = FALSE;
}
for(int i= 4;i<13;i++)
{
CSByte += bSend[i];
}
bSend[13] = CSByte;
bSend[14] = 0x16;
}
void CProtocol101::RespondCloseExecute(CByteArray& bSend)
{
BYTE CSByte = 0;
bSend.SetSize(15);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x2e;
bSend[7] = 0x01;
bSend[8] = 0x07;
bSend[10] = 0x01;
bSend[11] = 0x0b;
if(m_bCloseSelect)
{
bSend[12] = 0x02;
//m_bSwitchState = TRUE;//置相应的状态
}
else
{
bSend[12] = 0x03;
}
for(int i= 4;i<13;i++)
{
CSByte += bSend[i];
}
bSend[13] = CSByte;
bSend[14] = 0x16;
if(m_bCloseSelect)
{
m_baDigital[0] = m_baDigital[0]|0x01;//设定相应的遥信状态1
m_bCloseSelect = FALSE;
}
}
void CProtocol101::RespondCancelCloseSelect(CByteArray &bSend)
{
BYTE CSByte = 0;
bSend.SetSize(15);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x2e;
bSend[7] = 0x01;
bSend[8] = 0x09;//传送原因
bSend[10] = 0x01;
bSend[11] = 0x0b;
if(m_bCloseSelect)
{
bSend[12] = 0x02;
//m_bSwitchState = TRUE;//置相应的状态
m_bCloseSelect = FALSE;
}
else
{
bSend[12] = 0x03;
}
for(int i= 4;i<13;i++)
{
CSByte += bSend[i];
}
bSend[13] = CSByte;
bSend[14] = 0x16;
}
void CProtocol101::RespondReadCount(CByteArray &bSend)
{
BYTE bCSByte = 0;
BYTE *pCount = NULL;
BYTE bMessageLen;
DWORD dwCount;
bMessageLen = m_dwaCount.GetSize()*7 + 12;
bSend.SetSize(bMessageLen);
bSend[0] = 0x68;
bSend[1] = bSend[2] = 0x09;
bSend[3] = 0x68;
bSend[4] = 0x80;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x0F;
bSend[7] = BYTE(m_dwaCount.GetSize());//SQ = 0
bSend[8] = 0x25;//传送原因
for(int i=0,n=0;i<m_dwaCount.GetSize();i++)
{
bSend[10+n] = BYTE(0x01+i);
bSend[11+n] = 0x0c;
dwCount = m_dwaCount[i];
pCount = (unsigned char *)(&dwCount);
bSend[12+n] = pCount[0];
bSend[13+n] = pCount[1];
bSend[14+n] = pCount[2];
bSend[15+n] = pCount[3];
bSend[16+n] = BYTE((BYTE(i+1))|(0x40));
}
for( i=4;i<bMessageLen-2;i++)
{
bCSByte += bSend[i];
}
bSend[bMessageLen-2] = bCSByte;
bSend[bMessageLen-1] = 0x16;
}
void CProtocol101::RespondReadFaultData(CByteArray &bSend)
{
BYTE bCSByte = 0;
BYTE bMessageLen;
BYTE* pByteTemp = NULL;
BYTE bFlag = 0;
CFaultRec * pFaultData = NULL;
SYSTEMTIME time;
GetLocalTime(&time);
bMessageLen = 12+18*(m_paFault.GetSize());
bSend.SetSize(bMessageLen);
bSend[0] = bSend[3] = 0x68;
bSend[1] = bSend[2] = bMessageLen - 6;
bSend[4] = 0xa8;
bSend[5] = bSend[9] = BYTE(m_wAddr);
bSend[6] = 0x13;//类型标识
bSend[7] = BYTE(m_paFault.GetSize());
bSend[8] = 0x17;//传送原因
for(int i=0;i<m_paFault.GetSize();i++)
{
pFaultData = (CFaultRec*)(m_paFault.GetAt(i));
bSend[9+i*18] = 0x01+i;
bSend[10+i*18] = 0x05;
bSend[11+i*18] = pFaultData->m_byType;
pByteTemp = (BYTE*)(&(pFaultData->m_stTime));
bSend[12+i*18] = pByteTemp[0];
bSend[13+i*18] = pByteTemp[1];
//从低位到高位分别是:a过流,b过流,c过流,故障方向,I0过流,U0过压,
if(pFaultData->m_AOverCurrent)
bFlag |= 0x01;
if(pFaultData->m_BOverCurrrent)
bFlag |= 0x02;
if(pFaultData->m_COverCurrrent)
bFlag |= 0x04;
if(pFaultData->m_byDirection == 1)
bFlag |= 0x08;
if(pFaultData->m_3I0OverCurrent)
bFlag |= 0x10;
if(pFaultData->m_3U0OverSetting)
bFlag |= 0x20;
bSend[14+i*18] = bFlag;
pByteTemp = (BYTE*)(&(pFaultData->m_wFaultValueIa));
bSend[15+i*18] = pByteTemp[0];
bSend[16+i*18] = pByteTemp[1];
pByteTemp = (BYTE*)(&(pFaultData->m_wFaultValueIb));
bSend[17+i*18] = pByteTemp[0];
bSend[18+i*18] = pByteTemp[1];
pByteTemp = (BYTE*)(&(pFaultData->m_wFaultValueIc));
bSend[19+i*18] = pByteTemp[0];
bSend[20+i*18] = pByteTemp[1];
pByteTemp = (BYTE*)(&(pFaultData->m_wFaultValueUa));
bSend[21+i*18] = pByteTemp[0];
bSend[22+i*18] = pByteTemp[1];
pByteTemp = (BYTE*)(&(pFaultData->m_wFaultValueUb));
bSend[23+i*18] = pByteTemp[0];
bSend[24+i*18] = pByteTemp[1];
pByteTemp = (BYTE*)(&(pFaultData->m_wFaultValueUc));
bSend[25+i*18] = pByteTemp[0];
bSend[26+i*18] = pByteTemp[1];
//bSend[27+i*18] = time.wYear;
// bSend[28+i*18] = time.wMonth;
// bSend[28]
}
for(i=4;i < bMessageLen-2;i++)
bCSByte += bSend[i];
bSend[bMessageLen-2] = bCSByte;
bSend[bMessageLen-1] = 0x16;
bSend[0] = 0x68;
}
/*
void CProtocol101::DoAFault()
{
CFaultRec* faultdata;
faultdata = new CFaultRec;
SYSTEMTIME time;
GetLocalTime(&time);
faultdata->m_stTime = time;
faultdata->m_byType = 0x0a;
faultdata->m_byDirection = 0;
faultdata->m_wDelayTime = 1;
faultdata->m_wFaultValueIa = 1000;
faultdata->m_wFaultValueUa = 0;
faultdata->m_wFaultValueIb = 10;
faultdata->m_wFaultValueUb = 10;
faultdata->m_wFaultValueIc = 10;
faultdata->m_wFaultValueUc = 10;
faultdata->m_wReserved = 0;
m_paFault.Add(faultdata);
return;
}
void CProtocol101::DoBFault()
{
CFaultRec* faultdata;
faultdata = new CFaultRec;
SYSTEMTIME time;
GetLocalTime(&time);
faultdata->m_stTime = time;
faultdata->m_byType = 0x0a;
faultdata->m_byDirection = 0;
faultdata->m_wDelayTime = 1;
faultdata->m_wFaultValueIa = 10;
faultdata->m_wFaultValueUa = 10;
faultdata->m_wFaultValueIb = 1000;
faultdata->m_wFaultValueUb = 0;
faultdata->m_wFaultValueIc = 10;
faultdata->m_wFaultValueUc = 10;
faultdata->m_wReserved = 0;
m_paFault.Add(faultdata);
return;
}
void CProtocol101::DoCFault()
{
CFaultRec* faultdata;
faultdata = new CFaultRec;
SYSTEMTIME time;
GetLocalTime(&time);
faultdata->m_stTime = time;
faultdata->m_byType = 0x0a;
faultdata->m_byDirection = 0;
faultdata->m_wDelayTime = 1;
faultdata->m_wFaultValueIa = 10;
faultdata->m_wFaultValueUa = 10;
faultdata->m_wFaultValueIb = 1000;
faultdata->m_wFaultValueUb = 0;
faultdata->m_wFaultValueIc = 10;
faultdata->m_wFaultValueUc = 10;
faultdata->m_wReserved = 0;
m_paFault.Add(faultdata);
return;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -