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

📄 basedevice.cpp

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP
字号:
//basedevice.cpp#include "BaseDevice.h"extern CPublicClass g_PublicClass;CBaseDevice::CBaseDevice(st_deviceinfo DevInfo){    memset(&m_CmdInfo, 0x00, sizeof(st_nodeinfo));	memcpy(&m_DevInfo, &DevInfo, sizeof(st_deviceinfo));	m_CmdInfo.m_MachineNo = m_DevInfo.m_MachineNo;    m_pComm = NULL;	m_bSendState1 = true;	m_bSendState0 = true;	m_bCommError = false;	m_iThreadId = 0;	m_iNoDataTime = 0;	m_iTryTime = 0;	m_szSysPath = g_PublicClass.GetWorkPath()+"/data/"+m_DevInfo.m_MachineType+"/";}CBaseDevice::~CBaseDevice(){}bool CBaseDevice::InitClass(){    return true;}void CBaseDevice::SetHdbc(long hdbc){	hdbc = 0;    m_hdbc = -1;}long CBaseDevice::GetHdbc(){    return m_hdbc;}void CBaseDevice::NotifyMsg(uint dataype, QString RecordIndex, QString TableName, int iresult)//用于突发信息{	CDataNode* pNode = new CDataNode();	m_CmdInfo.m_MachineNo=m_DevInfo.m_MachineNo;	//Linag	2006-11-01	memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));	pNode->m_nodeinfo.mtype = pNode->m_nodeinfo.requestid;	pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;	pNode->m_nodeinfo.transtopid = 0 ;	//LiangZhen 2006-03-22	pNode->m_nodeinfo.m_iResult = iresult;	pNode->m_nodeinfo.m_DataType = dataype;	memset(pNode->m_nodeinfo.m_UniqueCmd , 0 , sizeof pNode->m_nodeinfo.m_UniqueCmd) ;	strcpy(pNode->m_nodeinfo.m_RecordFlag, RecordIndex.data());	strcpy(pNode->m_nodeinfo.m_TableName, TableName.data());	/*int pid = m_dp.GetModulePid(m_hdbc, "98");	if (pid > 0) if (!m_dp.CheckModuleRunning(m_hdbc, pid)) pid = 0;	if (pid > 0)//上送主模块	{		pNode->m_nodeinfo.mtype = pid;	//LiangZhen 2006-03-12	    g_PublicClass.m_NodeManage.AddSendDataNode(pNode);	}	else*///上送操作模块	{		//m_dp.PreMakeNoteList(m_hdbc,pNode->m_nodeinfo);	//LiangZhen 2006-03-23		m_dp.NoticOperModule(m_hdbc, pNode->m_nodeinfo);		m_dp.MakeToSendState(m_hdbc,pNode->m_nodeinfo);	//LiangZhen 2006-03-12		delete pNode;	}}void CBaseDevice::AnswerCommand(uint dataype, QString RecordIndex, QString TableName, int iresult)//用于回答命令{	CDataNode* pNode = new CDataNode();	memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));	pNode->m_nodeinfo.mtype = pNode->m_nodeinfo.requestid;	pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;	pNode->m_nodeinfo.m_iResult = iresult;	pNode->m_nodeinfo.m_DataType = dataype;	strcpy(pNode->m_nodeinfo.m_RecordFlag, RecordIndex.data());	strcpy(pNode->m_nodeinfo.m_TableName, TableName.data());   /* int pid = m_dp.GetModulePid(m_hdbc, "98");	if (pid > 0) if (!m_dp.CheckModuleRunning(m_hdbc, pid)) pid = 0;	if (pid > 0)//上送主模块	{		if (0 == m_CmdInfo.transtopid)		{			pNode->m_nodeinfo.mtype = pid;			pNode->m_nodeinfo.transtopid = m_CmdInfo.requestid ;		}	}	else	{		if(m_CmdInfo.transtopid > 0)		{			pNode->m_nodeinfo.mtype = m_CmdInfo.transtopid;			pNode->m_nodeinfo.transtopid =  0;		}	}*/	g_PublicClass.m_NodeManage.AddSendDataNode(pNode);	}void CBaseDevice::SendMsgToMain(int iResult, QString szMsg){	//int pid = m_dp.GetModulePid(m_hdbc, "99");	Liang 2006-3-20	//if (pid <= 0) return;							Liang 2006-3-20    CDataNode* pNode = new CDataNode();    memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo));    pNode->m_nodeinfo.mtype = m_CmdInfo.requestid;    pNode->m_nodeinfo.requestid = m_CmdInfo.mtype;    pNode->m_nodeinfo.m_iResult = iResult;    pNode->m_nodeinfo.m_DisplayFlag = 1;    if (szMsg != "")    {		char* pMsg = new char[szMsg.length()+1];		memset(pMsg, 0x00, szMsg.length()+1);		memcpy(pMsg, szMsg.data(), szMsg.length());		pNode->m_nodeinfo.m_SegmentPid = (long)pMsg;		pNode->m_nodeinfo.m_iSize = szMsg.length()+1;    }		/*int pid = m_dp.GetModulePid(m_hdbc, "98");							//Liang 2006-3-20	if (pid > 0) if (!m_dp.CheckModuleRunning(m_hdbc, pid)) pid = 0;	//Liang 2006-3-20	if (pid > 0)//上送主模块												//Liang 2006-3-20	{																	//Liang 2006-3-20		if (0 == m_CmdInfo.transtopid)									//Liang 2006-3-20		{																//Liang 2006-3-20			pNode->m_nodeinfo.mtype = pid;								//Liang 2006-3-20			pNode->m_nodeinfo.transtopid = m_CmdInfo.requestid ;		//Liang 2006-3-20		}																//Liang 2006-3-20	}																	//Liang 2006-3-20	else																//Liang 2006-3-20	{																	//Liang 2006-3-20		if(m_CmdInfo.transtopid > 0)									//Liang 2006-3-20		{																//Liang 2006-3-20			pNode->m_nodeinfo.mtype = m_CmdInfo.transtopid;				//Liang 2006-3-20			pNode->m_nodeinfo.transtopid =  0;							//Liang 2006-3-20		}																//Liang 2006-3-20	}		*/															//Liang 2006-3-20	    g_PublicClass.m_NodeManage.AddSendDataNode(pNode);}void CBaseDevice::SendCommStateToMain(int istate){    st_event Rpt_Event;    memset(&Rpt_Event, 0x00, sizeof(st_event));    st_eventact EventAct;    memset(&EventAct, 0x00, sizeof(st_eventact));        Rpt_Event.m_StationNo = g_PublicClass.m_StationNo;    Rpt_Event.m_MachineNo = m_DevInfo.m_MachineNo;    Rpt_Event.m_CpuNo = 0;    Rpt_Event.m_Entry = 255;    Rpt_Event.m_FaultNum = ++m_iFaultNo;    strcpy(Rpt_Event.m_MachineName, m_DevInfo.m_MachineName);        QString szdt = getTimeStr();    memcpy(Rpt_Event.m_ActionTime, szdt.data(), szdt.length());    QString RecordIndex = "", szdev = "";   	if (!m_dp.InsertSelfChk(m_hdbc, Rpt_Event, RecordIndex)) return;   	szdev.sprintf("%s", m_DevInfo.m_MachineName);	g_PublicClass.m_Ini.SetKeyIntValue(szdev.data(), "FAULTNO", m_iFaultNo);	    EventAct.m_MachineNo = m_DevInfo.m_MachineNo;    EventAct.m_CpuNo = 0;    EventAct.m_FaultNum = m_iFaultNo;    EventAct.m_ActNo = 0;    EventAct.m_ActTime = 0;    EventAct.m_Dpi = istate;    QString sztmp = "与"+QString(m_DevInfo.m_MachineName);    if (EventAct.m_Dpi == 0)	{		istate = 1 ;	//Liang	2006/8/7		sztmp += "通信发生异常";	}//if    else	{		istate = 0 ;	//Liang	2006/8/7		sztmp += "通信恢复正常";	}//else	++EventAct.m_Dpi ;    memcpy(EventAct.m_ActElement, sztmp.data(), sztmp.length());    EventAct.m_FunCode = 255;    EventAct.m_InfCode = 255;	EventAct.m_PFunCode = 255;    EventAct.m_PInfCode = 255;    EventAct.m_Group = 255;    EventAct.m_Entry = 255;    if (!m_dp.InsertSelfChkAct(m_hdbc, &EventAct,sizeof(st_eventact), RecordIndex)) return;	m_dp.UpdateCOMMSTATE(m_DevInfo.m_MachineNo , istate) ;	//Liang	2006/8/7	NotifyMsg(DATA_EVENT, RecordIndex, "ALERT_RPT");}bool CBaseDevice::ISendData(BYTE* pbuff, int& isize, int timeout){timeout=timeout;	size_t s=isize;	if (-1==m_pComm->write(pbuff, s))	{		m_bCommError = true;			return false;	}	g_PublicClass.OutDataToConsole(m_DevInfo.m_MachineNo, m_DevInfo.m_MachineName, pbuff, isize, 0);	return true;}	bool CBaseDevice::IRecvData(BYTE* pbuff, int& isize, int timeout){timeout=timeout;	if (!m_pComm->read(pbuff, isize))	{		m_bCommError = true;		return false;	}	g_PublicClass.OutDataToConsole(m_DevInfo.m_MachineNo, m_DevInfo.m_MachineName, pbuff, isize, 1);	if (m_iTryTime != 0)	{		if (isize > 0) m_iNoDataTime = 0;		else m_iNoDataTime++;		if (m_iNoDataTime >= m_iTryTime)		{			m_iNoDataTime = 0;			m_bCommError = true;		}	}		return true;}

⌨️ 快捷键说明

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