📄 publicclass-bak.h
字号:
#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 + -