⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comthread.cpp

📁 保护装置的mbpc软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		}
//	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 + -