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

📄 103device.cpp~

📁 电力系统Linux设备通讯程序 主要是为了各大电网通讯数据代码
💻 CPP~
📖 第 1 页 / 共 5 页
字号:
		icpuno = sztmp.toInt();				cnode = m_pxml->GetChildNode(node, "ELEMENT", "pfun", szfun, "pinf", szinf);		if (cnode.isNull()) return;		if (!m_pxml->GetNodeAttr(cnode, "pfun", szfun)) return;		ifun = szfun.toInt();		if (!m_pxml->GetNodeAttr(cnode, "pinf", szinf)) return;		iinf = szinf.toInt();		if (!m_pxml->GetNodeAttr(cnode, "entry", sztmp)) return;		ientry = sztmp.toInt();		if (!m_pxml->GetNodeAttr(cnode, "desc", sztmp)) return;				st_fault* pRpt_Fault = new st_fault;		st_faultact* pFaultAct = new st_faultact;		memset(pRpt_Fault, 0x00, sizeof(st_fault));		memset(pFaultAct, 0x00, sizeof(st_faultact));		pRpt_Fault->m_StationNo = g_PublicClass.m_StationNo;		pRpt_Fault->m_MachineNo = m_DevInfo.m_EquipNo;		pRpt_Fault->m_CpuNo = icpuno;		pRpt_Fault->m_FaultNum = ++m_iFaultNo;		strcpy(pRpt_Fault->m_MachineName, m_DevInfo.m_Equipment);		szDate.sprintf("%04d%02d%02d%02d%02d%02d%03d", date.year(), date.month(), date.day(),					   a1.m_Cp32Time.Time.Hours, a1.m_Cp32Time.Time.Minutes, 					   a1.m_Cp32Time.Time.Milliseconds/1000, 					   a1.m_Cp32Time.Time.Milliseconds%1000);		memcpy(pRpt_Fault->m_ActionTime, szDate.data(), szDate.length());				if (a1.m_Dpi.dpi.dpi == 1) sztmp += m_szDpi1;		else sztmp += m_szDpi2;		pFaultAct->m_MachineNo = m_DevInfo.m_EquipNo;		pFaultAct->m_CpuNo = icpuno;		pFaultAct->m_FaultNum = m_iFaultNo;		memcpy(pFaultAct->m_ActElement, sztmp.data(), sztmp.length());		pFaultAct->m_ActTime = 0;		pFaultAct->m_Dpi = a1.m_Dpi.dpi.dpi;		pFaultAct->m_FunCode = ifun;		pFaultAct->m_EventCode = iinf;		pFaultAct->m_GroupNo = igroup;		pFaultAct->m_Entry = ientry;				pNode = new CDataNode();		memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));		pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值		pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上		pNode->m_nodeinfo.m_iResult = 1;		pNode->m_nodeinfo.m_SegmentPid = (long)pRpt_Fault;		pNode->m_nodeinfo.m_iSize = sizeof(st_fault);		pNode->m_nodeinfo.m_DataType = DATA_FAULT;		g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode);				pNode = new CDataNode();		memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));		pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值		pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上		pNode->m_nodeinfo.m_iResult = 1;		pNode->m_nodeinfo.m_SegmentPid = (long)pFaultAct;		pNode->m_nodeinfo.m_iSize = sizeof(st_faultact);		pNode->m_nodeinfo.m_DataType = DATA_FAULTACT;		g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode);				pNode = new CDataNode();		memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));		pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值		pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;		pNode->m_nodeinfo.m_iResult = m_iFaultNo;		pNode->m_nodeinfo.m_SegmentPid = (long)0;		pNode->m_nodeinfo.m_iSize = 0;		pNode->m_nodeinfo.m_DataType = DATA_FAULTOVER;		g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode);				node = m_pxml->GetDomNode("body", "DEVCONFIG");		sztmp.sprintf("%s", m_DevInfo.m_Equipment);		cnode = m_pxml->GetChildNode(node, "FAULTNO", "devname", sztmp);		sztmp.sprintf("%d", m_iFaultNo);		m_pxml->InsertNodeAttr(cnode, "value", sztmp);		m_pxml->SaveXmlFile();	}}void C103Device::ProcessAsdu2(){	CAsdu02 a2;	a2.SaveAsdu(m_ReceData);	a2.ExplainAsdu();	if (a2.m_COT == 1)	{		CString sztmp = "", szfun = "", szinf = "";		sztmp.sprintf("%d", (*it).CpuNo);		szfun.sprintf("%d", a2.m_FUN);		szinf.sprintf("%d", a2.m_INF);		QDomNode node, cnode;		node = m_pxml->GetDomNode("body", "FAULT", "pcpuno", sztmp);		if (node.isNull()) return;		if (!m_pxml->GetNodeAttr(node, "group", sztmp)) return;		int igroup = sztmp.toInt();		if (!m_pxml->GetNodeAttr(node, "cpuno", sztmp)) return;		int icpuno = sztmp.toInt();				cnode = m_pxml->GetChildNode(node, "ELEMENT", "pfun", szfun, "pinf", szinf);		if (cnode.isNull()) return;		if (!m_pxml->GetNodeAttr(cnode, "pfun", szfun)) return;		int ifun = szfun.toInt();		if (!m_pxml->GetNodeAttr(cnode, "pinf", szinf)) return;		int iinf = szinf.toInt();		if (!m_pxml->GetNodeAttr(cnode, "entry", sztmp)) return;		int ientry = sztmp.toInt();		if (!m_pxml->GetNodeAttr(cnode, "desc", sztmp)) return;				st_fault* pRpt_Fault = new st_fault;		st_faultact* pFaultAct = new st_faultact;		memset(pRpt_Fault, 0x00, sizeof(st_fault));		memset(pFaultAct, 0x00, sizeof(st_faultact));		pRpt_Fault->m_StationNo = g_PublicClass.m_StationNo;		pRpt_Fault->m_MachineNo = m_DevInfo.m_EquipNo;		pRpt_Fault->m_CpuNo = icpuno;		pRpt_Fault->m_FaultNum = ++m_iFaultNo;		strcpy(pRpt_Fault->m_MachineName, m_DevInfo.m_Equipment);		CString szDate = "";		QDate date = QDate::currentDate();		szDate.sprintf("%04d%02d%02d%02d%02d%02d%03d", date.year(), date.month(), date.day(),					   a2.m_Cp32Time.Time.Hours, a2.m_Cp32Time.Time.Minutes, 					   a2.m_Cp32Time.Time.Milliseconds/1000, 					   a2.m_Cp32Time.Time.Milliseconds%1000);		memcpy(pRpt_Fault->m_ActionTime, szDate.data(), szDate.length());				if (a2.m_Dpi.dpi.dpi == 1) sztmp += m_szDpi1;		else sztmp += m_szDpi2;		pFaultAct->m_MachineNo = m_DevInfo.m_EquipNo;		pFaultAct->m_CpuNo = icpuno;		pFaultAct->m_FaultNum = m_iFaultNo;		memcpy(pFaultAct->m_ActElement, sztmp.data(), sztmp.length());		pFaultAct->m_ActTime = a2.m_Cp32TimeRET.Time.Milliseconds;		pFaultAct->m_Dpi = a2.m_Dpi.dpi.dpi;		pFaultAct->m_FunCode = ifun;		pFaultAct->m_EventCode = iinf;		pFaultAct->m_GroupNo = igroup;		pFaultAct->m_Entry = ientry;				CDataNode* pNode = new CDataNode();		memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));		pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值		pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上		pNode->m_nodeinfo.m_iResult = 1;		pNode->m_nodeinfo.m_SegmentPid = (long)pRpt_Fault;		pNode->m_nodeinfo.m_iSize = sizeof(st_fault);		pNode->m_nodeinfo.m_DataType = DATA_FAULT;		g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode);				pNode = new CDataNode();		memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));		pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值		pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上		pNode->m_nodeinfo.m_iResult = 1;		pNode->m_nodeinfo.m_SegmentPid = (long)pFaultAct;		pNode->m_nodeinfo.m_iSize = sizeof(st_faultact);		pNode->m_nodeinfo.m_DataType = DATA_FAULTACT;		g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode);				pNode = new CDataNode();		memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));		pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值		pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;		pNode->m_nodeinfo.m_iResult = m_iFaultNo;		pNode->m_nodeinfo.m_SegmentPid = (long)0;		pNode->m_nodeinfo.m_iSize = 0;		pNode->m_nodeinfo.m_DataType = DATA_FAULTOVER;		g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode);				node = m_pxml->GetDomNode("body", "DEVCONFIG");		sztmp.sprintf("%s", m_DevInfo.m_Equipment);		cnode = m_pxml->GetChildNode(node, "FAULTNO", "devname", sztmp);		sztmp.sprintf("%d", m_iFaultNo);		m_pxml->InsertNodeAttr(cnode, "value", sztmp);		m_pxml->SaveXmlFile();	}}void C103Device::ProcessAsdu3(){	CAsdu03 a03;	a03.SaveAsdu(m_ReceData);	a03.ExplainAsdu();}void C103Device::ProcessAsdu4(){	CAsdu04 a04;	a04.SaveAsdu(m_ReceData);	a04.ExplainAsdu();}void C103Device::ProcessAsdu6(){	CAsdu06 a06;	a06.SaveAsdu(m_ReceData);	a06.ExplainAsdu();}void C103Device::ProcessAsdu8(){	CAsdu08 a08;	a08.SaveAsdu(m_ReceData);	a08.ExplainAsdu();	m_bGIFinished = true;}void C103Device::ProcessAsdu9(){	CAsdu09 a09;	a09.SaveAsdu(m_ReceData);	a09.ExplainAsdu();}void C103Device::ProcessAsdu10(){	CAsdu10 a10;	a10.SaveAsdu(m_ReceData);		if (a10.m_COT == 0x01)//南瑞RCS系列保护送故障时测距值和电流值等信息	{		CFaultExplain FaultExplain;		a10.ExplainAsdu(FaultExplain);		m_FaultExplain.Add(FaultExplain);	}	else if (a10.m_COT == 0x2c)//修改定值或压板状态时,表明可以修改了	{		//	m_bCanModfiy = TRUE;	}	else if (a10.m_COT == 0x28)//修改定值或压板状态时,表明修改成功了	{		//	m_bModfiyFinish = TRUE;	}}void C103Device::ProcessAsdu23(){	CAsdu23 a23;	a23.SaveAsdu(m_ReceData);	a23.ExplainAsdu();		if (m_iWaveFlag == 1 && m_bSwitch == false)	{		for (int i=0; i<a23.m_VSQ.byte; i++)		{			CString sztmp = "";			sztmp.sprintf("%04d%02d%02d%02d%02d%05d", 						  a23.m_DDTables[i].Cp56Time.Time.Years+2000, 						  a23.m_DDTables[i].Cp56Time.Time.Months, 						  a23.m_DDTables[i].Cp56Time.Time.DaysOfMonth, 						  a23.m_DDTables[i].Cp56Time.Time.Hours, 						  a23.m_DDTables[i].Cp56Time.Time.Minutes, 						  a23.m_DDTables[i].Cp56Time.Time.Milliseconds);			if (strcmp(sztmp, m_szLastWaveTime) > 0)			{				m_DDTable.Add(a23.m_DDTables[i]);			}		}		SortDDTable();	}}void C103Device::ProcessAsdu26(){	CAsdu26 a26;	a26.SaveAsdu(m_ReceData);	a26.ExplainAsdu();		m_DistrubData.DeleteData();	m_DistrubData.m_iNOC = a26.m_NOC;	m_DistrubData.m_iNOE = a26.m_NOE;	m_DistrubData.m_iINT = a26.m_INT;	memcpy(m_DistrubData.m_FaultStartTime.byte, a26.m_Cp32Time.byte, 4*sizeof(BYTE));		if (!SendAsdu24(a26.m_FAN, 0x02, a26.m_TOV, 0)) m_DDStatus = 2;}void C103Device::ProcessAsdu27(){	CAsdu27 a27;	a27.SaveAsdu(m_ReceData);	a27.ExplainAsdu();	m_DistrubData.SaveACCInfo(a27.m_ACC, a27.m_RPV, a27.m_RSV, a27.m_RFA);		if (!SendAsdu24(a27.m_FAN, 0x08, a27.m_TOV, a27.m_ACC)) m_DDStatus = 2;}void C103Device::ProcessAsdu28(){	CAsdu28 a28;	a28.SaveAsdu(m_ReceData);	a28.ExplainAsdu();	if (!SendAsdu24(a28.m_FAN, 0x10, 0x01, 0)) m_DDStatus = 2;}void C103Device::ProcessAsdu29(){	CAsdu29 a29;	a29.SaveAsdu(m_ReceData);	a29.ExplainAsdu();	m_DistrubData.SaveSwitchData(a29.m_ASDUData.GetData());}void C103Device::ProcessAsdu30(){	CAsdu30 a30;	a30.SaveAsdu(m_ReceData);	a30.ExplainAsdu();	m_DistrubData.SaveChannelData(a30.m_ASDUData.GetData());}void C103Device::ProcessAsdu31(){	CAsdu31 a31;	a31.SaveAsdu(m_ReceData);	a31.ExplainAsdu();	switch(a31.m_TOO)	{		case 32://不带中止的扰动数据传输的结束		m_DDStatus = 1;		SendAsdu25(a31.m_FAN, 0x40, a31.m_TOV, a31.m_ACC);//0x40成功的扰动数据传输(肯定)		break;		case 33://由控制系统所中止的扰动数据传输的结束		m_DDStatus = 2;		SendAsdu25(a31.m_FAN, 0x41, a31.m_TOV, a31.m_ACC);//0x41不成功的扰动数据传输(否定)		m_DistrubData.DeleteData();		break;		case 34://由继电保护设备(或间隔单元)所中止的扰动数据的传输的结束		m_DDStatus = 2;		SendAsdu25(a31.m_FAN, 0x41, a31.m_TOV, a31.m_ACC);//0x41不成功的扰动数据传输(否定)		m_DistrubData.DeleteData();		break;		case 35://不带中止的通道传输的结束		m_DDStatus = 0;		SendAsdu25(a31.m_FAN, 0x42, a31.m_TOV, a31.m_ACC);//0x42成功的通道传输(肯定)		break;		case 36://由控制系统所中止的通道传输的结束		m_DDStatus = 2;		SendAsdu25(a31.m_FAN, 0x43, a31.m_TOV, a31.m_ACC);//0x43不成功的通道传输(否定)		m_DistrubData.DeleteData();		break;		case 37://由继电保护设备(或间隔单元)所中止的通道传输的结束		m_DDStatus = 2;		SendAsdu25(a31.m_FAN, 0x43, a31.m_TOV, a31.m_ACC);//0x43不成功的通道传输(否定)		m_DistrubData.DeleteData();		break;		case 38://不带中止的带标志的状态变位的传输的结束		m_DDStatus = 0;		SendAsdu25(a31.m_FAN, 0x44, a31.m_TOV, a31.m_ACC);//0x44成功的带标志的状态变位传输(肯定)		break;		case 39://由控制系统所中止的带标志的状态变位的传输的结束		m_DDStatus = 2;		SendAsdu25(a31.m_FAN, 0x45, a31.m_TOV, a31.m_ACC);//0x45不成功的带标志的状态变位传输(否定)		m_DistrubData.DeleteData();		break;		case 40://由继电保护设备(或间隔单元)所中止的带标志的状态变位的传输的结束		m_DDStatus = 2;		SendAsdu25(a31.m_FAN, 0x45, a31.m_TOV, a31.m_ACC);//0x45不成功的带标志的状态变位传输(否定)		m_DistrubData.DeleteData();		break;		default :	break;	}}bool C103Device::GetDingZhi(){	m_CmdInfo.m_SegmentPid = 0;	m_CmdInfo.m_iSize = 0;	for (int i=0; i<m_iCpuNum; i++)	{		it = m_CommParam.at(i);		if (!ResetCU())		{			SendMsgToMain(-1, "申请定值错误");			return false;		}		CString sztmp = "";		sztmp.sprintf("%d", (*it).CpuNo);		QDomNode node, cnode;		node = m_pxml->GetDomNode("body", "PARAMCONFIG", "cpuno", sztmp);		if (node.isNull())		{			SendMsgToMain(-1, "申请定值错误");			return false;		}		int ilen = m_pxml->GetChildNodeCount(node);		CAsdu10 a10;		for (int j=0; j<ilen; j++)		{			sztmp.sprintf("GROUPNO%d", j+1);			cnode = m_pxml->GetChildNode(node, sztmp, "", "");			if (!m_pxml->GetNodeAttr(cnode, "value", sztmp)) continue;			BYTE igroup = (BYTE)sztmp.toInt();			if (!GetGroupData(a10, igroup, 0, 1))			{				ExplainGroupData(a10);				SendMsgToMain(-1, "申请定值错误");				return false;			}		}		ExplainGroupData(a10);	}	SendMsgToMain(1, "申请定值成功");	return true;}bool C103Device::GetSector(){	m_CmdInfo.m_SegmentPid = 0;	m_CmdInfo.m_iSize = 0;	for (int i=0; i<m_iCpuNum; i++)	{		it = m_CommParam.at(i);		if (!ResetCU())		{			SendMsgToMain(-1, "申请定值区号错误");			return false;		}		CString sztmp = "";		sztmp.sprintf("%d", (*it).CpuNo);		QDomNode node, cnode;		node = m_pxml->GetDomNode("body", "SECTORCONFIG", "cpuno", sztmp);		if (node.isNull())		{			SendMsgToMain(-1, "申请定值区号错误");			return false;		}		int ilen = m_pxml->GetChildNodeCount(node);		CAsdu10 a10;		for (int j=0; j<ilen; j++)		{			sztmp.sprintf("GROUPNO%d", j+1);			cnode = m_pxml->GetChildNode(node, sztmp, "", "");			if (!m_pxml->GetNodeAttr(cnode, "value", sztmp)) continue;			BYTE igroup = (BYTE)sztmp.toInt();			if (!GetGroupData(a10, igroup, 0, 1))			{				ExplainGroupData(a10);				SendMsgToMain(-1, "申请定值区号错误");				return false;			}		}		ExplainGroupData(a10);	}	SendMsgToMain(1, "申请定值区号成功");	return true;}bool C103Device::GetAnalog(){	m_CmdInfo.m_SegmentPid = 0;	m_CmdInfo.m_iSize = 0;	for (int i=0; i<m_iCpuNum; i++)	{		it = m_CommParam.at(i);		if (!ResetCU())		{			SendMsgToMain(-1, "申请采样值错误");			return false;		}		CString sztmp = "";		sztmp.sprintf("%d", (*it).CpuNo);		QDomNode node, cnode;		node = m_pxml->GetDomNode("body", "ANALOGCONFIG", "cpuno", sztmp);		if (node.isNull())		{			SendMsgToMain(-1, "申请采样值错误");			return false;		}		int ilen = m_pxml->GetChildNodeCount(node);		CAsdu10 a10;		for (int j=0; j<ilen; j++)		{			sztmp.sprintf("GROUPNO%d", j+1);

⌨️ 快捷键说明

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