You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
894 B

  1. #ifndef MODBUSSIMULATOR_H
  2. #define MODBUSSIMULATOR_H
  3. #include <QObject>
  4. #include <QModbusRtuSerialMaster>
  5. #include <QTimer>
  6. #include <QSet>
  7. #include <QMutex> // 新增:互斥锁头文件
  8. class ModbusSimulator : public QObject
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit ModbusSimulator(QObject *parent = nullptr);
  13. ~ModbusSimulator();
  14. void startSimulation();
  15. void stopSimulation();
  16. bool isRunning() const;
  17. void setCoilAddresses(const QSet<int> &addresses);
  18. void writeCoil(int address, bool state);
  19. signals:
  20. void coilStatusRead(int address, bool state);
  21. void errorOccurred(const QString &message);
  22. private slots:
  23. void readCoils();
  24. private:
  25. QModbusRtuSerialMaster *m_modbusClient;
  26. QTimer *m_readTimer;
  27. QSet<int> m_coilAddresses;
  28. bool m_running;
  29. QMutex m_mutex; // 新增:保护m_coilAddresses的互斥锁
  30. };
  31. #endif // MODBUSSIMULATOR_H