diff --git a/serialConnectionManager/ModbusMaster.cpp b/serialConnectionManager/ModbusMaster.cpp index 3e5b5fa..c9231ab 100644 --- a/serialConnectionManager/ModbusMaster.cpp +++ b/serialConnectionManager/ModbusMaster.cpp @@ -18,10 +18,12 @@ ModBusMaster::~ModBusMaster() void ModBusMaster::init() { - qDebug() << " modBusMaster::init " <(sender()); - // if (!reply) - // return; - - // modbusReplyFromClient = reply; - freeThread=true; - mutex.lock(); - if (freeThread) - modBusAnswerNotReady.wakeAll(); - mutex.unlock(); - - // reply->deleteLater(); + clientCoil = coilDataFromClient; } - void ModBusMaster::writeRequest(QModbusDataUnit::RegisterType registerType, int startAddress, quint16 writeSize) { qDebug() << " ---- setSingleCoil coilFlag writeRequest "; diff --git a/serialConnectionManager/ModbusMaster.h b/serialConnectionManager/ModbusMaster.h index d5f22e5..11b50a6 100644 --- a/serialConnectionManager/ModbusMaster.h +++ b/serialConnectionManager/ModbusMaster.h @@ -39,19 +39,19 @@ public: QModbusDataUnit readRequest(QModbusDataUnit::RegisterType registerType, int startAddress, quint16 readSize); void writeRequest(QModbusDataUnit::RegisterType registerType, int startAddress, quint16 readSize); - bool checkForError(QModbusReply *_reply); signals: void dataFromClient(QString readedParameter); void modbusConnectionState(bool state); void finished(); -private slots: - void modbusReplyRecieved(); + public slots: void init(); void open(QString serialPort, int slaveAddress); QBitArray getCoil(int startAddress, quint16 readSize); + void modbusReplyRecieved(); + void modbusReplyRecievedSimulate(QBitArray coilDataFromClient); private: QModbusReply *modbusReplyFromClient; QModbusClient *modbusDevice = nullptr; @@ -59,6 +59,7 @@ private: int _slaveAddress; SettingSerialParameters _modbusSettings; QBitArray _coilFlags; + QBitArray clientCoil; QVector _registerValues; QWaitCondition modBusAnswerNotReady; QMutex mutex; @@ -67,6 +68,7 @@ private: public: QModbusReply *reply; Simulatermodbus objsimModbus; + }; #endif // MODBUSMASTER_H diff --git a/serialConnectionManager/Modbuswrapper.cpp b/serialConnectionManager/Modbuswrapper.cpp index ac74165..d40515d 100644 --- a/serialConnectionManager/Modbuswrapper.cpp +++ b/serialConnectionManager/Modbuswrapper.cpp @@ -3,7 +3,7 @@ ModbusWrapper::ModbusWrapper(QObject *parent) : QObject(parent) { qDebug() << " QThread::currentThreadId() ModbusWrapper before " < #include #include + class Simulatermodbus : public QObject { Q_OBJECT public: explicit Simulatermodbus(QObject *parent = nullptr); -void init(); -void open(QString serialPort , int slaveAddress); -signals: + void init(); + void open(QString serialPort , int slaveAddress); + void readCoil(int startAddress, quint16 readSize); + +public: signals: + void initiateStateResult(bool initFlag); + void openStateResult(bool openFlag); + void coilIsReady(QBitArray coilDataFromClient); + + public: - QTimer *timer; + QTimer *timer; + }; #endif // SIMULATERMODBUS_H diff --git a/serialConnectionManager/simulatermodbus.cpp b/serialConnectionManager/Simulatermodbus.cpp similarity index 61% rename from serialConnectionManager/simulatermodbus.cpp rename to serialConnectionManager/Simulatermodbus.cpp index d09efa2..2eb6d10 100644 --- a/serialConnectionManager/simulatermodbus.cpp +++ b/serialConnectionManager/Simulatermodbus.cpp @@ -24,7 +24,6 @@ void Simulatermodbus::open(QString serialPort, int slaveAddress) { QEventLoop qloop; qDebug() << "Simulatermodbus::open " << QThread::currentThreadId() ; - QThread::sleep(2); timer = new QTimer(); timer->setInterval(2000); timer->start(); @@ -33,5 +32,24 @@ void Simulatermodbus::open(QString serialPort, int slaveAddress) qDebug() << " Simulatermodbus open Done serial is " << serialPort; qDebug() << " Simulatermodbus open Done slaveAddress is " << slaveAddress; timer->stop(); + +} + +void Simulatermodbus::readCoil(int startAddress, quint16 readSize) +{ + QEventLoop qloop; + qDebug() << "Simulatermodbus::open " << QThread::currentThreadId() ; + timer = new QTimer(); + timer->setInterval(2000); + timer->start(); + connect(timer, &QTimer::timeout, &qloop, &QEventLoop::quit); + qloop.exec(); + qDebug() << " Simulatermodbus open Done serial is " << startAddress; + qDebug() << " Simulatermodbus open Done slaveAddress is " << readSize; + timer->stop(); + QBitArray bitArrayTemp; + bitArrayTemp.resize(1); + bitArrayTemp[0] = true; + emit coilIsReady(bitArrayTemp); } diff --git a/serialConnectionManager/serialConnectionManager.pro b/serialConnectionManager/serialConnectionManager.pro index 22e721c..c9b32ec 100644 --- a/serialConnectionManager/serialConnectionManager.pro +++ b/serialConnectionManager/serialConnectionManager.pro @@ -24,9 +24,9 @@ SOURCES += \ Modbuswrapper.cpp \ SerialportException.cpp \ SettingSerialParameters..cpp \ + Simulatermodbus.cpp \ main.cpp \ - mainwindow.cpp \ - simulatermodbus.cpp + mainwindow.cpp HEADERS += \ ModbusMaster.h \