|
|
|
|
|
#include "QPLCDevice.h"
|
|
|
|
|
|
|
|
|
|
|
|
QPLCDevice::QPLCDevice(QObject *parent)
|
|
|
|
|
|
: QObject(parent)
|
|
|
|
|
|
{
|
|
|
|
|
|
TaskFunc_Bool func2 = std::bind(&QPLCDevice::onRunTask, this);
|
|
|
|
|
|
m_pTask = new lpThread(func2);
|
|
|
|
|
|
m_pTask->setPriority(QThread::HighestPriority);
|
|
|
|
|
|
m_pTask->StartThread();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QPLCDevice::~QPLCDevice()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_pTask)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pTask->EndThread();
|
|
|
|
|
|
delete m_pTask;
|
|
|
|
|
|
m_pTask = nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onInitDevice()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!m_rawTcpServer) {
|
|
|
|
|
|
m_rawTcpServer = new lptkRawTcpServer();
|
|
|
|
|
|
connect(m_rawTcpServer, &lptkRawTcpServer::client_status_changed, this, &QPLCDevice::on_serv_status_changed);
|
|
|
|
|
|
RecvDataFunc func = std::bind(&QPLCDevice::onRecvFunc, this, std::placeholders::_1);
|
|
|
|
|
|
m_rawTcpServer->setRecvCallFunc(func);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onStartServer(int port)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_rawTcpServer) {
|
|
|
|
|
|
m_rawTcpServer->server_begin("*", port);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onStopServer()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_rawTcpServer) {
|
|
|
|
|
|
m_rawTcpServer->server_end();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onRecvFunc(QByteArray data)
|
|
|
|
|
|
{
|
|
|
|
|
|
mMtLock.lock();
|
|
|
|
|
|
m_recvData.append(data);
|
|
|
|
|
|
mMtLock.unlock();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::sendByteData(QByteArray byteData)
|
|
|
|
|
|
{
|
|
|
|
|
|
QSharedPointer<QByteArray> sendData = QSharedPointer<QByteArray>(new QByteArray);
|
|
|
|
|
|
|
|
|
|
|
|
sendData->append(byteData);
|
|
|
|
|
|
if (m_rawTcpServer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_rawTcpServer->broadcast_send_data(sendData);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Q_SLOT void QPLCDevice::on_serv_status_changed(int id, ServerStatus status)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (status) {
|
|
|
|
|
|
case TCPSERVER_ON_CLIENT_CONNECTED:
|
|
|
|
|
|
//connected_sess_list_.insert(id);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TCPSERVER_ON_CLIENT_DISCONNECTED:
|
|
|
|
|
|
//connected_sess_list_.remove(id);
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool QPLCDevice::onRunTask()
|
|
|
|
|
|
{
|
|
|
|
|
|
mMtLock.lock();//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
|
|
|
|
|
|
if (m_recvData.size() > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_recvData.startsWith("CA"))
|
|
|
|
|
|
{
|
|
|
|
|
|
int index = m_recvData.indexOf("#");
|
|
|
|
|
|
QByteArray b = m_recvData.left(index + 1);
|
|
|
|
|
|
// <20><><EFBFBD>ݰ<EFBFBD>
|
|
|
|
|
|
onParaster(b);
|
|
|
|
|
|
m_recvData.remove(0, index + 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
m_recvData.remove(0, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
mMtLock.unlock();
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onParaster(QByteArray recvData)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString strPack = QString(recvData);
|
|
|
|
|
|
QStringList lst = strPack.split(";");
|
|
|
|
|
|
if (lst.size() >= 4) {
|
|
|
|
|
|
QString header = lst[0];
|
|
|
|
|
|
QString cmd = lst[1];
|
|
|
|
|
|
QString data = lst[2];
|
|
|
|
|
|
QString trailer = lst[3];
|
|
|
|
|
|
|
|
|
|
|
|
if (cmd.toInt() == 1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
emit sgTrigerCam(data.toInt());
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (cmd.toInt() == 2)
|
|
|
|
|
|
{
|
|
|
|
|
|
onSendHeartBit();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onSendValueRlt(const ValueResult& rlt)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString sdata = QString("CA;3;%1;%2;%3;%4;#").arg(rlt.strModel).arg(rlt.angle).arg(rlt.center.x()).arg(rlt.center.y());
|
|
|
|
|
|
sendByteData(sdata.toLatin1());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onSendHeartBit()
|
|
|
|
|
|
{
|
|
|
|
|
|
QString sdata = QString("CA;2;1;#");
|
|
|
|
|
|
sendByteData(sdata.toLatin1());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void QPLCDevice::onAckTrigerCam()
|
|
|
|
|
|
{
|
|
|
|
|
|
QString sdata = QString("CA;1;1;#");
|
|
|
|
|
|
sendByteData(sdata.toLatin1());
|
|
|
|
|
|
}
|