Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

74 righe
2.3 KiB

  1. #include "modbusmanager.h"
  2. #include <QThread>
  3. ModbusManager::ModbusManager(RegisterManager* regManager, QObject *parent)
  4. : QObject(parent)
  5. {
  6. modbusThread = new QThread(this);
  7. worker = new ModbusWorker(regManager);
  8. pollTimer = new QTimer(this);
  9. worker->moveToThread(modbusThread);
  10. // 连接工作线程信号
  11. connect(worker, &ModbusWorker::connectionStatusChanged,
  12. this, &ModbusManager::connectionStatusChanged);
  13. connect(worker, &ModbusWorker::errorOccurred,
  14. this, &ModbusManager::errorOccurred);
  15. connect(worker, &ModbusWorker::registerValueUpdated,
  16. this, &ModbusManager::registerValueUpdated);
  17. connect(pollTimer, &QTimer::timeout, this, &ModbusManager::readRegisters);
  18. connect(modbusThread, &QThread::started, worker, &ModbusWorker::initModbusDevice);
  19. modbusThread->start();
  20. }
  21. ModbusManager::~ModbusManager()
  22. {
  23. modbusThread->quit();
  24. modbusThread->wait();
  25. delete worker;
  26. pollTimer->stop();
  27. }
  28. void ModbusManager::connectToDevice(const QString& portName,
  29. QSerialPort::BaudRate baudRate,
  30. QSerialPort::DataBits dataBits,
  31. QSerialPort::Parity parity,
  32. QSerialPort::StopBits stopBits)
  33. {
  34. QMetaObject::invokeMethod(worker, "connectToDevice", Qt::QueuedConnection,
  35. Q_ARG(QString, portName),
  36. Q_ARG(QSerialPort::BaudRate, baudRate),
  37. Q_ARG(QSerialPort::DataBits, dataBits),
  38. Q_ARG(QSerialPort::Parity, parity),
  39. Q_ARG(QSerialPort::StopBits, stopBits));
  40. }
  41. void ModbusManager::disconnectDevice()
  42. {
  43. QMetaObject::invokeMethod(worker, "disconnectDevice", Qt::QueuedConnection);
  44. }
  45. void ModbusManager::startSimulation(int interval)
  46. {
  47. pollTimer->start(interval);
  48. }
  49. void ModbusManager::stopSimulation()
  50. {
  51. pollTimer->stop();
  52. }
  53. void ModbusManager::writeRegister(const QString& registerId, quint16 value)
  54. {
  55. QMetaObject::invokeMethod(worker, "writeRegister", Qt::QueuedConnection,
  56. Q_ARG(QString, registerId),
  57. Q_ARG(quint16, value));
  58. }
  59. void ModbusManager::readRegisters()
  60. {
  61. QMetaObject::invokeMethod(worker, "readRegisters", Qt::QueuedConnection);
  62. }