Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
|
9b42aec1ad |
32
README.md
32
README.md
|
@ -23,30 +23,31 @@ RFID硬件车号识别程序,支持识别结果上传web
|
|||
### 配置文件
|
||||
```python
|
||||
[base]
|
||||
# 串口名
|
||||
com_name=COM2
|
||||
# 波特率
|
||||
baud=19200
|
||||
# 股道名
|
||||
track_name=2
|
||||
# 是否有磁钢
|
||||
have_magnet_steel=true
|
||||
# 需要识别的磁钢顺序
|
||||
magnet_steel_order=8421
|
||||
# 是否上传识别结果(上传接口见interface配置)
|
||||
up_result=true
|
||||
# 是否使用socket接口获取来车状态
|
||||
use_socket_server=false
|
||||
run_model=0
|
||||
|
||||
[serial]
|
||||
com_name=COM2
|
||||
baud=19200
|
||||
have_magnet_steel=true
|
||||
magnet_steel_order=8421
|
||||
|
||||
[interface]
|
||||
# 接口IP
|
||||
http_ip=192.168.2.108
|
||||
http_ip=192.168.2.212
|
||||
# 接口端口
|
||||
http_port=20004
|
||||
# 获取token的接口地址
|
||||
token_path=/api/token_path
|
||||
# 上传识别结果的接口地址
|
||||
up_result_path=/api/train-carriage/identification/rfid-save
|
||||
# 上传报警信息的接口地址
|
||||
up_warning_path=/api/blade-train/deviceInfo/save
|
||||
# 接口用户名
|
||||
username=guest_01
|
||||
# 接口密码
|
||||
|
@ -54,7 +55,18 @@ password=d55b0f642e817eea24725d2f2a31dd08
|
|||
|
||||
[socket_server]
|
||||
# socket 服务端IP
|
||||
server_ip=172.18.160.1
|
||||
server_ip=127.0.0.1
|
||||
# socket 端口
|
||||
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