Add serial configuration support to Gateway Modbus
- Introduced GatewayModbusSerialConfig structure to encapsulate serial communication settings. - Added clamping functions for integer and size values to ensure valid configuration ranges. - Updated GatewayModbusConfigFromValue to parse serial configuration from JSON input. - Implemented transport type checking functions for TCP, RTU, ASCII, and Serial. - Enhanced GatewayModbusConfigToValue to include serial configuration in output. Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -18,14 +18,43 @@ constexpr uint16_t kGatewayModbusMaxReadBits = 2000;
|
||||
constexpr uint16_t kGatewayModbusMaxReadRegisters = 125;
|
||||
constexpr uint16_t kGatewayModbusMaxWriteBits = 1968;
|
||||
constexpr uint16_t kGatewayModbusMaxWriteRegisters = 123;
|
||||
constexpr uint32_t kGatewayModbusDefaultSerialBaudrate = 9600;
|
||||
constexpr uint32_t kGatewayModbusDefaultSerialResponseTimeoutMs = 20;
|
||||
constexpr uint32_t kGatewayModbusDefaultSerialInterFrameGapUs = 4000;
|
||||
|
||||
struct GatewayModbusRs485Config {
|
||||
bool enabled{false};
|
||||
int de_pin{-1};
|
||||
};
|
||||
|
||||
struct GatewayModbusSerialConfig {
|
||||
int uart_port{1};
|
||||
int tx_pin{-1};
|
||||
int rx_pin{-1};
|
||||
uint32_t baudrate{kGatewayModbusDefaultSerialBaudrate};
|
||||
int data_bits{8};
|
||||
std::string parity{"none"};
|
||||
int stop_bits{1};
|
||||
size_t rx_buffer_size{512};
|
||||
size_t tx_buffer_size{512};
|
||||
uint32_t response_timeout_ms{kGatewayModbusDefaultSerialResponseTimeoutMs};
|
||||
uint32_t inter_frame_gap_us{kGatewayModbusDefaultSerialInterFrameGapUs};
|
||||
GatewayModbusRs485Config rs485;
|
||||
};
|
||||
|
||||
struct GatewayModbusConfig {
|
||||
std::string transport{"tcp-server"};
|
||||
std::string host;
|
||||
uint16_t port{kGatewayModbusDefaultTcpPort};
|
||||
uint8_t unit_id{1};
|
||||
GatewayModbusSerialConfig serial;
|
||||
};
|
||||
|
||||
bool GatewayModbusTransportIsTcp(const std::string& transport);
|
||||
bool GatewayModbusTransportIsRtu(const std::string& transport);
|
||||
bool GatewayModbusTransportIsAscii(const std::string& transport);
|
||||
bool GatewayModbusTransportIsSerial(const std::string& transport);
|
||||
|
||||
enum class GatewayModbusSpace : uint8_t {
|
||||
kCoil = 1,
|
||||
kDiscreteInput = 2,
|
||||
|
||||
Reference in New Issue
Block a user