📄 protocoltos.cpp
字号:
// ProtocolTos.cpp: implementation of the CProtocolTos class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ProtocolTos.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BOOL OnOff=FALSE;
CProtocolTos::CProtocolTos()
{
m_KgState=FALSE;
m_bFlag=FALSE;
}
CProtocolTos::~CProtocolTos()
{
}
void CProtocolTos::Explain()
{
int nLen=m_baInBuffer.GetSize();
if(nLen < 5)
return;
for(int i=1;i<5;i++)
{
if(m_baInBuffer.GetAt(i) != 0xff-m_baInBuffer.GetAt(i+1))
{
m_baInBuffer.RemoveAll();
return;
}
i++;
}
if(m_baInBuffer.GetAt(0) == 0x00&&((m_baInBuffer.GetAt(1) == (BYTE)(m_wAddr|0x40))||(m_baInBuffer.GetAt(1) == (BYTE)m_wAddr)))
{
switch(m_baInBuffer.GetAt(3))
{
case 0x20://全数据
CallAllData();
SendRespons();
break;
case 0x40://遥控选择
PreOperate();
break;
case 0x46://遥控合
Operate(TRUE);
SendRespons();
break;
case 0x4a://遥控分
Operate(FALSE);
SendRespons();
break;
default:
break;
}
}
m_baInBuffer.RemoveAll();
}
void CProtocolTos::CallAllData()
{
m_baOutBuffer.RemoveAll();
m_baOutBuffer.Add(0x00);
m_baOutBuffer.Add((BYTE)m_wAddr);
m_baOutBuffer.Add(0xff-m_wAddr);
for(int i=0;i<m_baDigital.GetSize();i++)
{
m_baOutBuffer.Add(m_baDigital[i]);
m_baOutBuffer.Add(0xff-m_baDigital[i]);
i++;
}
for(i=0;i<m_waAnalog.GetSize()-3;i++)//电压系数为0.05
{
m_baOutBuffer.Add((BYTE)(m_waAnalog[i]/65.536*20));
m_baOutBuffer.Add(0xff-(BYTE)(m_waAnalog[i]/65.536*20));
}
for(i=3;i<m_waAnalog.GetSize();i++)//电流系数为2.4
{
m_baOutBuffer.Add((BYTE)(m_waAnalog[i]/65.536/2.4));
m_baOutBuffer.Add(0xff-(BYTE)(m_waAnalog[i]/65.536/2.4));
}
for(i=0;i<3;i++)
{
m_baOutBuffer.Add(0x00);
m_baOutBuffer.Add(0xff);
}
}
void CProtocolTos::PreOperate()
{
if(m_baInBuffer.GetSize() < 5)
return;
if(m_baInBuffer[0] != 0x00)
return;
if((m_baInBuffer[1] != 0xff-m_baInBuffer[2])&&(m_baInBuffer[3] != 0xff-m_baInBuffer[4]))
return;
if( m_baInBuffer[1] != (BYTE)(m_wAddr|0x40))
return;
m_bFlag=TRUE;
OperBack((BYTE)m_wAddr);
}
void CProtocolTos::Operate(BOOL YK)
{
m_KgState=!m_KgState;
OnOff=m_KgState;//通知界面
}
BOOL CProtocolTos::OperBack(BYTE rtuAddr)
{
m_baOutBuffer.RemoveAll();
m_baOutBuffer.Add(0x00);
m_baOutBuffer.Add((BYTE)m_wAddr|0x40);
m_baOutBuffer.Add(0xff-m_wAddr|0x40);
m_baOutBuffer.Add(0x00);
m_baOutBuffer.Add(0xff);
m_baOutBuffer.Add(0x00);
m_baOutBuffer.Add(0xff);
m_baOutBuffer.Add(0x00);
m_baOutBuffer.Add(0xff);
SendRespons();
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -