bonus-edge-proxy/src/modbus/modbus_master_poller.h

42 lines
1.3 KiB
C++

// 文件名: 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 "modbus_common.h"
#include <boost/asio.hpp>
#include <memory>
#include <string>
#include <vector>
class ModbusMasterPoller : public std::enable_shared_from_this<ModbusMasterPoller> {
public:
// <<< MODIFIED: 构造函数接收新的配置结构体
ModbusMasterPoller(boost::asio::io_context& io_context,
ModbusTcpDeviceConfig 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, uint16_t poll_start_addr); // <<< MODIFIED: 需要知道轮询的起始地址
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;
// <<< MODIFIED: 成员变量使用新的配置结构体
ModbusTcpDeviceConfig m_config;
ReportDataCallback m_report_callback;
std::vector<uint8_t> m_write_buffer;
std::array<uint8_t, 260> m_read_buffer;
uint16_t m_transaction_id = 0;
};
#endif // MODBUS_MASTER_POLLER_H