139 lines
4.1 KiB
C
Raw Normal View History

2025-09-29 00:56:53 +08:00
#ifndef ROBOTPROTOCOL_H
#define ROBOTPROTOCOL_H
#include <functional>
#include <vector>
#include "IYModbusTCPServer.h"
#include "ProtocolCommon.h"
/**
* @brief ModbusTCP协议封装类
*
*/
class RobotProtocol
{
public:
/**
* @brief 使
*/
using RobotStatus = ConnectionStatus;
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
* @return 0--
*/
int SetMultiTargetData(const MultiTargetData& multiTargetData);
/**
* @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_WORKING = ::WORK_STATUS_WORKING;
static const uint16_t WORK_STATUS_BUSY = ::WORK_STATUS_BUSY;
private:
/**
* @brief ModbusTCP服务器
*/
void StopModbusTCPServer();
/**
* @brief ModbusTCP连接状态变化
* @param connected true-false-
*/
void OnModbusTCPConnectionChanged(bool connected);
/**
* @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 STATUS_ADDR = 0; // 工作信号线圈地址 (所有相机)
static const uint16_t DETECT_RESULT_ADDR = 1; // 状态地址
static const uint16_t RESULT_OFFSET_ADDR = 16; // 状态地址
};
#endif // ROBOTPROTOCOL_H