You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
517 lines
13 KiB
C++
517 lines
13 KiB
C++
#include "WheelNet.h"
|
|
#include "InfoFile.h"
|
|
#include "..\NetWheel\net4wheel_global.h"
|
|
#include "QZkJsonParser.h"
|
|
#include <QLibrary>
|
|
#include <QHostAddress>
|
|
#include <QDebug>
|
|
#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)
|
|
{
|
|
connect(this, SIGNAL(sgSendData(QSharedPointer<QByteArray>)), this, SLOT(onSendData(QSharedPointer<QByteArray>)));
|
|
|
|
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<QByteArray>)), this, SLOT(onDataRecv(int, QSharedPointer<QByteArray>)));
|
|
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);
|
|
// }
|
|
|
|
QSharedPointer<QByteArray> pData = QSharedPointer<QByteArray>(new QByteArray);
|
|
pData->append(strData);
|
|
emit sgSendData(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<int> 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<int> 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<int> 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<int> 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<int> 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<int> 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<int> lstData = genList();
|
|
lstData[0] = nCount;
|
|
QString strDst = packData(emTypeModelnum, lstData);
|
|
sendData(strDst);
|
|
}
|
|
|
|
void CWheelNet::sendClearDisLibs()
|
|
{
|
|
QList<int> lstData = genList();
|
|
lstData[0] = 1;
|
|
QString strDst = packData(emTypeWriteDisOnlineModels, lstData);
|
|
sendData(strDst);
|
|
}
|
|
void CWheelNet::sendDisLibs(int nIndex, QString strModel)
|
|
{
|
|
QList<int> lstData = genList();
|
|
lstData[0] = 0;
|
|
lstData[1] = nIndex;
|
|
QString strDst = packData(emTypeWriteDisOnlineModels, lstData, strModel);
|
|
sendData(strDst);
|
|
}
|
|
|
|
void CWheelNet::sendDisLibsDone()
|
|
{
|
|
QList<int> 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<int> 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<int> 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<int> 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<QByteArray> pData)
|
|
{
|
|
DataRecvByte(*pData);
|
|
}
|
|
|
|
Q_SLOT void CWheelNet::onSendData(QSharedPointer<QByteArray> pData)
|
|
{
|
|
if (m_pTcpServer)
|
|
{
|
|
m_pTcpServer->broadcast_send_data(pData);
|
|
}
|
|
}
|