#ifndef ROBOTPROTOCOLSIMPLIFIED_H #define ROBOTPROTOCOLSIMPLIFIED_H #include #include "IYModbusTCPServer.h" #include "ProtocolCommon.h" /** * @brief ModbusTCP简化协议封装类 * 提供简化的撕裂报警信息和复位功能 * * 寄存器地址分配: * - 40001 (地址0): 复位命令 (写入1执行复位) * - 40002 (地址1): 撕裂报警标志 (0=无报警,1=撕裂报警) * - 40003 (地址2): 最大长度 (mm) * - 40004 (地址3): 最大宽度 (mm) * - 40005-40006 (地址4-5): 最大撕裂ID (UInt32) */ class RobotProtocolSimplified { public: /** * @brief 撕裂报警数据结构 */ struct TearingAlarmData { uint16_t alarmFlag; // 报警标志 (0=无报警,1=撕裂报警) uint16_t maxLength; // 最大撕裂长度 (mm) uint16_t maxWidth; // 最大撕裂宽度 (mm) uint32_t maxId; // 最大撕裂对应的ID TearingAlarmData() : alarmFlag(0) , maxLength(0) , maxWidth(0) , maxId(0) {} }; /** * @brief 复位回调函数类型 * 当收到复位命令时触发 */ using ResetCallback = std::function; /** * @brief 连接状态枚举(使用公共状态定义) */ using ConnectionStatus = ::ConnectionStatus; public: RobotProtocolSimplified(); ~RobotProtocolSimplified(); /** * @brief 初始化ModbusTCP服务 * @param port TCP端口号,默认502 * @return 0-成功,其他-错误码 */ int Initialize(uint16_t port = 502); /** * @brief 反初始化,停止服务 */ void Deinitialize(); /** * @brief 设置撕裂报警数据 * @param alarmData 报警数据结构 * @return 0-成功,其他-错误码 */ int SetAlarmData(const TearingAlarmData& alarmData); /** * @brief 清空报警数据(执行复位) * @return 0-成功,其他-错误码 */ int ClearAlarmData(); /** * @brief 设置复位回调函数 * @param callback 复位回调函数 */ void SetResetCallback(const ResetCallback& callback); /** * @brief 设置连接状态回调 * @param callback 回调函数 */ void SetConnectionCallback(const ConnectionCallback& callback); /** * @brief 获取服务运行状态 * @return true-运行中,false-已停止 */ bool IsRunning() const; 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 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端口 // 连接状态 ConnectionStatus m_connectionStatus; // 连接状态 // 回调函数 ConnectionCallback m_connectionCallback; // 连接状态回调 ResetCallback m_resetCallback; // 复位回调 // Modbus寄存器地址映射(实际寄存器地址,从0开始) static const uint16_t RESET_CMD_ADDR = 0; // 复位命令地址(40001) static const uint16_t ALARM_FLAG_ADDR = 1; // 报警标志地址(40002) static const uint16_t MAX_LENGTH_ADDR = 2; // 最大长度地址(40003) static const uint16_t MAX_WIDTH_ADDR = 3; // 最大宽度地址(40004) static const uint16_t MAX_ID_ADDR = 4; // 最大撕裂ID地址(40005-40006,占2个寄存器) static const uint16_t TOTAL_REGISTERS = 6; // 总寄存器数量 }; #endif // ROBOTPROTOCOLSIMPLIFIED_H