2025-10-14 15:29:13 +08:00
|
|
|
// 文件名: 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
|
2025-10-14 17:44:38 +08:00
|
|
|
#include "modbus_common.h" // <<< MODIFIED: 包含通用配置定义
|
2025-10-14 15:29:13 +08:00
|
|
|
#include <boost/asio.hpp>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <string>
|
2025-10-14 17:44:38 +08:00
|
|
|
#include <vector>
|
2025-10-14 15:29:13 +08:00
|
|
|
|
|
|
|
|
class ModbusMasterPoller : public std::enable_shared_from_this<ModbusMasterPoller> {
|
|
|
|
|
public:
|
2025-10-14 17:44:38 +08:00
|
|
|
// <<< MODIFIED: 构造函数接收新的配置结构体
|
2025-10-14 15:29:13 +08:00
|
|
|
ModbusMasterPoller(boost::asio::io_context& io_context,
|
2025-10-14 17:44:38 +08:00
|
|
|
ModbusTcpDeviceConfig config,
|
2025-10-14 15:29:13 +08:00
|
|
|
ReportDataCallback report_cb);
|
|
|
|
|
|
|
|
|
|
void start();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void do_connect();
|
|
|
|
|
void do_poll();
|
|
|
|
|
void do_write();
|
|
|
|
|
void do_read_header();
|
2025-10-14 17:44:38 +08:00
|
|
|
void do_read_pdu(std::size_t pdu_length, uint16_t poll_start_addr); // <<< MODIFIED: 需要知道轮询的起始地址
|
2025-10-14 15:29:13 +08:00
|
|
|
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;
|
|
|
|
|
|
2025-10-14 17:44:38 +08:00
|
|
|
// <<< MODIFIED: 成员变量使用新的配置结构体
|
|
|
|
|
ModbusTcpDeviceConfig m_config;
|
2025-10-14 15:29:13 +08:00
|
|
|
ReportDataCallback m_report_callback;
|
|
|
|
|
|
|
|
|
|
std::vector<uint8_t> m_write_buffer;
|
2025-10-14 17:44:38 +08:00
|
|
|
std::array<uint8_t, 260> m_read_buffer;
|
2025-10-14 15:29:13 +08:00
|
|
|
uint16_t m_transaction_id = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // MODBUS_MASTER_POLLER_H
|