// 文件名: src/modbus/modbus_master_poller.h #ifndef MODBUS_MASTER_POLLER_H #define MODBUS_MASTER_POLLER_H #include "protocol/iprotocol_adapter.h" // For UnifiedData and ReportDataCallback #include #include #include // 配置一个Modbus设备的连接和轮询参数 struct ModbusDeviceConfig { std::string device_id; // 自定义设备ID,用于MQTT主题 std::string ip_address; uint16_t port; uint8_t slave_id; uint16_t start_address; uint16_t quantity; int poll_interval_ms; }; class ModbusMasterPoller : public std::enable_shared_from_this { public: ModbusMasterPoller(boost::asio::io_context& io_context, ModbusDeviceConfig config, ReportDataCallback report_cb); // 开始轮询器的工作 (连接和定时) void start(); private: void do_connect(); void do_poll(); void do_write(); void do_read_header(); void do_read_pdu(std::size_t pdu_length); void on_error(const std::string& stage); boost::asio::io_context& m_io_context; boost::asio::ip::tcp::socket m_socket; boost::asio::steady_timer m_timer; ModbusDeviceConfig m_config; ReportDataCallback m_report_callback; std::vector m_write_buffer; std::array m_read_buffer; // Max Modbus TCP frame size uint16_t m_transaction_id = 0; }; #endif // MODBUS_MASTER_POLLER_H