#ifndef MODBUSMANAGER_H #define MODBUSMANAGER_H #include #include #include #include #include #include "registermanager.h" class ModbusManager : public QObject { Q_OBJECT public: explicit ModbusManager(RegisterManager* regManager, QObject *parent = nullptr); ~ModbusManager(); // 串口连接管理 bool connectToDevice(const QString& portName, QSerialPort::BaudRate baudRate = QSerialPort::Baud9600, QSerialPort::DataBits dataBits = QSerialPort::Data8, QSerialPort::Parity parity = QSerialPort::NoParity, QSerialPort::StopBits stopBits = QSerialPort::OneStop); void disconnectDevice(); // 仿真控制 void startSimulation(int interval = 500); // 毫秒 void stopSimulation(); // 寄存器读写 void writeRegister(const QString& registerId, quint16 value); // 设置从站地址 void setSlaveAddress(int address) { slaveAddress = address; } signals: void connectionStatusChanged(bool connected); void errorOccurred(const QString& error); private slots: void readRegisters(); void processModbusReply(); private: QModbusRtuSerialMaster *modbusDevice; RegisterManager* registerManager; QTimer* pollTimer; int slaveAddress = 1; // 默认从站地址 QMap pendingRequests; void readRegisterGroup(QModbusDataUnit::RegisterType type, int startAddr, int count); }; #endif // MODBUSMANAGER_H