#ifndef ROBOTPROTOCOL_H #define ROBOTPROTOCOL_H #include #include #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 相机ID(从1开始编号) * @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 设置系统控制回调 * @param callback 回调函数,参数为控制命令(0-停止,1-开始,2-复位) */ void SetSystemControlCallback(const std::function& callback); /** * @brief 获取服务运行状态 * @return true-运行中,false-已停止 */ bool IsRunning() const; /** * @brief 设置工作状态 * @param status 工作状态:0-空闲,1-相机1工作完成,2-相机2工作完成,3-忙碌 * @return 0-成功,其他-错误码 */ int SetWorkStatus(uint16_t status); /** * @brief 清空检测结果数据 * @return 0-成功,其他-错误码 */ int ClearDetectionData(); // 使用公共工作状态定义 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; // 工作信号回调 std::function m_systemControlCallback; // 系统控制回调 // 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