2023-11-24 14:08:11 +03:00
|
|
|
#ifndef MODBUSHANDLER_H
|
|
|
|
#define MODBUSHANDLER_H
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
#include <QMainWindow>
|
2023-12-13 14:34:51 +03:00
|
|
|
#include <QModbusDevice>
|
2023-11-24 14:08:11 +03:00
|
|
|
#include <QModbusServer>
|
2023-12-13 14:34:51 +03:00
|
|
|
#include <QModbusRtuSerialClient>
|
2023-11-24 14:08:11 +03:00
|
|
|
|
|
|
|
#include <QModbusDataUnit>
|
|
|
|
#include <QModbusReply>
|
|
|
|
#include <QVariant>
|
|
|
|
#include <QSerialPort>
|
|
|
|
#include <enums.h>
|
2023-12-13 14:34:51 +03:00
|
|
|
#include <QDebug>
|
2023-11-24 14:08:11 +03:00
|
|
|
#include <QTimer>
|
|
|
|
#include <QTime>
|
|
|
|
#include <QThread>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-13 14:34:51 +03:00
|
|
|
//class QModbusClient;
|
|
|
|
//class QModbusReply;
|
2023-11-24 14:08:11 +03:00
|
|
|
|
|
|
|
|
|
|
|
class ModBusHandler : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
explicit ModBusHandler(QObject *parent = nullptr);
|
|
|
|
~ModBusHandler();
|
|
|
|
QModbusClient *modbusDevice = nullptr;
|
2023-12-13 14:34:51 +03:00
|
|
|
|
2023-11-24 14:08:11 +03:00
|
|
|
bool piborIsReqesting = false;
|
|
|
|
bool isConnected = false;
|
|
|
|
// QList <PrborConnectonAtr> PriborList;
|
|
|
|
QMap<uint,PrborConnectonAtr>PriborMap;
|
2023-12-07 16:57:51 +03:00
|
|
|
QMap<uint,PrborConnectonAtr>::iterator iteratorPriborMap;
|
2023-11-24 14:08:11 +03:00
|
|
|
bool isWaitingResponse=false;
|
|
|
|
QTimer *tmr;
|
|
|
|
|
|
|
|
//переменные для поиска прибора
|
|
|
|
uint s;uint b;
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void dataRecivedNotify(DataStruct datastruct);
|
|
|
|
void errorNotify(ErrorCode error);
|
|
|
|
|
|
|
|
void scanPlease(uint16_t);
|
|
|
|
void priborFounded(uint a, uint s,uint b); //прибор найден
|
|
|
|
void progressUpToStatusBar(uint);
|
|
|
|
void priborNotFounded();
|
|
|
|
void writeResult(QModbusDevice::Error);
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
|
|
void requestPriborFromList(); //
|
|
|
|
|
|
|
|
void addToReqList(PrborConnectonAtr pribor);
|
|
|
|
void removeFromReqList(uint adress);
|
|
|
|
|
|
|
|
void scanPort(QString port);
|
|
|
|
void scanPort();
|
|
|
|
|
2023-12-07 16:57:51 +03:00
|
|
|
void writeDataToPribor(DataStruct datastruct, typeReq type); //обработчик в лямде!!!!!
|
2023-11-24 14:08:11 +03:00
|
|
|
void prepareWrite(uint16_t adress, int startAddress, int count, QVector<uint16_t> values);
|
|
|
|
|
|
|
|
void getDataFromPribor(PrborConnectonAtr atr);
|
|
|
|
void readCoils(uint16_t adress, uint16_t startCoil, uint16_t numCoil);
|
|
|
|
|
|
|
|
void onReadReady(); //обработчик чтения
|
|
|
|
void ScanPortOnReadReady(); //обработчик чтения при сканировании
|
|
|
|
|
|
|
|
QModbusDataUnit writeRequest(int startAddress, int count) const;
|
|
|
|
|
|
|
|
void writeConnectionAttr(PrborConnectonAtr oldAtr,PrborConnectonAtr newAtr);
|
|
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void scanAdressSignalChain(uint16_t adrToScan);
|
|
|
|
|
|
|
|
private:
|
|
|
|
void dataCollector(quint16 adress, QVector<quint16>recivedData); //сборщик данных для одновременой отправки сенса и данных
|
|
|
|
bool isScanning=0;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // MODBUSHANDLER_H
|