|
|
#include "lpSerialStation.h"
|
|
|
|
|
|
lpSerialStation::lpSerialStation()
|
|
|
{
|
|
|
qRegisterMetaType<SerialErrorType>("SerialErrorType");
|
|
|
m_pobjThread = new QThread;
|
|
|
moveToThread(m_pobjThread);
|
|
|
|
|
|
connect(m_pobjThread, &QThread::started, this, &lpSerialStation::onOpen);
|
|
|
connect(m_pobjThread, &QThread::finished,
|
|
|
this, &QObject::deleteLater);
|
|
|
}
|
|
|
|
|
|
lpSerialStation::~lpSerialStation()
|
|
|
{
|
|
|
closeComs();
|
|
|
if (m_pobjThread)
|
|
|
{
|
|
|
m_pobjThread->quit();
|
|
|
m_pobjThread->wait();
|
|
|
m_pobjThread = nullptr;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bool lpSerialStation::loadParameters(const QString& filePath)
|
|
|
{
|
|
|
int error;
|
|
|
QJsonObject objJson = QZkJsonParser::ReadJsonObject(filePath, &error);
|
|
|
if (!objJson.empty())
|
|
|
{
|
|
|
QJsonArray jArray = objJson.value("leaper").toArray();
|
|
|
for (int i = 0; i < jArray.size(); ++i)
|
|
|
{
|
|
|
QJsonObject COMObj = jArray[i].toObject();
|
|
|
SerialParam sp;
|
|
|
sp.port_name_ = COMObj.value("port_name").toString();
|
|
|
sp.baud_ = COMObj.value("BAUD").toInt();
|
|
|
sp.auto_connect_ = COMObj.value("auto_connect").toBool();
|
|
|
sp.modbus_type_ = SERIAL_LEAPER;
|
|
|
m_commDeviceMap.insert(COMObj.value("device_name").toString(), sp);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
qDebug() << "please check the comSetting file, err: " << error;
|
|
|
return false;
|
|
|
}
|
|
|
qDebug() << "SensorsCom load param successed";
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
void lpSerialStation::openComs()
|
|
|
{
|
|
|
m_pobjThread->start();
|
|
|
}
|
|
|
|
|
|
void lpSerialStation::closeComs()
|
|
|
{
|
|
|
for (auto iter = m_commDeviceMap.begin(); iter != m_commDeviceMap.end(); iter++)
|
|
|
{
|
|
|
lp_serial_manager::instance()->close(iter.value().port_name_);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void lpSerialStation::onControlSideLight(int cmdData)
|
|
|
{
|
|
|
QSharedPointer<LpSerialFrame> byteArr_ptr = QSharedPointer<LpSerialFrame>(new LpSerialFrame);
|
|
|
byteArr_ptr->cmd = LP_SIDELIGHT_SWITCH;
|
|
|
byteArr_ptr->data2 = cmdData;
|
|
|
|
|
|
lp_serial_manager::instance()->on_data_send(m_commDeviceMap[SINGLECHIP_COM].port_name_, byteArr_ptr);
|
|
|
}
|
|
|
|
|
|
Q_SLOT void lpSerialStation::onStartEmptyPlaceCheck(QString streetName)
|
|
|
{
|
|
|
m_bStartEmptyCheck = true;
|
|
|
m_strStreetName = streetName;
|
|
|
m_queueCodeLeft.clear();
|
|
|
m_queueCodeRight.clear();
|
|
|
m_mapEmptyLeft.clear();
|
|
|
m_mapEmptyRight.clear();
|
|
|
}
|
|
|
|
|
|
Q_SLOT void lpSerialStation::onStopEmptyPlaceCheck()
|
|
|
{
|
|
|
m_bStartEmptyCheck = false;
|
|
|
emit sgNewEmptyCheckResults(m_mapEmptyLeft);
|
|
|
QThread::msleep(5);
|
|
|
emit sgNewEmptyCheckResults(m_mapEmptyRight);
|
|
|
}
|
|
|
|
|
|
Q_SLOT void lpSerialStation::onNewCodeScanResults(int sdID, QSharedPointer<QByteArray> data_ptr_)
|
|
|
{
|
|
|
if (!m_bStartEmptyCheck)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//CodeScanResults csr;
|
|
|
//csr.sdID = sdID;
|
|
|
//csr.ResData = *data_ptr_;
|
|
|
//m_CodeScanResQ.enqueue(csr);
|
|
|
QString codeStr = QString(*data_ptr_).trimmed().mid(1);
|
|
|
QString codeStrNew = codeStr;
|
|
|
if (codeStrNew.length() == 10)
|
|
|
{
|
|
|
QString strCol = codeStrNew.mid(1, 3); //col 1~62
|
|
|
QString strRow = codeStrNew.mid(4, 2);// row 1~9
|
|
|
int nCol = strCol.toInt(0);
|
|
|
int nRow = strRow.toInt(0);
|
|
|
if (nCol < 1 || nCol > 62 || nRow < 1 || nRow > 9)
|
|
|
{
|
|
|
qWarning() << "col or row overrun!";
|
|
|
return;
|
|
|
}
|
|
|
if (m_strStreetName == "6")
|
|
|
{
|
|
|
if (nRow == 1 || nRow == 2)
|
|
|
{
|
|
|
QString strColNew = QString("%1").arg(nCol + 1, 3, 10, QLatin1Char('0'));
|
|
|
codeStrNew.replace(1, 3, strColNew);
|
|
|
}
|
|
|
}
|
|
|
int streetSn = m_strStreetName.toInt();
|
|
|
QString streetNameTemp = QString("%1").arg(streetSn, 2, 10, QLatin1Char('0'));
|
|
|
if (sdID == eSideID::em_RIGHT)
|
|
|
{
|
|
|
QString strCodeRightOut = "UL" + streetNameTemp + codeStrNew;
|
|
|
m_queueCodeRight.enqueue(strCodeRightOut);
|
|
|
QSharedPointer<LpSerialFrame> data_ptr = QSharedPointer<LpSerialFrame>(new LpSerialFrame);
|
|
|
int streetNum = m_strStreetName.toInt();
|
|
|
data_ptr->cmd = 0x84;
|
|
|
if (streetNum <= 6 && streetNum >= 1 || streetNum == 10)
|
|
|
{
|
|
|
data_ptr->data1 = 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
data_ptr->data1 = 1;
|
|
|
data_ptr->data3 = 1;
|
|
|
}
|
|
|
lp_serial_manager::instance()->on_data_send(m_commDeviceMap[SINGLECHIP_COM].port_name_, data_ptr);//leaperЭ<72><D0AD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD>ͷ<EFBFBD>ʽ1
|
|
|
}
|
|
|
else if (sdID == eSideID::em_LEFT)
|
|
|
{
|
|
|
QString strCodeLeftOut = "UL" + streetNameTemp + codeStrNew;
|
|
|
m_queueCodeLeft.enqueue(strCodeLeftOut);
|
|
|
QSharedPointer<LpSerialFrame> data_ptr = QSharedPointer<LpSerialFrame>(new LpSerialFrame);
|
|
|
int streetNum = m_strStreetName.toInt();
|
|
|
data_ptr->cmd = 0x84;
|
|
|
if (streetNum <= 7 && streetNum >= 1)
|
|
|
{
|
|
|
data_ptr->data2 = 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
data_ptr->data2 = 1;
|
|
|
data_ptr->data4 = 1;
|
|
|
}
|
|
|
lp_serial_manager::instance()->on_data_send(m_commDeviceMap[SINGLECHIP_COM].port_name_, data_ptr);//leaperЭ<72><D0AD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD>ͷ<EFBFBD>ʽ1
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Q_SLOT void lpSerialStation::onOpen()
|
|
|
{
|
|
|
for (auto iter = m_commDeviceMap.begin(); iter != m_commDeviceMap.end(); iter++)
|
|
|
{
|
|
|
if (lp_serial_manager::instance()->open(iter.value()) == -1)
|
|
|
{
|
|
|
qDebug() << "open " << iter.value().port_name_ << " fail.";
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
connect(lp_serial_manager::instance(), SIGNAL(signal_data_recv(const QString&, QSharedPointer<LpSerialFrame>)),
|
|
|
this, SLOT(onDataReceive(const QString&, QSharedPointer<LpSerialFrame>)));
|
|
|
connect(lp_serial_manager::instance(), SIGNAL(signal_state_changed(const QString&, SerialErrorType)),
|
|
|
this, SLOT(onStateChanged(const QString&, SerialErrorType)));//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>״̬
|
|
|
}
|
|
|
|
|
|
Q_SLOT void lpSerialStation::onDataReceive(const QString& sn, QSharedPointer<LpSerialFrame> data_ptr_)
|
|
|
{
|
|
|
qDebug() << "monitor receive data";
|
|
|
|
|
|
// for monitor trigger
|
|
|
if (data_ptr_->cmd == 0x83)
|
|
|
{
|
|
|
qDebug() << "i rsv data 0:" << data_ptr_->data1;
|
|
|
qDebug() << "i rsv data 1:" << data_ptr_->data2;
|
|
|
if (data_ptr_->data1 == StockCheckTrigger::emMonitorTriggerStart)
|
|
|
{
|
|
|
emit sgMonitorSensorTriggerStart(em_RIGHT);
|
|
|
qDebug() << "i start right trigger";
|
|
|
|
|
|
}
|
|
|
else if (data_ptr_->data1 == StockCheckTrigger::emMonitorTriggerStop)
|
|
|
{
|
|
|
emit sgMonitorSensorTriggerStop(em_RIGHT);
|
|
|
qDebug() << "i stop right trigger";
|
|
|
}
|
|
|
|
|
|
if (data_ptr_->data2 == StockCheckTrigger::emMonitorTriggerStart)
|
|
|
{
|
|
|
emit sgMonitorSensorTriggerStart(em_LEFT);
|
|
|
qDebug() << "i start left trigger";
|
|
|
}
|
|
|
else if (data_ptr_->data2 == StockCheckTrigger::emMonitorTriggerStop)
|
|
|
{
|
|
|
emit sgMonitorSensorTriggerStop(em_LEFT);
|
|
|
qDebug() << "i stop left trigger";
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
else if (data_ptr_->cmd == 0x84)
|
|
|
{
|
|
|
quint16 data1 = data_ptr_->data1;
|
|
|
quint16 data2 = data_ptr_->data2;
|
|
|
quint16 data3 = data_ptr_->data3;
|
|
|
quint16 data4 = data_ptr_->data4;
|
|
|
if (data1 != 0) //<2F>Ҳ<EFBFBD>dz<EFBFBD><C7B3>λ
|
|
|
{
|
|
|
int empty;
|
|
|
empty = data1 == EmptyResult::emExist ? 1 : 0;
|
|
|
if (m_queueCodeRight.size() <= 0)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
QString strCodeRightOut = m_queueCodeRight.dequeue();
|
|
|
qDebug() << "right out code: " << strCodeRightOut << " empty: " << empty;
|
|
|
m_mapEmptyRight.insert(strCodeRightOut, empty);
|
|
|
if (data3 != 0) //<2F>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>λ
|
|
|
{
|
|
|
if (m_strStreetName.toInt() != 10)
|
|
|
{
|
|
|
empty = data3 == EmptyResult::emExist ? 1 : 0;
|
|
|
QString strCodeRightIn = strCodeRightOut;
|
|
|
strCodeRightIn.replace(11, 1, "2");
|
|
|
qDebug() << "right in code: " << strCodeRightIn << " empty: " << empty;
|
|
|
m_mapEmptyRight.insert(strCodeRightIn, empty);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (data2 != 0) //<2F><><EFBFBD><EFBFBD>dz<EFBFBD><C7B3>λ
|
|
|
{
|
|
|
int empty;
|
|
|
empty = data2 == EmptyResult::emExist ? 1 : 0;
|
|
|
if (m_queueCodeLeft.size() <= 0)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
QString strCodeLeftOut = m_queueCodeLeft.dequeue();
|
|
|
qDebug() << "left out code: " << strCodeLeftOut << " empty: " << empty;
|
|
|
m_mapEmptyLeft.insert(strCodeLeftOut, empty);
|
|
|
if (data4 != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
|
|
{
|
|
|
if (m_strStreetName.toInt() != 7)
|
|
|
{
|
|
|
empty = data4 == EmptyResult::emExist ? 1 : 0;
|
|
|
QString strCodeLeftIn = strCodeLeftOut;
|
|
|
strCodeLeftIn.replace(11, 1, "2");
|
|
|
qDebug() << "left in code: " << strCodeLeftIn << " empty: " << empty;
|
|
|
m_mapEmptyLeft.insert(strCodeLeftIn, empty);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Q_SLOT void lpSerialStation::onStateChanged(const QString& sn, SerialErrorType err)
|
|
|
{
|
|
|
/*
|
|
|
<09><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>״̬
|
|
|
*/
|
|
|
QString strMsg;
|
|
|
if (err == OpenSuccess)
|
|
|
{
|
|
|
strMsg = QString("%1 open success!").arg(sn);
|
|
|
qDebug() << strMsg;
|
|
|
}
|
|
|
else if (err == DeviceNotFoundError)
|
|
|
{
|
|
|
strMsg = QString("%1 not found! open failed.").arg(sn);
|
|
|
qDebug() << strMsg;
|
|
|
}
|
|
|
else if (err == OpenError)
|
|
|
{
|
|
|
strMsg = QString("%1 open failed.").arg(sn);
|
|
|
qDebug() << strMsg;
|
|
|
}
|
|
|
else if (err == CloseSuccess)
|
|
|
{
|
|
|
strMsg = QString("%1 close success.").arg(sn);
|
|
|
qDebug() << strMsg;
|
|
|
}
|
|
|
else if (err == CloseError)
|
|
|
{
|
|
|
strMsg = QString("%1 Not found! close failed.").arg(sn);
|
|
|
qDebug() << strMsg;
|
|
|
}
|
|
|
} |