调试测量服务修改

This commit is contained in:
徐海 2026-04-07 19:16:35 +08:00
parent e3b44605b3
commit eb6f1f946c
6 changed files with 95 additions and 79 deletions

View File

@ -10,12 +10,12 @@ typedef int* DeviceHandler;
static sDeviceList s_device_list; static sDeviceList s_device_list;
static DeviceHandler GetDeviceHandler(const QString &device_guid) { static DeviceHandler GetDeviceHandler(const QString &device_guid) {
DeviceHandler device_handler = nullptr; DeviceHandler device_handler = DeviceHandler(0x01);
for (int i = 0; i < s_device_list.totalNum; i++) { for (int i = 0; i < s_device_list.totalNum; i++) {
sDeviceInfo di; sDeviceInfo di;
int ret = GetDeviceInfo(s_device_list.pHandle[i], &di,-1,-1); int ret = GetDeviceInfo(s_device_list.pHandle[i], &di,-1,-1);
if (ret == 0) { if (ret == 0) {
if (QString(di.GUID) == device_guid) { if (QString(di.MacAddr) == device_guid) {
device_handler = s_device_list.pHandle[i]; device_handler = s_device_list.pHandle[i];
} }
} else { } else {
@ -43,7 +43,6 @@ MeasureDeviceController *MeasureDeviceController::Instance()
MeasureDeviceController::~MeasureDeviceController() MeasureDeviceController::~MeasureDeviceController()
{ {
} }
void MeasureDeviceController::InitFindMeasureDevice() void MeasureDeviceController::InitFindMeasureDevice()
@ -69,6 +68,8 @@ void MeasureDeviceController::onFindDeviceFinishedCallback(int ret, sDeviceList*
if ( s_device_list.totalNum == 0 ) { if ( s_device_list.totalNum == 0 ) {
init_ok &= false; init_ok &= false;
QLOG_WARN() << QStringLiteral(u"未找到测量设备!"); QLOG_WARN() << QStringLiteral(u"未找到测量设备!");
} else {
QLOG_DEBUG() << s_device_list.totalNum << GetMeasureDeviceList();
} }
} else { } else {
init_ok &= false; init_ok &= false;
@ -87,9 +88,9 @@ QStringList MeasureDeviceController::GetMeasureDeviceList()
QStringList device_guid_list; QStringList device_guid_list;
for (int i = 0; i < s_device_list.totalNum; i++) { for (int i = 0; i < s_device_list.totalNum; i++) {
sDeviceInfo di; sDeviceInfo di;
int ret = GetDeviceInfo(s_device_list.pHandle[i], &di,-1,-1); int ret = GetDeviceInfo(s_device_list.pHandle[i], &di, 0, 1);
if (ret == 0) { if (ret == 0) {
device_guid_list.append(QString(di.GUID)); device_guid_list.append(QString(di.MacAddr));
} else { } else {
QLOG_ERROR() << QStringLiteral(u"处理查找测量设备结果信息失败: GetDeviceInfo调用失败索引%1,[返回代码%2]").arg(i).arg(ret); QLOG_ERROR() << QStringLiteral(u"处理查找测量设备结果信息失败: GetDeviceInfo调用失败索引%1,[返回代码%2]").arg(i).arg(ret);
} }

View File

@ -1,5 +1,6 @@
#include "MeasureServer.h" #include "MeasureServer.h"
#include "MeasureTask.h" #include "MeasureTask.h"
#include "QsLogManage.h"
MeasureServer::MeasureServer(QObject *parent) MeasureServer::MeasureServer(QObject *parent)
: QTcpServer(parent) : QTcpServer(parent)
@ -8,7 +9,7 @@ MeasureServer::MeasureServer(QObject *parent)
bool MeasureServer::Start(quint16 port) bool MeasureServer::Start(quint16 port)
{ {
return this->listen(QHostAddress::Any, port); return this->listen(QHostAddress::LocalHost, port);
} }
void MeasureServer::Stop() void MeasureServer::Stop()
@ -18,8 +19,9 @@ void MeasureServer::Stop()
void MeasureServer::incomingConnection(qintptr socketDescriptor) void MeasureServer::incomingConnection(qintptr socketDescriptor)
{ {
MeasureTask * measure_thread = new MeasureTask(socketDescriptor); QLOG_INFO() << QStringLiteral(u"接收到新的请求连接") << socketDescriptor;
MeasureTask * measure_thread = new MeasureTask(socketDescriptor, this);
connect(measure_thread, &MeasureTask::finished, measure_thread, &MeasureTask::deleteLater); connect(measure_thread, &MeasureTask::finished, measure_thread, &MeasureTask::deleteLater);
_measure_thread->start(); measure_thread->start();
} }

View File

@ -12,14 +12,11 @@ class MeasureServer : public QTcpServer
public: public:
MeasureServer(QObject *parent = nullptr); MeasureServer(QObject *parent = nullptr);
bool Start(quint16 port = 96966); bool Start(quint16 port = 9999);
void Stop(); void Stop();
protected: protected:
void incomingConnection(qintptr socketDescriptor) override; void incomingConnection(qintptr socketDescriptor) override;
private:
MeasureTask* _measure_thread = nullptr;
}; };

View File

@ -5,7 +5,9 @@
#include <QJsonObject> #include <QJsonObject>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QFileInfo> #include <QFileInfo>
#include "QsLogManage.h"
#include <QDebug>
#include <QString>
MeasureTask::MeasureTask(int socketDescriptor, QObject *parent) MeasureTask::MeasureTask(int socketDescriptor, QObject *parent)
: QThread(parent), socketDescriptor(socketDescriptor) : QThread(parent), socketDescriptor(socketDescriptor)
@ -17,44 +19,52 @@ void MeasureTask::run()
QTcpSocket tcp_socket; QTcpSocket tcp_socket;
if (!tcp_socket.setSocketDescriptor(socketDescriptor)) { if (!tcp_socket.setSocketDescriptor(socketDescriptor)) {
emit errorOccurred(tcp_socket.errorString()); emit errorOccurred(tcp_socket.errorString());
QLOG_DEBUG() << tcp_socket.errorString();
return; return;
} }
QByteArray buffer; tcp_socket.waitForReadyRead(500);
while (tcp_socket.waitForReadyRead(500)) { QByteArray buffer = tcp_socket.readAll();
buffer.append(tcp_socket.readAll());
}
if ( buffer.size() ) { if ( buffer.size() ) {
QDataStream requst_data_stream(buffer); QDataStream requst_data_stream(buffer);
QString cmd_type, device_guid, cmd_data; QString cmd_type, device_guid, cmd_data;
requst_data_stream >> cmd_type >> device_guid; requst_data_stream >> cmd_type >> device_guid;
if ( cmd_type == "START" ) { if ( cmd_type == "START" ) {
requst_data_stream >> cmd_data; requst_data_stream >> cmd_data;
QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid << cmd_data;
processStartMeasureCmd(&tcp_socket, device_guid, cmd_data); processStartMeasureCmd(&tcp_socket, device_guid, cmd_data);
} else if (cmd_type == "STOP") { } else if (cmd_type == "STOP") {
QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid;
processStopMeasureCmd(&tcp_socket, device_guid); processStopMeasureCmd(&tcp_socket, device_guid);
} else if (cmd_type == "SET") { } else if (cmd_type == "SET") {
requst_data_stream >> cmd_data; requst_data_stream >> cmd_data;
QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid << cmd_data;
processSetDeviceMeasureConfigParamsCmd(&tcp_socket, device_guid, cmd_data); processSetDeviceMeasureConfigParamsCmd(&tcp_socket, device_guid, cmd_data);
} else if (cmd_type == "CLEAR") { } else if (cmd_type == "CLEAR") {
QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid;
processClearDataCmd(&tcp_socket, device_guid); processClearDataCmd(&tcp_socket, device_guid);
} else if (cmd_type == "DEVICE") { } else if (cmd_type == "DEVICE") {
QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid;
processGetMeasureDeviceListCmd(&tcp_socket); processGetMeasureDeviceListCmd(&tcp_socket);
} else { } else {
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"未知请求"); replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"未知请求");
tcp_socket.write(replay_data); tcp_socket.write(replay_data);
tcp_socket.flush(); tcp_socket.flush();
QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
} }
} else { } else {
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"未知请求"); replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"请求信息空异常");
tcp_socket.write(replay_data); tcp_socket.write(replay_data);
tcp_socket.flush(); tcp_socket.flush();
QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
} }
tcp_socket.disconnectFromHost(); tcp_socket.disconnectFromHost();
if (tcp_socket.state() != QTcpSocket::UnconnectedState) {
tcp_socket.waitForDisconnected(1000); tcp_socket.waitForDisconnected(1000);
}
} }
void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &device_guid, const QString &cmd_data) void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &device_guid, const QString &cmd_data)
@ -75,7 +85,7 @@ void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &devi
if (channel_config_list.isEmpty()) { if (channel_config_list.isEmpty()) {
return; return;
} }
bool ok = true; QStringList errors;
for (auto channel_config : channel_config_list) { for (auto channel_config : channel_config_list) {
if (!channel_config.isValid()) if (!channel_config.isValid())
continue; continue;
@ -84,53 +94,53 @@ void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &devi
continue; continue;
int board_id = channel_config_info["BoardId"].toInt(); int board_id = channel_config_info["BoardId"].toInt();
int channel_id = channel_config_info["ChannelId"].toInt(); int channel_id = channel_config_info["ChannelId"].toInt();
ok &= MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info); if (!MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info)) {
const QString error = QStringLiteral(u"启动设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id);
errors.append(error);
}
if (!MeasureDeviceController::Instance()->StartMeasure(device_guid, board_id, channel_id)) {
const QString error = QStringLiteral(u"启动板卡%1通道%2测量失败").arg(board_id).arg(channel_id);
errors.append(error);
}
}
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
if (!ok) { if (!errors.isEmpty()) {
replay_data_stream << QString("START") << ok << QStringLiteral(u"启动设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id); replay_data_stream << QString("START") << false << errors.join("\n");
} else {
replay_data_stream << QString("START") << ok << QStringLiteral(u"启动设置板卡%1通道%2测量参数完成").arg(board_id).arg(channel_id);
}
socket->write(replay_data); socket->write(replay_data);
socket->flush(); socket->flush();
ok &= MeasureDeviceController::Instance()->StartMeasure(device_guid, board_id, channel_id); QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
if (!ok) {
replay_data_stream << QString("START") << ok << QStringLiteral(u"启动板卡%1通道%2测量失败");
} else { } else {
replay_data_stream << QString("START") << ok << QStringLiteral(u"启动板卡%1通道%2测量完成");
}
socket->write(replay_data);
socket->flush();
}
if (!ok) {
// MeasureDeviceController::Instance()->StopMeasure(device_guid);
return;
}
const QString& measure_data_gvf_filename = MeasureDeviceController::Instance()->GetMeasureGvfDataFilename(); const QString& measure_data_gvf_filename = MeasureDeviceController::Instance()->GetMeasureGvfDataFilename();
if (measure_data_gvf_filename.isEmpty()) { QString replay_info;
return; bool ok = measure_data_gvf_filename.isEmpty();
if (!ok) {
replay_info = QStringLiteral(u"测量数据GVF文件未找到");
} else {
replay_info = measure_data_gvf_filename;
} }
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
replay_data_stream << QString("DATA") << true << measure_data_gvf_filename; replay_data_stream << QString("START") << ok << replay_info;
socket->write(replay_data); socket->write(replay_data);
socket->flush(); socket->flush();
QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
}
} }
void MeasureTask::processStopMeasureCmd(QTcpSocket* socket, const QString &device_guid) void MeasureTask::processStopMeasureCmd(QTcpSocket* socket, const QString &device_guid)
{ {
MeasureDeviceController::Instance()->StopMeasure(device_guid); MeasureDeviceController::Instance()->StopMeasure(device_guid);
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
replay_data_stream << QString("STOP") << true << QStringLiteral(u"停止测量完成"); replay_data_stream << QString("STOP") << true << QStringLiteral(u"停止测量完成");
socket->write(replay_data); socket->write(replay_data);
socket->flush(); socket->flush();
QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
} }
void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, const QString &device_guid, const QString &cmd_data) void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, const QString &device_guid, const QString &cmd_data)
{ {
bool ok = true;
QByteArray json_data = cmd_data.toUtf8(); QByteArray json_data = cmd_data.toUtf8();
QJsonDocument json_doc = QJsonDocument::fromJson(json_data); QJsonDocument json_doc = QJsonDocument::fromJson(json_data);
if (json_doc.isNull()) { if (json_doc.isNull()) {
@ -147,6 +157,7 @@ void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, con
if (channel_config_list.isEmpty()) { if (channel_config_list.isEmpty()) {
return; return;
} }
QStringList errors;
for (auto channel_config : channel_config_list) { for (auto channel_config : channel_config_list) {
if (!channel_config.isValid()) if (!channel_config.isValid())
continue; continue;
@ -155,27 +166,33 @@ void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, con
continue; continue;
int board_id = channel_config_info["BoardId"].toInt(); int board_id = channel_config_info["BoardId"].toInt();
int channel_id = channel_config_info["ChannelId"].toInt(); int channel_id = channel_config_info["ChannelId"].toInt();
ok &= MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info); if (!MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info)) {
const QString error = QStringLiteral(u"设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id);
errors.append(error);
}
}
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
bool ok = !errors.isEmpty();
if (!ok) { if (!ok) {
replay_data_stream << QString("SET") << ok << QStringLiteral(u"设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id); replay_data_stream << QString("SET") << ok << errors.join("\n");
} else { } else {
replay_data_stream << QString("SET") << ok << QStringLiteral(u"设置板卡%1通道%2测量参数完成").arg(board_id).arg(channel_id); replay_data_stream << QString("SET") << ok << QStringLiteral(u"设置测量参数完成");
} }
socket->write(replay_data); socket->write(replay_data);
socket->flush(); socket->flush();
} QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
} }
void MeasureTask::processClearDataCmd(QTcpSocket* socket, const QString &device_guid) void MeasureTask::processClearDataCmd(QTcpSocket* socket, const QString &device_guid)
{ {
MeasureDeviceController::Instance()->ClearData(device_guid); MeasureDeviceController::Instance()->ClearData(device_guid);
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
replay_data_stream << QString("CLEAR") << true << QStringLiteral(u"清除数据完成"); replay_data_stream << QString("CLEAR") << true << QStringLiteral(u"清除数据完成");
socket->write(replay_data); socket->write(replay_data);
socket->flush(); socket->flush();
QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
} }
void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket) void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket)
@ -184,7 +201,7 @@ void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket)
bool ok = !device_list.isEmpty(); bool ok = !device_list.isEmpty();
QByteArray replay_data; QByteArray replay_data;
QDataStream replay_data_stream(replay_data); QDataStream replay_data_stream(&replay_data, QIODevice::Append);
replay_data_stream << QString("DEVICE"); replay_data_stream << QString("DEVICE");
if ( ok ) { if ( ok ) {
replay_data_stream << ok << device_list.size(); replay_data_stream << ok << device_list.size();
@ -192,8 +209,9 @@ void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket)
replay_data_stream << device_id; replay_data_stream << device_id;
} }
} else { } else {
replay_data_stream << ok; replay_data_stream << ok << QStringLiteral(u"测量设备未找到");
} }
socket->write(replay_data); socket->write(replay_data);
socket->flush(); socket->flush();
QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data);
} }

View File

@ -2,23 +2,24 @@
#include "MeasureServer.h" #include "MeasureServer.h"
#include "QsLogManage.h" #include "QsLogManage.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QThread>
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
// 创建日志记录器
QsLogManage::createLogger(); QsLogManage::createLogger();
MeasureDeviceController::Instance()->SetInitFinishedHandler(
[&](bool init_ok) {
if (init_ok) {
MeasureServer measure_server; MeasureServer measure_server;
if (!measure_server.Start()) { if (!measure_server.Start()) {
QLOG_ERROR() << measure_server.errorString(); QLOG_ERROR() << QStringLiteral(u"测量服务启动失败:") + measure_server.errorString();
}
} else { } else {
app.exit(EXIT_FAILURE); MeasureDeviceController::Instance()->SetInitFinishedHandler(
[&](bool init_ok) {
if (!init_ok) {
QLOG_ERROR() << QStringLiteral(u"未找到测量设备,测量服务程序退出.");
// app.exit(EXIT_FAILURE);
} }
}); });
MeasureDeviceController::Instance()->InitFindMeasureDevice(); MeasureDeviceController::Instance()->InitFindMeasureDevice();
}
return app.exec(); return app.exec();
} }

View File

@ -8,7 +8,6 @@ msvc {
QMAKE_CXXFLAGS += /utf-8 QMAKE_CXXFLAGS += /utf-8
} }
include($${PWD}/../Common.pri) include($${PWD}/../Common.pri)
include($${PROJECT_DIR}/3rdlib/QsLog/QsLog.pri) include($${PROJECT_DIR}/3rdlib/QsLog/QsLog.pri)
include($${PROJECT_DIR}/3rdlib/csv/csv.pri) include($${PROJECT_DIR}/3rdlib/csv/csv.pri)
@ -24,13 +23,11 @@ SOURCES += \
$${PWD}/MeasureServer.cpp \ $${PWD}/MeasureServer.cpp \
$${PWD}/MeasureTask.cpp \ $${PWD}/MeasureTask.cpp \
$${PWD}/main.cpp \ $${PWD}/main.cpp \
MeasureClient.cpp \
MeasureDeviceController.cpp MeasureDeviceController.cpp
HEADERS += \ HEADERS += \
$${PWD}/MeasureServer.h \ $${PWD}/MeasureServer.h \
$${PWD}/MeasureTask.h \ $${PWD}/MeasureTask.h \
MeasureClient.h \
MeasureDeviceController.h MeasureDeviceController.h