25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

48 satır
1.4 KiB

  1. #ifndef MODBUSWORKER_H
  2. #define MODBUSWORKER_H
  3. #include <QObject>
  4. #include <QTimer>
  5. #include <QModbusRtuSerialMaster>
  6. #include <QSerialPort>
  7. #include "registermanager.h"
  8. class ModbusWorker : public QObject
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit ModbusWorker(RegisterManager* regManager, QObject *parent = nullptr);
  13. ~ModbusWorker();
  14. public slots:
  15. // void startSimulation(int interval = 500);
  16. // void stopSimulation();
  17. void writeRegister(const QString& registerId, quint16 value);
  18. bool connectToDevice(const QString& portName,
  19. QSerialPort::BaudRate baudRate,
  20. QSerialPort::DataBits dataBits,
  21. QSerialPort::Parity parity,
  22. QSerialPort::StopBits stopBits);
  23. void disconnectDevice();
  24. void initModbusDevice();
  25. private slots:
  26. void readRegisters();
  27. void processModbusReply();
  28. void readRegisterGroup(QModbusDataUnit::RegisterType type, const QList<int> &addresses);
  29. void readAddressRange(QModbusDataUnit::RegisterType type, int startAddr, int count);
  30. signals:
  31. void connectionStatusChanged(bool connected);
  32. void errorOccurred(const QString& error);
  33. void registerValueUpdated(const QString& registerId, quint16 value);
  34. private:
  35. QModbusRtuSerialMaster *modbusDevice = nullptr;
  36. RegisterManager* registerManager;
  37. int slaveAddress = 1;
  38. QMap<QModbusReply*, QString> pendingRequests;
  39. };
  40. #endif // MODBUSWORKER_H