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:
Tony
2026-05-04 14:34:05 +08:00
parent 640e78f688
commit 34d2d9caa0
10 changed files with 1364 additions and 204 deletions
@@ -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,