#ifndef MODBUSWORKER_H #define MODBUSWORKER_H #include #include #include #include #include "registermanager.h" class ModbusWorker : public QObject { Q_OBJECT public: explicit ModbusWorker(RegisterManager* regManager, QObject *parent = nullptr); ~ModbusWorker(); public slots: // void startSimulation(int interval = 500); // void stopSimulation(); void writeRegister(const QString& registerId, quint16 value); bool connectToDevice(const QString& portName, QSerialPort::BaudRate baudRate, QSerialPort::DataBits dataBits, QSerialPort::Parity parity, QSerialPort::StopBits stopBits); void disconnectDevice(); void initModbusDevice(); private slots: void readRegisters(); void processModbusReply(); void readRegisterGroup(QModbusDataUnit::RegisterType type, const QList &addresses); void readAddressRange(QModbusDataUnit::RegisterType type, int startAddr, int count); signals: void connectionStatusChanged(bool connected); void errorOccurred(const QString& error); void registerValueUpdated(const QString& registerId, quint16 value); private: QModbusRtuSerialMaster *modbusDevice = nullptr; RegisterManager* registerManager; int slaveAddress = 1; QMap pendingRequests; }; #endif // MODBUSWORKER_H