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

📄 publicclass.h

📁 为电力系统开发保护设备装置通讯的源代码 采用串口通讯, ret hat 9下 QT开发
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef PUBLICCLASS_H#define PUBLICCLASS_H#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <signal.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <sys/shm.h>#include <sys/errno.h>#include <unistd.h>#include <sys/mman.h>#include <linux/kernel.h>#include <string.h>#include <qptrlist.h>#include <qmessagebox.h>#include <qwidget.h>#include <locale.h>#include <langinfo.h>#include <qdatetime.h>#include "xml.h"#include "../signalprocess.h"#include <string>using namespace std;//#pragma pack(1)#define  WM_USER        1024////////////////////////////////////////////接点类型的定义///////////////////////////////////////////////#define  DEVICENODE              1#define  SENDNODE              2#define  RECVNODE              3#define  DISPNODE              4////////////////////////////////////////////面板灯类型的定义/////////////////////////////////////////////#define		LAMP_OFF 	            0#define		LAMP_GREEN 	            1#define		LAMP_RED 	            2////////////////////////////////////////////信号常量的定义//////////////////////////////////////////////#define		ASK_START				0#define		ANW_START				1#define		RESULT_LINES			8000///////////////////////////////////////////消息队列数据类型///////////////////////////////////////////////1.系统使用#define		WM_SENDMSGQUEUEID		1	//主模块->子模块#define		WM_RECVMSGQUEUEID		2   //主模块->子模块#define		WM_STARTDEVICETHREAD	3   //主模块->子模块#define		WM_STOPDEVICETHREAD		4   //主模块->子模块#define		WM_SENDDEVTHREADID		5   //子模块->主模块#define		WM_SENDDEVSTOPTHREAD	6   //子模块->主模块//2.命令类型#define		WM_REQUESTPARAMVALUE	WM_USER+1000 //申请定值#define		WM_MODIFYPARAMVALUE		WM_USER+1001 //申请修改定值#define		WM_MODIFYTIME			WM_USER+1002 //申请修改时钟#define		WM_REQUESTANLOGVALUE	WM_USER+1003 //申请采样值#define		WM_REQUESTSWITCHVALUE	WM_USER+1004 //申请开关量#define		WM_REQUESTSHUVALUE		WM_USER+1005 //申请压板状态#define 	WM_REQUESTPVSECTOR		WM_USER+1006 //申请定值区号#define 	WM_REQUESTCHGPVSECTOR	WM_USER+1007 //申请切换定值区号#define 	WM_SERIESANLOGBEGIN		WM_USER+1008 //开始连续采样#define 	WM_SERIESANLOGEND		WM_USER+1009 //停止连续采样#define		WM_MODIFYSWITCHVALUE	WM_USER+1010 //申请修改开关量#define		WM_SHUTTERSTATEON		WM_USER+1011 //申请投压板#define		WM_SHUTTERSTATEOFF		WM_USER+1012 //申请退压板#define		WM_REQUESTDISTURBDATA	WM_USER+1013 //申请扰动数据#define		WM_REQUESTFILELIST		WM_USER+1014 //申请文件列表#define		WM_REQUESTREMOTEREC		WM_USER+1015 //申请遥控录波#define		WM_REQUESTCOMMSTATE		WM_USER+1016 //申请通信状态#define		WM_REQUESTCOMMRESET		WM_USER+1017 //申请通信复位#define		WM_REQUESTHFRESET		WM_USER+1018 //申请高频复归#define		WM_REQUESTHFEXCHG		WM_USER+1019 //申请高频交换#define		WM_ACTIONSIGNALRESET	WM_USER+1020 //动作信号复归#define		WM_MONITORSET			WM_USER+1021 //监视变更#define		WM_RUN_A_DEVICE			WM_USER+1040 //运行一个设备#define		WM_STOP_A_DEVICE		WM_USER+1041 //停止一个设备#define		WM_CHECK_A_DEVICE		WM_USER+1042 //检修一个设备#define		WM_STOP_A_MODULE		WM_USER+1043 //停止一个模块////////////////////////////////////////////////对主站的响应///////////////////////////////////////////#define 	WM_GENERALCOMMAND		WM_USER+1044 //通用分类命令#define 	WM_LOOKUPHISTORY		WM_USER+1045 //申请历史信息//3.数据#define		DATA_REQUESTPARAMVALUE	7 	//定值数据#define		DATA_REQUESTANLOGVALUE	8  	//模拟量数据#define		DATA_REQUESTSWITCHVALUE	9	//开关量数据#define		DATA_FAULT 				10  //故障数据#define		DATA_FAULTACT			11	//故障动作元件#define		DATA_FAULTSWITCH		12	//故障开关动作信息#define		DATA_FAULTVALUE			13	//故障值#define		DATA_FAULTOVER			14  //故障数据结束#define		DATA_EVENT 				20	//自检报告#define		DATA_EVENTACT			21	//自检报告-动作元件#define		DATA_EVENTOVER			22	//自检报告结束#define		DATA_BRUSTRESULT		23	//突发数据发送回应#define		DATA_DEVICELOG			30	//设备运行日志#define		DATA_SENDDATA			40	//发送数据#define		DATA_RECVDATA			41	//接收数据#define		DATA_REQUESTSHIFTVALUE	50 	//压板状态#define		DATA_REQUESTSECTOR		51 	//申请定值区号#define 	DATA_SYSLOG				52	//系统日志#define 	DATA_GENERALCOMMAND		61	//回复通用命令#define		DATA_HISFAULT 			62  //故障数据#define		DATA_HISFAULTACT		63	//故障动作元件#define		DATA_HISFAULTSWITCH		64	//故障开关动作信息#define		DATA_HISFAULTVALUE		65	//故障值#define		DATA_HISFAULTOVER		66  //故障数据结束#define		DATA_HISEVENT 			67	//自检报告#define		DATA_HISEVENTACT		68	//自检报告-动作元件#define		DATA_HISEVENTOVER		69	//自检报告结束#define 	DATA_WAVELIST			70#define 	DATA_WAVEFILE			71QString _T(QString s);QString _T(QCString s);QString _T(char *s);QString _T(const char *s);QCString _R(QString s);QCString _R(QCString s);QCString _R(char *s);QCString _R(const char *s);int  _getKeyId();bool _isFileExists(QString Filename);void Sleep(int itime);//*********************基本可视化类的定义*****************////*icon=0,1,2,3(0=QMessageBox::NoIcon,1=QMessageBox::Information //*	      2=QMessageBox::Warning,3=QMessageBox::Critical)//*//*****************************************************//class CMessageBox : public QMessageBox{    public:    CMessageBox(const QString caption,const QString text,QWidget* parent=0,unsigned int icon=2);    CMessageBox(const QString caption,const QString text,int btn0,int btn1,int btn2,				QWidget *parent=0,unsigned int icon=2);};//*********************信号类的定义*****************//class CSignal{    public:    CSignal();    ~CSignal();    public:    bool InstallSignalProcess1();					//安装信号响应机制    bool InstallSignalProcess2();					//安装信号响应机制    bool SendSignal(pid_t pid,int sig,int type,void* ptr=NULL,int iSize=-1);	//发送信号};//*********************进程信息***********************//typedef struct St_ThreadInfo{    pthread_t		m_threadid;			//消息发送者进程(Pid)    char			m_ThreadName[40];	//线程名称}st_threadinfo;	typedef struct St_ProcessInfo{    long 			mtype;				//消息类型(目标进程Pid)    long 			requestid;				//消息发送者进程(Pid)    unsigned int 	m_Pid;				//进程Pid    char         	m_ModulName[40];	//模块名称}st_processinfo;typedef struct St_MonitorSrc{    int				m_MachineNo;			//设备编号;0=不发送监视报文    int				m_SrcFlag;			//1=收;2=发;3=发+收,0不发送    int				m_OutFile;			//是否输出文件0=不;1=是    int				m_Sums;			//屏幕保留行数;0=不清除}st_monitorsrc;//**************************消息结构*************************//*mtype--消息发送给某个进程的进程号//*requestid--消息发送者进程号//*transtopid--转发给某个进程的进程号typedef struct St_NodeInfo{    long 			mtype;				//消息类型(目标进程Pid)    long			requestid;			//消息发送者进程(Pid)    long			transtopid;			//转发给某进程(Pid)    long			m_CurrentThread;			//消息隶属线程    long			m_TransThread;			//消息到达隶属线程后                                                       //转发目的线程    int				m_MachineNo;			//设备号    unsigned int 		m_DataType;			//消息类型    unsigned int			m_DataFrom;			//命令来源0=界面;1=后台;    int		 		m_DisplayFlag;			//显示标志(0=不显示;1=显示)    int		              m_iResult;			//执行结果[0表示命令;                                                       //-1=表示执行结果失败]                                                       //1=表示执行结果成功]                                                       //对于故障表示故障序号    int				m_Level;			//级别    char			m_AddCommand[5];		//命令的附加信息[0x01    char			m_UniqueCmd[20];		//命令的唯一标识    char			m_RecordFlag[32];		//记录的唯一标识    long			m_SegmentPid;			//指向内存的Pid    long			m_iSize;				//内存大小}st_nodeinfo;//*说明:m_SupportCmd表示32位命令支持,// 0.修改时钟 		1.申请定值 	 2.申请定值区号  	3.修改设备定值 // 4.切换定值区号 	5.申请采样值 	 6.连续采样记录开始 	7.连续采样记录结束 // 8.申请开关量 	9.修改开关量 	 10.申请软压板 	11.投退软压板 // 12.退软压板 		13.申请扰动波形 14.申请文件列表 	15.申请遥控录波//16.申请通信状态 //17.申请通信复位 	18.申请高频复归 19.申请高频交换 	20.动作信号复归 //21.no used 		22.no used 	 23.no used 		24.no used//25.no used		26.no used 	 27.no used 		28.no used//29.no used 		30.no used 	 31.no usedtypedef struct St_DeviceInfo{    long 			mtype;				//消息类型(目标进程Pid)    long			requestid;			//消息发送者进程(Pid)    unsigned int 		m_EquipNo;			//设备编号    char			m_Equipment[80];		//设备名称    unsigned int              m_EquipAddr;			//装置地址    char	              m_LineName[80];		//线路名称    char			m_IPAddress[20];			//装置的IP地址    int				m_CommClass;			//通讯类型    int				m_Port;				//端口    int				m_Speed;			//串口通讯速率    int				m_Parity;			//校验    int				m_DataBit;			//数据位    int				m_StopBit;			//停止位    int				m_SocketPort;			//网络通讯端口    int				m_UsedIp;			//设备状态    int				m_TimedIp;			//校时方式    int				m_Remote;			//远程控制    int				m_Interval;			//巡检间隔    char			m_MachineType[40];		//信息类型    char			m_ModuleName[40];		//模块名称    int				m_PlFlag;			//设备属性1    int				m_PhFlag;			//设备属性2    unsigned int			m_ThreadId;			//线程号    unsigned int               m_ParentThreadId;		//隶属线程编号    int				m_ThreadState;			//线程状态    unsigned long		m_SupportCmd;			//设备支持的命令    char			m_RecordIndex[31];		//设备信息记录编号    char			m_ParentIndex[31];		//隶属设备记录编号    char			m_DiRecordIndex[31];		//设备记录号    char			m_LpRecordIndex[31];		//隶属线路记录号    char			m_SiRecordIndex[31];		//隶属间隔记录号}st_deviceinfo;//*********************消息类的定义*****************//class CMessageQueue{    public:    CMessageQueue();    ~CMessageQueue();    public:    int m_MessageQid;						//消息队列的qid    public:    int Open_MessageQueue(key_t keyval);				//创建一个消息队列    int Send_Message(int qid,void* qbuf,int iSize);			//发送消息    int Read_Message(int qid,long type,void* qbuf,int iSize);		//从消息队列中读取消息    int Peek_Message(int qid,long type);				//检查是否有满足条件的消息    int Get_QueueDs(int qid,struct msqid_ds *qbuf);			//获取消息队列的内部数据结构    int Change_QueueMode(int qid,char *mode);			//改变队列的模式    int Remove_MessageQueue(int qid);				//删除一个消息队列    bool SendMessage(int qid,long DestPid,long DestThread,unsigned int DataType,				      void* qbuf,int iSize);    bool SendMessageEx(int qid,long DestPid,long DestThread,unsigned int DataType,				      void* qbuf=NULL,int iSize=0,				      unsigned int DataFrom=0,int iResult=1,int DisplayFlag=0,				      int Level=0,long TransThread=0);    bool SendMessage(int qid,void* ppNode);    bool ReadMessage(int qid,int pid,st_nodeinfo* msgbuf);    void ClearMessage(int qid,int pid);};//*********************共享内存类的定义*****************//class CSegment{    public:    CSegment();    ~CSegment();    public:    int m_SegmentQid;						//共享内存的qid    public:    int Open_Segment(key_t keyval,int iSize,bool bExcl=FALSE);	//创建一个共享内存    void *Attach_Segment(int shmid);				//返回内存段连接的地址    int  DisAttach_Segment(void* segptr);    void Write_Segment(void *segptr,void *pSrc,int iSize);		//写内存    void Read_Segment(void *segptr,void *pDes,int iSize);		//读内存    void Remove_Segment(int shmid);				//删除内存    void Change_SegmentMode(int shmid,char *mode);		//改变内存模式    int  WriteSegment(void *pSrc,int iSize,bool bExcl=TRUE);    void ReadSegment(int shmid,void *pDes,int iSize,bool bDelete=TRUE);};typedef  QValueList<st_deviceinfo>	DeviceInfoListType;class CDeviceNode{    public:    CDeviceNode();    ~CDeviceNode();    public:    int				m_ModuleState;			//模块运行状态    int				m_Level;			//接点级别    QDateTime			m_StartTime;			//最后测试子模块信号发送时间    QDateTime			m_LastTime;			//最后测试子模块信号发送时间    int				m_SignalFlag;    st_deviceinfo			m_deviceinfo;			//设备信息结构    DeviceInfoListType		m_ChildDevList;			//下级设备信息表    int				m_ModuleClass;			//=0一般设备;=1表示后台    public:    int FindDevicebyRecordIndex(QString RecordIndex);    void AddChildDevice(st_deviceinfo &st);    int AddChildDevices(void* dlist,int count,unsigned int ThreadId=0);    void UpdateDevicesThread(void* deviceinfo,int iSize);    void UpdateChildDevicesThread(void* ParentDevInfo,int iSize);    void DeleteFromChildDevList(void* deviceinfo,int iSize);    void ResetXunJianFlag();    int FindDeviceByEquipNo(int iEquipNo);    int FindDeviceByFlag(int iFlag /* = 0 */);};class CDataNode{    public:    CDataNode();    ~CDataNode();    public:    st_nodeinfo		m_nodeinfo;			//数据信息结构	int				m_init;};class CNodeManage{    public:    CNodeManage();    ~CNodeManage();    public:    QPtrList<CDeviceNode>	m_DeviceNode;    QPtrList<CDataNode>		m_SendNode;    QPtrList<CDataNode>		m_RecvNode;    QPtrList<CDataNode>		m_DispNode;    public:    bool AddNode(void* pNode,const unsigned int nodetype=DEVICENODE);    CDeviceNode* FindModuleNode(QString ModuleName,int ModuleState=-1);    CDeviceNode* FindModuleNode(int pid,int ModuleState=-1);	void FindDeviceNo(QString RecordIndex,int& iEquipNo) ;    CDeviceNode* FindDevicebyEquipNo(int EquipNo,int Level,int & index);    CDeviceNode* FindDevicebyEquipNo(QString RecordIndex,int Level,int & index) ;    void DeleteDeviceNode(void* pNode);    CDataNode*   FindRecvDataNode(long ithreadid = -1);    void         DeleteRecvDataNode(CDataNode* pNode);    bool AddSendDataNode(long DestPid,long DestThread,unsigned int DataType,				      void* qbuf=NULL,int iSize=0,				      unsigned int DataFrom=0,int iResult=1,int DisplayFlag=0,				      int Level=0,long TransThread=0);    bool 		AddSendDataNode(long DestPid,long DestThread,unsigned int DataType, int iMachineNo);    bool 		AddSendDataNode(void* ppNode);

⌨️ 快捷键说明

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