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

📄 asdu.cpp

📁 电力系统Linux设备通讯程序 主要是为了各大电网通讯数据代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		pDataSet = m_DataSets.at(i);		Data.Add(pDataSet->gin.GROUP);		Data.Add(pDataSet->gin.ENTRY);		Data.Add(pDataSet->kod);		for (int j=0; j<(int)sizeof(pDataSet->gdd.byte); j++)		{			Data.Add(pDataSet->gdd.byte[j]);		}		Data.Append(pDataSet->gid);	}	Data.FreeExtra();}void CAsdu10::ExplainAsdu(CFaultExplain& FExplain){	m_RII = m_ASDUData[0];	m_NGD.byte = m_ASDUData[1];	GIN gin;	gin.GROUP = m_ASDUData[2];	gin.ENTRY = m_ASDUData[3];	m_ASDUData.RemoveAt(0, 5);	FExplain.m_ActTime = 0;	FExplain.m_FAN = 0;	FExplain.m_FaultDistance = 0.0;	FExplain.m_iType = 0;	FExplain.m_MaxFaultCurrent = 0.0;	FExplain.m_MaxZeroCurrent = 0.0;	FExplain.m_szFaultPhase = "";		if (gin.ENTRY == 1)//最大故障电流	{		if (m_ASDUData.GetAt(0) == 0xcd && m_ASDUData.GetAt(1) == 0x0f && m_ASDUData.GetAt(2) == 0x01)		{			m_ASDUData.RemoveAt(0, 3);			memcpy(&FExplain.m_MaxFaultCurrent, m_ASDUData.GetData(), sizeof(float));			m_ASDUData.RemoveAt(0, sizeof(float));			memcpy(&FExplain.m_ActTime, m_ASDUData.GetData(), sizeof(WORD));			m_ASDUData.RemoveAt(0, sizeof(WORD));			memcpy(&FExplain.m_FAN, m_ASDUData.GetData(), sizeof(WORD));			m_ASDUData.SetSize(0);			FExplain.m_iType = 1;		}	}	else if (gin.ENTRY == 2)//最大零序电流	{		if (m_ASDUData.GetAt(0) == 0xcd && m_ASDUData.GetAt(1) == 0x0f && m_ASDUData.GetAt(2) == 0x01)		{			m_ASDUData.RemoveAt(0, 3);			memcpy(&FExplain.m_MaxZeroCurrent, m_ASDUData.GetData(), sizeof(float));			m_ASDUData.RemoveAt(0, sizeof(float));			memcpy(&FExplain.m_ActTime, m_ASDUData.GetData(), sizeof(WORD));			m_ASDUData.RemoveAt(0, sizeof(WORD));			memcpy(&FExplain.m_FAN, m_ASDUData.GetData(), sizeof(WORD));			m_ASDUData.SetSize(0);			FExplain.m_iType = 2;		}	}	else if (gin.ENTRY == 3)//短路位置	{		if (m_ASDUData.GetAt(0) == 0x17 && m_ASDUData.GetAt(1) == 0x16 && m_ASDUData.GetAt(2) == 0x01)		{			m_ASDUData.RemoveAt(0, 6);			memcpy(&FExplain.m_FaultDistance, m_ASDUData.GetData(), sizeof(float));			m_ASDUData.RemoveAt(0, 17);			memcpy(&FExplain.m_FAN, m_ASDUData.GetData(), sizeof(WORD));			m_ASDUData.SetSize(0);			FExplain.m_iType = 3;		}	}	else if (gin.ENTRY == 4)//故障选相	{		if (m_ASDUData.GetAt(0) == 0x17 && m_ASDUData.GetAt(1) == 0x13 && m_ASDUData.GetAt(2) == 0x01)		{			m_ASDUData.RemoveAt(0, 6);			BYTE btmp = m_ASDUData.GetAt(0);			FExplain.m_szFaultPhase = "";			if ((btmp&0x01) == 1) FExplain.m_szFaultPhase += "A";			if ((btmp&0x02) == 2) FExplain.m_szFaultPhase += "B";			if ((btmp&0x04) == 4) FExplain.m_szFaultPhase += "C";			if ((btmp&0x08) == 8) FExplain.m_szFaultPhase += "N";			m_ASDUData.RemoveAt(0, 14);			memcpy(&FExplain.m_FAN, m_ASDUData.GetData(), sizeof(WORD));			m_ASDUData.SetSize(0);			FExplain.m_iType = 4;		}	}}/////////// ASDU21 /////////CAsdu21::CAsdu21(){	m_TYP = 0x15;	m_VSQ.byte = 0x81;	m_COT = 0x2a;	m_FUN = 0xfe;	m_INF = 0xf1;	m_RII = 0x00;	m_DataSets.clear();	m_DataSets.setAutoDelete(true);}CAsdu21::~CAsdu21(){	m_DataSets.clear();}void CAsdu21::BulidArray(CByteArray& Data){	if (m_NOG != m_DataSets.count())	{		m_iResult = 0;		return;	}	m_iResult = 1;	Data.SetSize(0);	Data.Add(m_TYP);	Data.Add(m_VSQ.byte);	Data.Add(m_COT);	Data.Add(m_Addr);	Data.Add(m_FUN);	Data.Add(m_INF);	Data.Add(m_RII);	Data.Add(m_NOG);	DataSet* pDataSet = NULL;	for (int i=0; i<m_NOG; i++)	{		pDataSet = m_DataSets.at(i);		Data.Add(pDataSet->gin.GROUP);		Data.Add(pDataSet->gin.ENTRY);		Data.Add(pDataSet->kod);	}	Data.FreeExtra();}/////////// ASDU23 /////////void CAsdu23::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU23的解释处理	{		if (m_ASDUData.GetSize() != (int)(m_VSQ.vsq.num*10*sizeof(BYTE)))		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}		DistrubDataTable DDTable;		m_iResult = 1;		for (int i=0; i<m_VSQ.vsq.num; i++)		{			DDTable.addr = m_Addr;			DDTable.FAN = *(WORD*)(m_ASDUData.GetData());			DDTable.SOF = m_ASDUData[2];			memcpy(DDTable.Cp56Time.byte, m_ASDUData.GetData()+3, sizeof(DDTable.Cp56Time.byte));			m_DDTables.Add(DDTable);			m_ASDUData.RemoveAt(0, 10);		}	}	m_ASDUData.SetSize(0);}/////////// ASDU24 /////////CAsdu24::CAsdu24(){	m_TYP = 0x18;	m_VSQ.byte = 0x81;	m_COT = 0x1f;		m_TOO = 0x00;	m_TOV = 0x00;	m_FAN = 0;	m_ACC = 0x00;}void CAsdu24::BulidArray(CByteArray& Data){	Data.SetSize(11);	Data.FreeExtra();	m_iResult = 1;	Data.SetAt(0, m_TYP);		Data.SetAt(1, m_VSQ.byte);	Data.SetAt(2, m_COT);		Data.SetAt(3, m_Addr);	Data.SetAt(4, m_FUN);		Data.SetAt(5, m_INF);	Data.SetAt(6, m_TOO);		Data.SetAt(7, m_TOV);	Data.SetAt(10, m_ACC);	memcpy(&Data[8], &m_FAN, 2*sizeof(BYTE));}/////////// ASDU25 /////////CAsdu25::CAsdu25(){	m_TYP = 0x19;		m_VSQ.byte = 0x81;	m_COT = 0x1f;		m_TOO = 0x00;	m_TOV = 0x00;	m_FAN = 0;	m_ACC = 0x00;}void CAsdu25::BulidArray(CByteArray& Data){	Data.SetSize(11);	Data.FreeExtra();	m_iResult = 1;	Data.SetAt(0, m_TYP);		Data.SetAt(1, m_VSQ.byte);	Data.SetAt(2, m_COT);		Data.SetAt(3, m_Addr);	Data.SetAt(4, m_FUN);		Data.SetAt(5, m_INF);	Data.SetAt(6, m_TOO);		Data.SetAt(7, m_TOV);	Data.SetAt(10, m_ACC);	memcpy(&Data[8], &m_FAN, 2*sizeof(BYTE));}/////////// ASDU26 /////////CAsdu26::CAsdu26(){	m_TOV = 0x00;	m_FAN = 0;	m_NOF = 0;	m_NOC = 0x00;	m_NOE = 0;	m_INT = 0;	memset(m_Cp32Time.byte, 0x00, sizeof(m_Cp32Time.byte));}void CAsdu26::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU26的解释处理	{		if (m_ASDUData.GetSize() != 15*sizeof(BYTE))		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}		m_iResult = 1;		m_TOV = m_ASDUData[1];		m_ASDUData.RemoveAt(0, 2);		m_FAN = *(WORD*)(m_ASDUData.GetData());		m_ASDUData.RemoveAt(0, 2);		m_NOF = *(WORD*)(m_ASDUData.GetData());		m_ASDUData.RemoveAt(0, 2);		m_NOC = m_ASDUData[0];		m_ASDUData.RemoveAt(0);		m_NOE = *(WORD*)(m_ASDUData.GetData());		m_ASDUData.RemoveAt(0, 2);		m_INT = *(WORD*)(m_ASDUData.GetData());		m_ASDUData.RemoveAt(0, 2);		memcpy(m_Cp32Time.byte, m_ASDUData.GetData()+11, sizeof(m_Cp32Time.byte));	}	m_ASDUData.SetSize(0);}/////////// ASDU27 /////////CAsdu27::CAsdu27(){	m_TOV = 0x00;	m_FAN = 0;	m_ACC = 0x00;	m_RPV = 0.0;	m_RSV = 0.0;	m_RFA = 0.0;}void CAsdu27::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU27的解释处理	{		if (m_ASDUData.GetSize() != 17*sizeof(BYTE))		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}		m_iResult = 1;		m_TOV = m_ASDUData[1];		m_FAN = *(WORD*)(m_ASDUData.GetData()+2);		m_ACC = m_ASDUData[4];		m_RPV = *(float*)(m_ASDUData.GetData()+5);		m_RSV = *(float*)(m_ASDUData.GetData()+9);		m_RFA = *(float*)(m_ASDUData.GetData()+13);	}	m_ASDUData.SetSize(0);}/////////// ASDU28 /////////CAsdu28::CAsdu28(){	m_FAN = 0;}void CAsdu28::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU28的解释处理	{		if (m_ASDUData.GetSize() != 4*sizeof(BYTE))		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}		m_iResult = 1;		m_FAN = *(WORD*)(m_ASDUData.GetData()+2);	}	m_ASDUData.SetSize(0);}/////////// ASDU29 /////////CAsdu29::CAsdu29(){}void CAsdu29::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU29的解释处理	{		if (m_ASDUData.GetSize() >= 3)		{			if (m_ASDUData.GetSize() != (int)((5+m_ASDUData.GetAt(2)*3)*sizeof(BYTE)))			{				m_ASDUData.SetSize(0);				m_iResult = 0;				return;			}			m_iResult = 1;			m_FAN = *(WORD*)(m_ASDUData.GetData());		}		else		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}	}	m_ASDUData.RemoveAt(0, 2);	m_ASDUData.FreeExtra();}/////////// ASDU30 /////////CAsdu30::CAsdu30(){	m_TOV = 0x00;	m_FAN = 0;}void CAsdu30::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU30的解释处理	{		if (m_ASDUData.GetSize() >= 7)		{			BYTE btmp = m_ASDUData.GetAt(5);			if (m_ASDUData.GetSize() != (int)((8+btmp*2)*sizeof(BYTE)))			{				m_ASDUData.SetSize(0);				m_iResult = 0;				return;			}			m_iResult = 1;			m_ASDUData.RemoveAt(0);			m_TOV = m_ASDUData[0];			m_FAN = *(WORD*)(m_ASDUData.GetData()+1);		}		else		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}	}	m_ASDUData.RemoveAt(0, 3);	m_ASDUData.FreeExtra();}/////////// ASDU31 /////////CAsdu31::CAsdu31(){	m_TOO = 0x00;	m_TOV = 0x00;	m_FAN = 0;	m_ACC = 0x00;}void CAsdu31::ExplainAsdu(int iProcessType /* =0 */){	if (iProcessType == 0)//标准103的ASDU31的解释处理	{		if (m_ASDUData.GetSize() != 5)		{			m_ASDUData.SetSize(0);			m_iResult = 0;			return;		}		m_iResult = 1;		m_TOO = m_ASDUData[0];		m_TOV = m_ASDUData[1];		m_FAN = *(WORD*)(m_ASDUData.GetData()+2);		m_ACC = m_ASDUData[4];	}	m_ASDUData.SetSize(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -