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

📄 protocol101.cpp

📁 电力和自动化通讯规约模拟软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{ 
		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 + -