Compare commits
No commits in common. "main" and "V3.0" have entirely different histories.
32
README.md
32
README.md
|
|
@ -23,31 +23,30 @@ 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.212
|
http_ip=192.168.2.108
|
||||||
# 接口端口
|
# 接口端口
|
||||||
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
|
||||||
# 接口密码
|
# 接口密码
|
||||||
|
|
@ -55,18 +54,7 @@ password=d55b0f642e817eea24725d2f2a31dd08
|
||||||
|
|
||||||
[socket_server]
|
[socket_server]
|
||||||
# socket 服务端IP
|
# socket 服务端IP
|
||||||
server_ip=127.0.0.1
|
server_ip=172.18.160.1
|
||||||
# socket 端口
|
# socket 端口
|
||||||
server_port=7000
|
server_port=7000
|
||||||
# 等待信号而延迟上传的车节数
|
|
||||||
delayed_upload=4
|
|
||||||
|
|
||||||
[device_warn]
|
|
||||||
# 最少识别车节数(低于此值会报警)
|
|
||||||
min_train_size=10
|
|
||||||
|
|
||||||
[relay]
|
|
||||||
# 转发服务监听端口
|
|
||||||
listener_port=7070
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -1,135 +0,0 @@
|
||||||
//
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
||||||
//
|
|
||||||
// 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