#pragma once #include "NetProtocol.h" #include "QThread" class IMainCallback; /* CWheelNet 网络通讯模块,解析和发送数据 调用框架的接口,接收数据进行解析,对需要发送的数据进行打包和发送 框架需要支持的网络通讯功能: (1)支持获取当前服务器的IP地址和开放端口 (2)支持获取当前连接到服务器的客户端的IP地址和源端口 (3)支持动态打开和关闭服务器的接口 (4)支持发送数据和接收数据 */ enum EM_HEAD_TYPE { emTypePulse = 1, emTypeLib, emTypeResult, emTypeThickness, emTypeTrig, emTypeClear, emTypeLight, emTypeDetState, emTypeCheckDete, emTypeInitDone, emTypePLCUpdate, emTypeModelnum, emTypeChangeOnline, emTypeWriteDisOnlineModels, emTypeReadOnlineModels, emTypeResultChannel, emTypeTriger, emAngleRst , emShutDown }; class CWheelNet : public QObject, public NetProtocol { Q_OBJECT public: CWheelNet(QString strRoot); ~CWheelNet(); Q_SLOT void onOpenServer(QString IPAddr, int port); Q_SLOT void onOpenServer(); Q_SLOT void onCloseServer(); Q_SLOT void onSendDataByType(int nType, QVariantMap nMap); private: Q_SLOT void DataRecvByte(QByteArray m_data); Q_SLOT void onConnect(QVariantMap vMap); public: void sendModelInitDone(); void sendPulse(int nInterval, int nState, int nOnline); void sendModelList(int nIndex, QString strModel, double dDiameter, double dHeight); void sendDetectResult(QString strModel, double dHeight, double dDiameter); void sendResultChannel(int nChannelValue, double dHeight, double dDiameter, QString str = QString()); void sendThickness(); void sendTrig();//发送清空触发计数 void sendClearLib(); void sendModelNum(int nCount); void sendLight(int nLightType, int nTimes, int nUpTimes, int nDownTimes); void sendDeteStateList(int nIndex, int nIsDetect, QString strModel); void sendCheckDeteStateList(int nIndex, int nIsDetect, QString strModel); void sendCheckAllModelState(); //查询检测在线检测状态 10s发一次 void sendClearDisLibs();//清除下位机离线库 void sendDisLibs(int nIndex, QString strModel); void sendDisLibsDone(); void sendTrigerPara(int nSignal, int nCamTriger, int nCamPulse, int nLight, int nTrigerType = 0, int nResHoldTime=1500); signals: void sgRecvTrigPara(); void sgPulseRev();//心跳包应答信号发送 void sgResultRev();//检测结果发送应答发送 void sgRecv(const QString &); void sgThickness(double);//光栅查询的应答 void sgLibRev(bool);//发送库的应答 void sgClearRev(bool);//发送清空库的应答 void sgDeteState(bool);//发送离线时的检测状态的应答 void sgChangeOnlineState(int);//强制改变离线、在线状态 void sgRecvDetectState(int nIndex, int value);//在线时接收检测状态 void sgCameraTrig(int,double);//PLC触发相机时主动上报 void sgShow2UI(QString str, bool bConnect); void sgClientConnect(QString addr, bool bConnect); void sgServerState(QString, int, bool);//用来传送server打开 关闭状态 void sgReadDetectState(int nIndex, QString StrModelName);//在线应答信号 void sgClearDisLibASK(); void sgSendDisLibASK(bool); void sgReadDetectStateASK(); void sgShutDownComputer(); void sgSendData2Dv(QString,QByteArray); public: void onShowIpDlg(QWidget* parent); QString getIp(EM_NET_TYPE type) const; QString getPort(EM_NET_TYPE type) const; private: bool loadNet(); bool loadIpConfig(); bool saveIpConfig(); void sendData(QString strData); bool sendDataFrame(QString strData); private: class INet4Wheel *m_pNet4Wheel; class IPConfig *m_pIpConfig; QString m_strRoot; };