📄 comthread.cpp
字号:
}
// case REC_LIST_SENDING:
// {
// break;
// }
case REC_DATA_SENDING:
{
if(m_pDoc->m_nNeedMsg == REC_DATA_SENDING)
{
m_pDoc->m_bArrived = TRUE;
}
break;
}
// case OPER_REC_SENDING:
// {
// break;
// }
case ACK_DEL_SOE:
{
if(m_pDoc->m_nNeedMsg == ACK_DEL_SOE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDelSOE();
m_pDoc->m_nMsgtype = ACK_DEL_SOE;
break;
}
case SEND_RECORD_CHANGE:
{
if(m_pDoc->m_nNeedMsg == SEND_RECORD_CHANGE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvRecordChange();
m_pDoc->m_nMsgtype = SEND_RECORD_CHANGE;
break;
}
case ACK_SETTING_SWITCH:
{
if(m_pDoc->m_nNeedMsg == ACK_SETTING_SWITCH)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSetSwitch();
m_pDoc->m_nMsgtype = ACK_SETTING_SWITCH;
break;
}
case ACK_SET_DATA_CHG:
{
if(m_pDoc->m_nNeedMsg == ACK_SET_DATA_CHG)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSetDataChg();
m_pDoc->m_nMsgtype = ACK_SET_DATA_CHG;
break;
}
case ACK_SET_CMD_CHG:
{
if(m_pDoc->m_nNeedMsg == ACK_SET_CMD_CHG)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSetCmdChg();
m_pDoc->m_nMsgtype = ACK_SET_CMD_CHG;
break;
}
case SEND_SETTING:
{
if(m_pDoc->m_nNeedMsg == SEND_SETTING)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSendSet();
m_pDoc->m_nMsgtype = SEND_SETTING;
break;
}
case ACK_ADD_SETTING_SEC:
{
if(m_pDoc->m_nNeedMsg == ACK_ADD_SETTING_SEC)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAddSetSec();
m_pDoc->m_nMsgtype = ACK_ADD_SETTING_SEC;
break;
}
case ACK_DEL_SETTING_SEC:
{
if(m_pDoc->m_nNeedMsg == ACK_DEL_SETTING_SEC)
{
m_pDoc->m_bArrived = TRUE;
}
break;
}
case ACK_ADDR_SETTING:
{
if(m_pDoc->m_nNeedMsg == ACK_ADDR_SETTING)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAddrSetting();
m_pDoc->m_nMsgtype = ACK_ADDR_SETTING;
break;
}
case ACK_METER_PARA_SET:
{
if(m_pDoc->m_nNeedMsg == ACK_METER_PARA_SET)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvMeterParaSet();
m_pDoc->m_nMsgtype = ACK_METER_PARA_SET;
break;
}
case ACK_ANALOG_PRIMARY_PARA_SET:
{
if(m_pDoc->m_nNeedMsg == ACK_ANALOG_PRIMARY_PARA_SET)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAnaParaSet();
m_pDoc->m_nMsgtype = ACK_ANALOG_PRIMARY_PARA_SET;
break;
}
case ACK_SET_DEVICE_BAUDRATE:
{
if(m_pDoc->m_nNeedMsg == ACK_SET_DEVICE_BAUDRATE)
{
m_pDoc->m_bArrived = TRUE;
}
break;
}
case ACK_CHG_PASSWORD:
{
if(m_pDoc->m_nNeedMsg == ACK_CHG_PASSWORD)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvChgPsw();
m_pDoc->m_nMsgtype = ACK_CHG_PASSWORD;
break;
}
case ACK_SIGN_IN:
{
if(m_pDoc->m_nNeedMsg == ACK_SIGN_IN)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSignIn();
m_pDoc->m_nMsgtype = ACK_SIGN_IN;
break;
}
case ACK_SIGN_OUT:
{
if(m_pDoc->m_nNeedMsg == ACK_SIGN_OUT)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSignOut();
m_pDoc->m_nMsgtype = ACK_SIGN_OUT;
break;
}
case ACK_ANALOG_SECONDARY_PARA_SET:
{
if(m_pDoc->m_nNeedMsg == ACK_ANALOG_SECONDARY_PARA_SET)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAnaSecParaSet();
m_pDoc->m_nMsgtype = ACK_ANALOG_SECONDARY_PARA_SET;
break;
}
case MMI_INFO:
{
if(m_pDoc->m_nNeedMsg == MMI_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvMMIInfo();
m_pDoc->m_nMsgtype = MMI_INFO;
break;
}
case ACK_KEY_M:
{
if(m_pDoc->m_nNeedMsg == ACK_KEY_M)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvKEY_M();
m_pDoc->m_nMsgtype = ACK_KEY_M;
break;
}
case ACK_KEY_P:
{
if(m_pDoc->m_nNeedMsg == ACK_KEY_P)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvKEY_P();
m_pDoc->m_nMsgtype = ACK_KEY_P;
break;
}
}
m_nTimeCntr = 0;
return tProcFlag;
}
BOOL CComThread::GetInPacket()
{
BYTE tData, tSum;
int tLoop;
while((TRUE == IsCommDirty()) && (FALSE == m_bNewInPacket))
{
tData = m_szRxFIFO[m_pRxFront++];
switch(m_pInPosition)
{
case 0:
{
if(0xeb == tData)
{
m_szInPacket[m_pInPosition++] = tData;
}
else
m_pInPosition = 0;
break;
}
case 1:
{
if(0x90 == tData)
{
m_szInPacket[m_pInPosition++] = tData;
}
else
m_pInPosition = 0;
break;
}
case 2:
{
if(LOCAL_ADDRESS == tData)
{
m_szInPacket[m_pInPosition++] = tData;
}
else
m_pInPosition = 0;
break;
}
case 3:
{
/*if(REMOTE_ADDRESS == tData)
{
m_szInPacket[m_pInPosition++] = tData;
}
else
m_pInPosition = 0;*/
m_szInPacket[m_pInPosition++] = tData;
m_pDoc->m_nRemoteAddr = tData;
m_pDoc->m_device_info.device_address = tData;
break;
}
case 4:
{
m_szInPacket[m_pInPosition++] = tData;
break;
}
case 5:
{
this->m_nPacketLength = m_szInPacket[m_pInPosition - 1] + tData * 0x100;
if(m_nPacketLength != 0 && m_nPacketLength <= 1280)
{
m_szInPacket[m_pInPosition++] = tData;
}
else
m_pInPosition = 0;
break;
}
default:
{
m_szInPacket[m_pInPosition++] = tData;
if((m_nPacketLength > 0) && (m_pInPosition == m_nPacketLength + 3))
{
tData = 1;
if(0xEB != m_szInPacket[0])
tData = 0;
else
{
if(0x90 != m_szInPacket[1])
tData = 0;
else
{
if(0xD7 != m_szInPacket[m_nPacketLength + 1])
tData = 0;
else
{
if(0x09 != m_szInPacket[m_nPacketLength + 2])
tData = 0;
else
{
tSum = 0;
for(tLoop = 0 ; tLoop < m_nPacketLength ; tLoop++)
tSum += m_szInPacket[tLoop];
if(tSum != m_szInPacket[m_nPacketLength])
tData = 0;
}
}
}
}
if(tData)
m_bNewInPacket = TRUE;
m_pInPosition = 0;
}
}
}
}
return m_bNewInPacket;
}
BOOL CComThread::IsCommDirty()
{
if(m_pRxRear != m_pRxFront)
return TRUE;
else
return FALSE;
}
BOOL CComThread::RcvDeviceinfo()
{
int tLoop = 73;
DEVICE_INFO* pDevice = &m_pDoc->m_device_info;
for(int i = 0; i < 16; i++)
{
pDevice->station_name[i] = m_szInPacket[9+i];
pDevice->device_name[i] = m_szInPacket[25+i];
pDevice->device_type[i] = m_szInPacket[41+i];
pDevice->designer[i] = m_szInPacket[57+i];
}
pDevice->device_type_id = m_szInPacket[tLoop++];
pDevice->revision = m_szInPacket[tLoop++];
pDevice->sub_revision = m_szInPacket[tLoop++];
pDevice->revision_year = m_szInPacket[tLoop++];
pDevice->revision_month = m_szInPacket[tLoop++];
pDevice->revision_day = m_szInPacket[tLoop++];
pDevice->device_address = m_szInPacket[tLoop++];
pDevice->analog_count = m_szInPacket[tLoop++];
pDevice->energy_count = m_szInPacket[tLoop++];
pDevice->di_count = m_szInPacket[tLoop++];
pDevice->enable_count = m_szInPacket[tLoop++];
pDevice->do_count = m_szInPacket[tLoop++];
pDevice->setting_sect_count = m_szInPacket[tLoop++];
pDevice->used_setting_sec_count = m_szInPacket[tLoop++];
pDevice->current_sect = m_szInPacket[tLoop++];
pDevice->item_in_sect = m_szInPacket[tLoop++];
pDevice->time_mod = m_szInPacket[tLoop++];
pDevice->mmi_revision = m_szInPacket[tLoop++];
pDevice->mmi_sub_revision = m_szInPacket[tLoop++];
pDevice->alarm_count = m_szInPacket[tLoop++];
pDevice->act_count = m_szInPacket[tLoop++];
return TRUE;
}
BOOL CComThread::RcvAnalogInfo()
{
BYTE a[4];
memset(a,0,sizeof(a));
ANALOG_INFO* pAnalog = &m_pDoc->m_analog_info[m_szInPacket[9]];
memcpy(pAnalog->analog_name, &m_szInPacket[10], 12);
a[3] = m_szInPacket[22]; a[2] = m_szInPacket[23]; a[1] = m_szInPacket[24]; a[0] = m_szInPacket[25];
memcpy(&pAnalog->primary_ratio, &a, sizeof(float));
a[3] = m_szInPacket[26]; a[2] = m_szInPacket[27]; a[1] = m_szInPacket[28]; a[0] = m_szInPacket[29];
memcpy(&pAnalog->secondary_ratio, &a, sizeof(float));
memcpy(pAnalog->primary_unit, &m_szInPacket[30], 4);
memcpy(pAnalog->secondary_unit, &m_szInPacket[34], 4);
memcpy(&pAnalog->nZeroDeviation, &m_szInPacket[38], 2);
return TRUE;
}
BOOL CComThread::RcvMeterinfo()
{
BYTE a[4];
memset(a,0,sizeof(a));
ENERGY_INFO* pEnergy = &m_pDoc->m_energy_info[m_szInPacket[9]];
memcpy(pEnergy->energy_name, &m_szInPacket[10], 12);
a[3] = m_szInPacket[22]; a[2] = m_szInPacket[23]; a[1] = m_szInPacket[24]; a[0] = m_szInPacket[25];
memcpy(&pEnergy->primary_ratio, &a, sizeof(float));
a[3] = m_szInPacket[26]; a[2] = m_szInPacket[27]; a[1] = m_szInPacket[28]; a[0] = m_szInPacket[29];
memcpy(&pEnergy->secondary_ratio, &a, sizeof(float));
memcpy(pEnergy->primary_unit, &m_szInPacket[30], 4);
memcpy(pEnergy->secondary_unit, &m_szInPacket[34], 4);
return TRUE;
}
BOOL CComThread::RcvDiInfo()
{
DIGITAL_INFO* pDiInfo = &m_pDoc->m_DiInfo[m_szInPacket[9]];
int nSize = sizeof(DIGITAL_INFO);
memcpy(pDiInfo->digital_name, &m_szInPacket[10], 12);
memcpy(pDiInfo->on_name, &m_szInPacket[22], 4);
memcpy(pDiInfo->off_name, &m_szInPacket[26], 4);
return TRUE;
}
BOOL CComThread::RcvDoInfo()
{
DIGITAL_INFO* pDoInfo = &m_pDoc->m_DoInfo[m_szInPacket[9]];
memcpy(pDoInfo->digital_name, &m_szInPacket[10], 12);
memcpy(pDoInfo->on_name, &m_szInPacket[22], 4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -