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

65 lines
2.0 KiB
C
Raw Normal View History

2025-10-16 17:42:59 +08:00
// 文件名: src/modbus/modbus_rtu_bus_service.h (注意文件名已更改)
#ifndef MODBUS_RTU_BUS_SERVICE_H
#define MODBUS_RTU_BUS_SERVICE_H
#include "protocol/iprotocol_adapter.h"
#include "modbus_rtu_client.h"
#include "modbus_common.h"
#include <thread>
#include <atomic>
#include <string>
#include <vector> // <--- 新增
#include <mutex>
/**
* @brief Modbus RTU 线
* * 线
*/
class ModbusRtuBusService {
public:
/**
* @brief
* @param port_path 线使, e.g., "/dev/ttyS0"
* @param devices 线
* @param report_cb
*/
ModbusRtuBusService(std::string port_path,
std::vector<ModbusRtuDeviceConfig> devices,
ReportDataCallback report_cb);
~ModbusRtuBusService();
ModbusRtuBusService(const ModbusRtuBusService&) = delete;
ModbusRtuBusService& operator=(const ModbusRtuBusService&) = delete;
void start();
void stop();
bool is_running() const;
/**
* @brief 线ID
*/
bool manages_device(const std::string& device_id) const;
const std::vector<ModbusRtuDeviceConfig>& get_all_device_configs() const;
/**
* @brief (线) 线
* @param device_id ID
* @param address
* @param value
*/
void write_single_register(const std::string& device_id, uint16_t address, uint16_t value);
private:
void run();
std::string m_port_path;
std::vector<ModbusRtuDeviceConfig> m_devices;
ReportDataCallback m_report_callback;
ModbusRTUClient m_client;
std::thread m_thread;
std::atomic<bool> m_stop_flag{false};
std::mutex m_client_mutex; // 保护 m_client 的互斥锁
};
#endif // MODBUS_RTU_BUS_SERVICE_H