#include "WheelNet.h" #include "InfoFile.h" #include "..\NetWheel\net4wheel_global.h" #include "QZkJsonParser.h" #include #include #include #include "qipconfigdlg.h" #include "lpGlobalData.h" #define JSONG_MYSELF_FILE "\\user\\selfdefine.json" #pragma execution_character_set("utf-8") //emTypeResultChannel 结果通道 0x16 //emTypeTriger 设置触发延时相关参数 CWheelNet::CWheelNet(QString strRoot) :// m_pNet4Wheel(NULL), m_strRoot(strRoot) { m_pIpConfig = new IPConfig; loadIpConfig(); loadNet(); } CWheelNet::~CWheelNet() { qDebug() << "delete CWheelNet"; if (m_pIpConfig) { delete m_pIpConfig; m_pIpConfig = NULL; } // if (m_pNet4Wheel) { // delete m_pNet4Wheel; // m_pNet4Wheel = NULL; // } if (m_pTcpServer) { m_pTcpServer->server_end(); delete m_pTcpServer; m_pTcpServer = nullptr; } qDebug() << "delete CWheelNet end"; } bool CWheelNet::loadIpConfig() { QString fileMyself = m_strRoot + JSONG_MYSELF_FILE; QJsonObject jsMyself = QZkJsonParser::ReadJsonAuto(fileMyself); QJsonObject TcpNetObj = jsMyself.value("TcpNetWork").toObject(); if (!TcpNetObj.isEmpty()) { m_pIpConfig->m_TcpAddress = TcpNetObj.value("TCP_Address").toString(); m_pIpConfig->m_TcpPort = TcpNetObj.value("TCP_port").toInt(); QString serverStr = TcpNetObj.value("TCP_Type").toString(); m_pIpConfig->m_ClientAddress = TcpNetObj.value("client_IP").toString(); m_pIpConfig->m_ClientPort = TcpNetObj.value("client_port").toInt(); } return true; } bool CWheelNet::saveIpConfig() { QString fileMyself = m_strRoot + JSONG_MYSELF_FILE; QJsonObject jsMyself = QZkJsonParser::ReadJsonAuto(fileMyself); QJsonObject IPConfigObj; IPConfigObj.insert("TCP_Address", QJsonValue(m_pIpConfig->m_TcpAddress)); IPConfigObj.insert("TCP_port", QJsonValue(m_pIpConfig->m_TcpPort)); IPConfigObj.insert("TCP_Type", QJsonValue("server")); IPConfigObj.insert("client_IP", QJsonValue(m_pIpConfig->m_ClientAddress)); IPConfigObj.insert("client_port", QJsonValue(m_pIpConfig->m_ClientPort)); jsMyself.insert("TcpNetWork", IPConfigObj); return QZkJsonParser::WriteJsonObject(fileMyself, jsMyself); } Q_SLOT void CWheelNet::onOpenServer(QString IPAddr, int port) { // if (m_pNet4Wheel) { // m_pNet4Wheel->OpenServer(IPAddr, port); // emit sgServerState(IPAddr, port, true); // } if (m_pTcpServer) { m_pTcpServer->server_begin(IPAddr, port); emit sgServerState(IPAddr, port, true); } } Q_SLOT void CWheelNet::onOpenServer() { // if (m_pNet4Wheel) { // m_pNet4Wheel->OpenServer(m_pIpConfig->m_TcpAddress, m_pIpConfig->m_TcpPort); // emit sgServerState(m_pIpConfig->m_TcpAddress, m_pIpConfig->m_TcpPort, true); // } if (m_pTcpServer) { m_pTcpServer->server_begin(m_pIpConfig->m_TcpAddress, m_pIpConfig->m_TcpPort); emit sgServerState(m_pIpConfig->m_TcpAddress, m_pIpConfig->m_TcpPort, true); } } Q_SLOT void CWheelNet::onCloseServer() { // if (m_pNet4Wheel) { // m_pNet4Wheel->CloseServer(); // emit sgServerState(m_pIpConfig->m_TcpAddress, m_pIpConfig->m_TcpPort, false); // } if (m_pTcpServer) { m_pTcpServer->server_end(); emit sgServerState(m_pIpConfig->m_TcpAddress, m_pIpConfig->m_TcpPort, false); } } bool CWheelNet::loadNet() { /* #ifdef _DEBUG QLibrary lib("Net4Wheeld"); #else QLibrary lib("Net4Wheel"); #endif if (lib.load()){ _Net4WheelCreate func = (_Net4WheelCreate)lib.resolve("Net4WheelCreate"); QHostAddress pAdd; pAdd.setAddress(m_pIpConfig->m_TcpAddress); m_pNet4Wheel = func(pAdd, m_pIpConfig->m_TcpPort); connect(m_pNet4Wheel, SIGNAL(RecvDatas(QByteArray)), this, SLOT(DataRecvByte(QByteArray))); connect(m_pNet4Wheel, SIGNAL(SignalConnect(QVariantMap)), this, SLOT(onConnect(QVariantMap))); connect(this, SIGNAL(sgSendData2Dv(QString, QByteArray)), m_pNet4Wheel, SLOT(sendDatas(QString, QByteArray))); } */ m_pTcpServer = new lptkRawTcpServer(); connect(m_pTcpServer, SIGNAL(data_received(int, QSharedPointer)), this, SLOT(onDataRecv(int, QSharedPointer))); connect(m_pTcpServer, SIGNAL(sgConnect(QVariantMap)), this, SLOT(onConnect(QVariantMap))); return true; } void CWheelNet::sendData(QString strData) { // if (!m_pNet4Wheel) { // return ; // } // QByteArray arr; // arr.append(strData); // if (m_pIpConfig){ // QString strTarget = genAddressPort(m_pIpConfig->m_ClientAddress, QString::number(m_pIpConfig->m_ClientPort)); // emit sgSendData2Dv(strTarget, arr); // } if (m_pTcpServer) { QSharedPointer pData = QSharedPointer(new QByteArray); pData->append(strData); m_pTcpServer->broadcast_send_data(pData); } } bool CWheelNet::sendDataFrame(QString strData) { /*调用框架接口 发送网络数据*/ return true; } void CWheelNet::onShowIpDlg(QWidget* parent) { QIPConfigDlg ipdlg(parent); ipdlg.setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); ipdlg.setWindowModality(Qt::ApplicationModal); ipdlg.setAttribute(Qt::WA_ShowModal, true); ipdlg.setWindowTitle(tr("IP参数设置")); ipdlg.setWindowIcon(QIcon(":/image/leaper")); ipdlg.SetIPData(m_pIpConfig); connect(&ipdlg, SIGNAL(SignalCloseServer()), this, SLOT(onCloseServer())); connect(&ipdlg, SIGNAL(SignalOpenServer(QString, int)), this, SLOT(onOpenServer(QString, int))); if (ipdlg.exec() == QDialog::Accepted) { ipdlg.GetIPData(m_pIpConfig); saveIpConfig(); } } QString CWheelNet::getIp(EM_NET_TYPE type) const { if (!m_pIpConfig) { return QString(); } if (type == emNetClient) { return m_pIpConfig->m_ClientAddress; } return m_pIpConfig->m_TcpAddress; } QString CWheelNet::getPort(EM_NET_TYPE type) const { if (!m_pIpConfig) { return QString(); } if (type == emNetClient ) { return QString::number(m_pIpConfig->m_ClientPort); } return QString::number(m_pIpConfig->m_TcpPort); } /*心跳包*/ void CWheelNet::sendPulse(int nInterval, int nState, int nOnline) { QList lstData = genList(); lstData[0] = nInterval; lstData[1] = nState; lstData[2] = nOnline; QString strDst = packData(emTypePulse, lstData); sendData(strDst); } /*模板数据*/ /* strModel 型号名 dialeter 直径 dHeight 厚度 */ void CWheelNet::sendModelList(int nIndex, QString strModel, double dDiameter, double dHeight) { QList lstData = genList(); lstData[0] = nIndex; lstData[1] = dDiameter; lstData[2] = dHeight; QString strDst = packData(emTypeLib, lstData, strModel); sendData(strDst); } void CWheelNet::sendDetectResult(QString strModel, double dDiameter, double dHeight) { QList lstData = genList(); lstData[0] = dDiameter; lstData[1] = dHeight; QString strDst = packData(emTypeResult, lstData, strModel); sendData(strDst); } void CWheelNet::sendThickness() { QString strDst = packData(emTypeThickness); sendData(strDst); } void CWheelNet::sendTrig() { QString strDst = packData(emTypeTrig); sendData(strDst); } void CWheelNet::sendClearLib() { QString strDst = packData(emTypeClear); sendData(strDst); } void CWheelNet::sendLight(int nLightType, int nTimes, int nUpTimes, int nDownTimes) { QList lstData = genList(); lstData[0] = nLightType; lstData[1] = nTimes; lstData[2] = nUpTimes; lstData[3] = nDownTimes; QString strDst = packData(emTypeLight, lstData); sendData(strDst); } void CWheelNet::sendDeteStateList(int nIndex, int nIsDetect, QString strModel) { QList lstData = genList(); lstData[0] = nIndex; lstData[1] = nIsDetect; //lstData[2] = dHeight; QString strDst = packData(emTypeDetState, lstData, strModel); sendData(strDst); } void CWheelNet::sendCheckDeteStateList(int nIndex, int nIsDetect, QString strModel) { QList lstData = genList(); lstData[0] = nIndex; //lstData[1] = nIsDetect; //lstData[2] = dHeight; QString strDst = packData(emTypeCheckDete, lstData, strModel); sendData(strDst); } void CWheelNet::sendModelInitDone() { QString strDst = packData(emTypeInitDone); sendData(strDst); } void CWheelNet::sendModelNum(int nCount) { QList lstData = genList(); lstData[0] = nCount; QString strDst = packData(emTypeModelnum, lstData); sendData(strDst); } void CWheelNet::sendClearDisLibs() { QList lstData = genList(); lstData[0] = 1; QString strDst = packData(emTypeWriteDisOnlineModels, lstData); sendData(strDst); } void CWheelNet::sendDisLibs(int nIndex, QString strModel) { QList lstData = genList(); lstData[0] = 0; lstData[1] = nIndex; QString strDst = packData(emTypeWriteDisOnlineModels, lstData, strModel); sendData(strDst); } void CWheelNet::sendDisLibsDone() { QList lstData = genList(); lstData[0] = 2; QString strDst = packData(emTypeWriteDisOnlineModels, lstData); sendData(strDst); } void CWheelNet::sendCheckAllModelState()/*查询在线检测状态*/ { QString strDst = packData(emTypeReadOnlineModels); sendData(strDst); } Q_SLOT void CWheelNet::onConnect(QVariantMap vMap) { // QString m_type = vMap.value("type").toString(); QString address, port, peerName, client_State; QString strPre = m_type + "_"; address = vMap.value(strPre + "address").toString(); port = vMap.value(strPre + "port").toString(); peerName = vMap.value(strPre + "name").toString(); client_State = vMap.value(strPre + "state").toString(); bool bConnect = true; if (client_State == "Disconnect" || client_State == "close listen ") { bConnect = false; } if (m_type == "client") { QString state = vMap.value("client_state").toString(); if (state == "connect") { lpGlobalData::instance()->m_plcConnect = true; } else { lpGlobalData::instance()->m_plcConnect = false; } } QString str = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); str.append(":\n"); str.append("type=" + m_type + " " + "address:" + address + " sourcePort:" + port + " is " + client_State); str.append("\n"); QString Clientobj = genAddressPort(address, port); emit sgShow2UI(str, bConnect); emit sgClientConnect(Clientobj, bConnect); } Q_SLOT void CWheelNet::DataRecvByte(QByteArray m_data) { if (m_data.size() <= 0) { return; } while (m_data.size() != 0) { int nCmd = -1; QList lstData; QString strModel; m_data = parseData(m_data, nCmd, lstData, strModel); switch (nCmd) { case emTypePulse://心跳包应答 emit(sgPulseRev()); break; case emTypeLib://模板库应答 emit(sgLibRev(true)); break; case emTypeResult://检测结果发送应答 emit(sgResultRev()); break; case emTypeThickness: { int height = lstData.at(0); emit sgThickness((double)height); break; } case emTypeTrig: { //PLC触发相机 主动上报 qWarning() << "recv a camera triger time:" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz") << ";"; int hData = lstData.at(1); int lData = lstData.at(2); double dRatio = hData + lData * 1.0 / 1000; emit sgCameraTrig(lstData.at(0), dRatio);// 第几个 索引 } break; case emTypeClear: emit(sgClearRev(true)); break; case emTypeDetState: emit sgDeteState(true); //发送1000个勾的应答 break; case emTypeCheckDete: //查询 emit sgDeteState(true); emit(sgRecvDetectState(lstData.at(0), lstData.at(1))); break; case emTypeInitDone: break; case emTypePLCUpdate://11 在线时勾选表主动上报 emit(sgRecvDetectState(lstData.at(0), lstData.at(1))); break; case emTypeModelnum: break; case emTypeChangeOnline: emit(sgChangeOnlineState(lstData.at(0))); break; case emTypeWriteDisOnlineModels: if (lstData.at(0) == 1){ emit(sgClearDisLibASK()); } else if (lstData.at(0) == 0){ emit(sgSendDisLibASK(true)); } break; case emTypeReadOnlineModels: if (lstData.at(0) == 0) { strModel.remove("#"); emit(sgReadDetectState(lstData.at(1), strModel)); } else if (lstData.at(0) == 1){ emit(sgReadDetectStateASK()); } break; case emTypeTriger: emit(sgRecvTrigPara()); break; case emShutDown: emit(sgShutDownComputer()); default: break; } } } //发送结果通道 void CWheelNet::sendResultChannel(int nChannelValue, double dHeight, double dDiameter, QString str /*QString()*/) { QList lstData = genList(); lstData[0] = dHeight; lstData[1] = dDiameter; lstData[2] = nChannelValue; QString strDst = packData(emTypeResult, lstData, str); sendData(strDst); } /* nSignal 传感触发滤波 nCamTriger 相机触发延时 nCamPulse 相机触发脉冲宽度 nLight 光源熄灭延时 nTrigerType 传感器触发边缘 0-下降沿 1-上升沿 */ void CWheelNet::sendTrigerPara(int nSignal,int nCamTriger,int nCamPulse,int nLight,int nTrigerType,int nResHoldTime) { QList lstData = genList(); lstData[0] = nSignal; lstData[1] = nCamTriger; lstData[2] = nCamPulse; lstData[3] = nLight; lstData[4] = nTrigerType; lstData[5] = nResHoldTime; QString strDst = packData(emTypeTriger, lstData); sendData(strDst); } Q_SLOT void CWheelNet::onSendDataByType(int nType, QVariantMap nMap) { switch (nType){ case emTypePulse: sendPulse(nMap.value("time").toInt(), nMap.value("detestate").toInt(),nMap.value("onlineStatie").toInt()); break; } } Q_SLOT void CWheelNet::onDataRecv(int id, QSharedPointer pData) { DataRecvByte(*pData); }