GrabBag/App/BeltTearing/BeltTearingServer/RobotProtocolSimplified.h

145 lines
4.4 KiB
C
Raw Normal View History

#ifndef ROBOTPROTOCOLSIMPLIFIED_H
#define ROBOTPROTOCOLSIMPLIFIED_H
#include <functional>
#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<void()>;
/**
* @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