144 lines
3.9 KiB
C++
144 lines
3.9 KiB
C++
#include "gd_plc.h"
|
|
|
|
|
|
GD_PLC::GD_PLC(QObject *parent , QString exePath) :
|
|
QObject(parent),exePath(exePath)
|
|
{
|
|
my_thread = new QThread();
|
|
|
|
ClearSocket = NULL;
|
|
ClearSocket = new QTcpSocket();//分配空间,指定父对象
|
|
|
|
IsPLCConnectedSuccess = false;
|
|
IsWorking = false;
|
|
|
|
IsFirstRec=true;
|
|
|
|
connect(ClearSocket, SIGNAL(readyRead()), //接受来自组件的信息
|
|
this, SLOT(HandleDate()));
|
|
|
|
connect(this, SIGNAL(ThreadSignal_TCP_Connect()), //TCP连接
|
|
this, SLOT(ThreadSlots_TCP_Connect()));
|
|
|
|
connect(this, SIGNAL(ThreadSignal_TCP_SendDate(QString )), //TCP连接
|
|
this, SLOT(SendDate(QString )));
|
|
|
|
|
|
this->moveToThread(my_thread);
|
|
ClearSocket->moveToThread(my_thread);
|
|
my_thread->start(); //启动线程
|
|
|
|
//QProcess::startDetached("C:/Users/Clear/Desktop/clear_hik_cam_win/build-clear_hik_cam_win-Desktop_Qt_5_14_2_MinGW_64_bit-Release/release/clear_hik_cam_win.exe",QStringList());
|
|
QStringList strList = exePath.split("/");
|
|
strList.removeLast();
|
|
QString workingDirectory = strList.join("/");
|
|
QProcess::startDetached(exePath,QStringList(),workingDirectory);
|
|
|
|
emit ThreadSignal_TCP_Connect();
|
|
|
|
}
|
|
|
|
|
|
GD_PLC::~GD_PLC()
|
|
{
|
|
ClearSocket->disconnectFromHost();
|
|
ClearSocket->close();//这里释放连接,前面connect的时候会建立连接
|
|
}
|
|
|
|
void GD_PLC::HandleDate()
|
|
{
|
|
|
|
QString data = ClearSocket->readAll();
|
|
QJsonParseError parseJsonErr;
|
|
QJsonDocument document = QJsonDocument::fromJson(data.toUtf8(),&parseJsonErr);
|
|
if(!(parseJsonErr.error == QJsonParseError::NoError)) return;
|
|
QJsonObject jsonObject = document.object();
|
|
|
|
if(data.contains("IsPLCConnectedSuccess"))//状态信息
|
|
{
|
|
if(IsFirstRec)//第一次收到信息
|
|
{
|
|
IsFirstRec = false;
|
|
this->CommonFunction(4);//隐藏UI
|
|
UpdateStatus(IsPLCConnectedSuccess,IsWorking);//向主线程更新状态
|
|
}
|
|
|
|
if((IsPLCConnectedSuccess!=jsonObject["IsPLCConnectedSuccess"].toBool()) ||
|
|
(IsWorking!=jsonObject["IsWorking"].toBool()) )
|
|
//状态信息有变动
|
|
{
|
|
IsPLCConnectedSuccess = jsonObject["IsPLCConnectedSuccess"].toBool();
|
|
IsWorking = jsonObject["IsWorking"].toBool();
|
|
UpdateStatus(IsPLCConnectedSuccess,IsWorking);//向主线程更新状态
|
|
}
|
|
}
|
|
|
|
else if(data.contains("key_point_cmd"))//VLP关键点
|
|
{
|
|
QString cmd = jsonObject["key_point_cmd"].toString();
|
|
emit key_point_cmd(cmd);
|
|
}
|
|
|
|
else if(data.contains("plc_task_state"))//PLC 运行任务状态
|
|
{
|
|
|
|
QString state = jsonObject["plc_task_state"].toString();
|
|
emit Log("PLC",state);
|
|
|
|
if(state.contains("finished"))
|
|
{
|
|
emit plc_task_state("finished");
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void GD_PLC::SendDate(QString date)
|
|
{
|
|
mutex.lock();
|
|
QByteArray SendBytes =date.toLatin1();
|
|
ClearSocket->write(SendBytes);
|
|
mutex.unlock();
|
|
}
|
|
|
|
void GD_PLC::CommonFunction(int FunctionCode)// 4隐藏 5显示 6重启组件
|
|
{
|
|
QString CMD;
|
|
switch (FunctionCode)
|
|
{
|
|
// case 1:
|
|
// CMD = "{ \"Connet\":true }";break;
|
|
// case 2:
|
|
// CMD = "{ \"Connet\":false }";break;
|
|
// case 3:
|
|
// CMD = "{ \"Calibrate\":true }";break;
|
|
case 4:
|
|
CMD = "{\"UI\":\"hide\"}";
|
|
IsHide =true;
|
|
break;
|
|
case 5:
|
|
CMD = "{\"UI\":\"show\"}";
|
|
IsHide =false;
|
|
break;
|
|
case 6:
|
|
CMD = "{\"UI\":\"reboot\"}";break;
|
|
default :
|
|
break;
|
|
}
|
|
if(ClearSocket->isOpen())
|
|
{
|
|
emit ThreadSignal_TCP_SendDate(CMD);
|
|
}
|
|
}
|
|
|
|
|
|
void GD_PLC::Run_CMD(int cmd)//-1 停止 1-运行 0-无操作
|
|
{
|
|
QString CMD ="{\"Run\":" ;
|
|
CMD = CMD + QString::number(cmd);
|
|
CMD = CMD +"}";
|
|
emit ThreadSignal_TCP_SendDate(CMD);
|
|
|
|
}
|