GrabBag/GrabBagApp/Presenter/Inc/RobotProtocol.h

141 lines
4.2 KiB
C
Raw Normal View History

2025-06-08 12:48:04 +08:00
#ifndef ROBOTPROTOCOL_H
#define ROBOTPROTOCOL_H
#include <functional>
#include <vector>
2025-06-08 12:48:04 +08:00
#include "IYModbusTCPServer.h"
#include "ProtocolCommon.h"
2025-06-08 12:48:04 +08:00
2025-06-08 12:48:04 +08:00
/**
* @brief ModbusTCP协议封装类
*
*/
class RobotProtocol
{
public:
/**
* @brief 使
2025-06-08 12:48:04 +08:00
*/
using RobotStatus = ConnectionStatus;
2025-06-08 12:48:04 +08:00
public:
RobotProtocol();
~RobotProtocol();
/**
* @brief ModbusTCP服务
* @param port TCP端口号502
* @return 0--
*/
int Initialize(uint16_t port = 502);
/**
* @brief
*/
void Deinitialize();
/**
* @brief
* @param multiTargetData
* @param cameraId ID1
2025-06-08 12:48:04 +08:00
* @return 0--
*/
int SetMultiTargetData(const MultiTargetData& multiTargetData, uint16_t cameraId);
2025-06-08 12:48:04 +08:00
/**
* @brief
* @return
*/
RobotStatus GetDetectionStatus() const;
/**
* @brief
* @param callback
*/
void SetConnectionCallback(const ConnectionCallback& callback);
/**
* @brief
* @param callback
*/
void SetWorkSignalCallback(const WorkSignalCallback& callback);
/**
* @brief
* @return true-false-
*/
bool IsRunning() const;
/**
* @brief
* @param status 0-1-12-23-
* @return 0--
*/
int SetWorkStatus(uint16_t status);
// 使用公共工作状态定义
static const uint16_t WORK_STATUS_IDLE = ::WORK_STATUS_IDLE;
static const uint16_t WORK_STATUS_CAMERA1_DONE = ::WORK_STATUS_CAMERA1_DONE;
static const uint16_t WORK_STATUS_CAMERA2_DONE = ::WORK_STATUS_CAMERA2_DONE;
static const uint16_t WORK_STATUS_BUSY = ::WORK_STATUS_BUSY;
2025-06-08 12:48:04 +08:00
private:
/**
* @brief ModbusTCP服务器
*/
void StopModbusTCPServer();
/**
* @brief ModbusTCP连接状态变化
* @param connected true-false-
*/
void OnModbusTCPConnectionChanged(bool connected);
2025-06-08 12:48:04 +08:00
/**
* @brief 线
* @param unitId ID
* @param startAddress
* @param quantity
* @param values
* @return
*/
IYModbusTCPServer::ErrorCode OnWriteCoils(uint8_t unitId, uint16_t startAddress,
uint16_t quantity, const uint8_t* values);
/**
* @brief
* @param unitId ID
* @param startAddress
* @param quantity
* @param values
* @return
*/
IYModbusTCPServer::ErrorCode OnWriteRegisters(uint8_t unitId, uint16_t startAddress,
uint16_t quantity, const uint16_t* values);
private:
// ModbusTCP相关
IYModbusTCPServer* m_pModbusServer; // ModbusTCP服务器实例
bool m_bServerRunning; // 服务器运行状态
uint16_t m_nPort; // TCP端口
// 机械臂数据
RobotStatus m_robotStatus; // 机械臂状态
// 回调函数
ConnectionCallback m_connectionCallback; // 连接状态回调
WorkSignalCallback m_workSignalCallback; // 工作信号回调
// Modbus地址映射
static const uint16_t WORK_SIGNAL_ADDR = 0; // 工作信号线圈地址 (所有相机)
static const uint16_t STATUS_ADDR = 1; // 状态地址
static const uint16_t COORD_ONE_START_ADDR = 4; // 相机一的检测开始地址
static const uint16_t COORD_TWO_START_ADDR = 46; // 相机二的检测开始地址
2025-06-08 12:48:04 +08:00
};
#endif // ROBOTPROTOCOL_H