parent
7080483fb8
commit
9b42aec1ad
32
README.md
32
README.md
|
@ -23,30 +23,31 @@ RFID硬件车号识别程序,支持识别结果上传web
|
||||||
### 配置文件
|
### 配置文件
|
||||||
```python
|
```python
|
||||||
[base]
|
[base]
|
||||||
# 串口名
|
|
||||||
com_name=COM2
|
|
||||||
# 波特率
|
|
||||||
baud=19200
|
|
||||||
# 股道名
|
# 股道名
|
||||||
track_name=2
|
track_name=2
|
||||||
# 是否有磁钢
|
|
||||||
have_magnet_steel=true
|
|
||||||
# 需要识别的磁钢顺序
|
|
||||||
magnet_steel_order=8421
|
|
||||||
# 是否上传识别结果(上传接口见interface配置)
|
# 是否上传识别结果(上传接口见interface配置)
|
||||||
up_result=true
|
up_result=true
|
||||||
# 是否使用socket接口获取来车状态
|
# 是否使用socket接口获取来车状态
|
||||||
use_socket_server=false
|
use_socket_server=false
|
||||||
|
run_model=0
|
||||||
|
|
||||||
|
[serial]
|
||||||
|
com_name=COM2
|
||||||
|
baud=19200
|
||||||
|
have_magnet_steel=true
|
||||||
|
magnet_steel_order=8421
|
||||||
|
|
||||||
[interface]
|
[interface]
|
||||||
# 接口IP
|
# 接口IP
|
||||||
http_ip=192.168.2.108
|
http_ip=192.168.2.212
|
||||||
# 接口端口
|
# 接口端口
|
||||||
http_port=20004
|
http_port=20004
|
||||||
# 获取token的接口地址
|
# 获取token的接口地址
|
||||||
token_path=/api/token_path
|
token_path=/api/token_path
|
||||||
# 上传识别结果的接口地址
|
# 上传识别结果的接口地址
|
||||||
up_result_path=/api/train-carriage/identification/rfid-save
|
up_result_path=/api/train-carriage/identification/rfid-save
|
||||||
|
# 上传报警信息的接口地址
|
||||||
|
up_warning_path=/api/blade-train/deviceInfo/save
|
||||||
# 接口用户名
|
# 接口用户名
|
||||||
username=guest_01
|
username=guest_01
|
||||||
# 接口密码
|
# 接口密码
|
||||||
|
@ -54,7 +55,18 @@ password=d55b0f642e817eea24725d2f2a31dd08
|
||||||
|
|
||||||
[socket_server]
|
[socket_server]
|
||||||
# socket 服务端IP
|
# socket 服务端IP
|
||||||
server_ip=172.18.160.1
|
server_ip=127.0.0.1
|
||||||
# socket 端口
|
# socket 端口
|
||||||
server_port=7000
|
server_port=7000
|
||||||
|
# 等待信号而延迟上传的车节数
|
||||||
|
delayed_upload=4
|
||||||
|
|
||||||
|
[device_warn]
|
||||||
|
# 最少识别车节数(低于此值会报警)
|
||||||
|
min_train_size=10
|
||||||
|
|
||||||
|
[relay]
|
||||||
|
# 转发服务监听端口
|
||||||
|
listener_port=7070
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
//
|
||||||
|
// Created by Mr.V on 2024/4/3.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "RelayRfidThread.h"
|
||||||
|
|
||||||
|
|
||||||
|
RelayRfidThread::RelayRfidThread(MQueue<QString> *queueRFID, QObject *parent) :
|
||||||
|
QThread(parent)
|
||||||
|
{
|
||||||
|
this->queueRFID_ = queueRFID;
|
||||||
|
|
||||||
|
// 配置文件读取
|
||||||
|
QString errorMessage = "";
|
||||||
|
if (!ConfigUtil::readRelayConfig(g_config_path, errorMessage, this->relayConfig_))
|
||||||
|
{
|
||||||
|
emit this->ErrorSignals(errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->server_ = new QTcpServer();
|
||||||
|
//关联客户端连接信号newConnection
|
||||||
|
connect(this->server_, &QTcpServer::newConnection, this, &RelayRfidThread::newConnection); //连接客户端
|
||||||
|
|
||||||
|
//启动服务器监听
|
||||||
|
this->server_->listen(QHostAddress::Any, this->relayConfig_.listener_port);
|
||||||
|
this->server_->setMaxPendingConnections(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelayRfidThread::newConnection()
|
||||||
|
{
|
||||||
|
|
||||||
|
QTcpSocket *socket = new QTcpSocket();
|
||||||
|
socket = this->server_->nextPendingConnection();
|
||||||
|
this->vec_sockets_.push_back(socket);
|
||||||
|
|
||||||
|
emit this->ConnectInfoSignals("客户端" + socket->peerAddress().toString() + " 建立了链接");
|
||||||
|
emit this->update_client_num(1);
|
||||||
|
|
||||||
|
connect(socket, &QTcpSocket::readyRead, this, &RelayRfidThread::receive_info);
|
||||||
|
connect(socket, &QTcpSocket::disconnected, this, &RelayRfidThread::disconnection);
|
||||||
|
// connect(socket,
|
||||||
|
// SIGNAL(stateChanged(QAbstractSocket::SocketState)),
|
||||||
|
// this,
|
||||||
|
// SLOT(socketStateChange(QAbstractSocket::SocketState)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelayRfidThread::receive_info() {
|
||||||
|
// try {
|
||||||
|
// //可以实现同时读取多个客户端发送过来的消息
|
||||||
|
// QTcpSocket *obj = (QTcpSocket*)sender();
|
||||||
|
// if (!obj->waitForReadyRead(100))
|
||||||
|
// {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// QString msg = obj->readLine(512); //obj->readAll();
|
||||||
|
//
|
||||||
|
// if (!msg.contains("matrixai"))
|
||||||
|
// emit this->InfoSignals(obj->peerAddress().toString() + "客户端: " + msg);
|
||||||
|
// } catch (const QException &e) {
|
||||||
|
// emit this->WarnSignals("Caught exception:" + QString::fromStdString(e.what()));
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RelayRfidThread::send_Info(const QString &msg)
|
||||||
|
{
|
||||||
|
for(auto & socket : vec_sockets_)
|
||||||
|
{
|
||||||
|
if (socket->state() == QTcpSocket::ConnectedState)
|
||||||
|
{
|
||||||
|
socket->write(msg.toUtf8().data());
|
||||||
|
if (!socket->waitForBytesWritten(1000)) { // 等待1000毫秒
|
||||||
|
emit this->WarnSignals("向" + socket->peerAddress().toString() + "转发失败:" + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
emit this->RfidInfoSignals(msg);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelayRfidThread::disconnection()
|
||||||
|
{
|
||||||
|
QTcpSocket *obj = (QTcpSocket*)sender();//掉线对象
|
||||||
|
emit this->ConnectInfoSignals("客户端" + obj->peerAddress().toString() + " 断开链接");
|
||||||
|
emit this->update_client_num(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelayRfidThread::socketStateChange(QAbstractSocket::SocketState state)
|
||||||
|
{
|
||||||
|
QTcpSocket *obj = (QTcpSocket*)sender();
|
||||||
|
switch (state) {
|
||||||
|
case QAbstractSocket::UnconnectedState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":UnconnectedState");
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::ConnectedState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":ConnectedState");
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::ConnectingState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":ConnectingState");
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::HostLookupState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":HostLookupState");
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::ClosingState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":ClosingState");
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::ListeningState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":ListeningState");
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::BoundState:
|
||||||
|
emit this->ConnectInfoSignals(obj->peerAddress().toString() + ":BoundState");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[[noreturn]] void RelayRfidThread::run()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
// emit this->InfoSignals("开启监听->" + QString::number(this->relayConfig_.listener_port));
|
||||||
|
if (!queueRFID_->isEmpty())
|
||||||
|
{
|
||||||
|
QString msg = queueRFID_->getTop();
|
||||||
|
this->send_Info(msg);
|
||||||
|
queueRFID_->pop();
|
||||||
|
QThread::msleep(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QThread::msleep(20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
//
|
||||||
|
// Created by Mr.V on 2024/4/3.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef TRAIN_RFID_RELAYRFIDTHREAD_H
|
||||||
|
#define TRAIN_RFID_RELAYRFIDTHREAD_H
|
||||||
|
|
||||||
|
#include <QThread>
|
||||||
|
#include "common.h"
|
||||||
|
#include "MQueue.h"
|
||||||
|
#include "httplib.h"
|
||||||
|
#include "json.h"
|
||||||
|
#include "ConfigUtil.h"
|
||||||
|
|
||||||
|
using namespace ai_matrix;
|
||||||
|
|
||||||
|
class RelayRfidThread : public QThread {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
~RelayRfidThread() {};
|
||||||
|
|
||||||
|
RelayRfidThread(MQueue<QString> *queueRFID, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
[[noreturn]] void run() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
MQueue<QString> *queueRFID_ = nullptr;
|
||||||
|
ai_matrix::RelayConfig relayConfig_{};
|
||||||
|
|
||||||
|
QTcpServer *server_;
|
||||||
|
QVector<QTcpSocket *> vec_sockets_;
|
||||||
|
|
||||||
|
bool send_Info(const QString &msg);
|
||||||
|
|
||||||
|
bool getToken();
|
||||||
|
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
void DebugSignals(const QString &info);
|
||||||
|
|
||||||
|
void InfoSignals(const QString &info);
|
||||||
|
|
||||||
|
void WarnSignals(const QString &info);
|
||||||
|
|
||||||
|
void ErrorSignals(const QString &info);
|
||||||
|
|
||||||
|
void ConnectInfoSignals(const QString &info);
|
||||||
|
|
||||||
|
void update_client_num(int num);
|
||||||
|
|
||||||
|
void RfidInfoSignals(const QString &info);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void newConnection();
|
||||||
|
|
||||||
|
void receive_info();
|
||||||
|
|
||||||
|
void disconnection();
|
||||||
|
|
||||||
|
void socketStateChange(QAbstractSocket::SocketState state);
|
||||||
|
};
|
||||||
|
#endif //TRAIN_RFID_RELAYRFIDTHREAD_H
|
Loading…
Reference in New Issue