A1210_Desktop/modbushandler.h

92 lines
2.4 KiB
C
Raw Normal View History

#ifndef MODBUSHANDLER_H
#define MODBUSHANDLER_H
#include <QObject>
#include <QMainWindow>
2023-12-13 14:34:51 +03:00
#include <QModbusDevice>
#include <QModbusServer>
2023-12-13 14:34:51 +03:00
#include <QModbusRtuSerialClient>
#include <QModbusDataUnit>
#include <QModbusReply>
#include <QVariant>
#include <QSerialPort>
#include <enums.h>
2023-12-13 14:34:51 +03:00
#include <QDebug>
#include <QTimer>
#include <QTime>
#include <QThread>
2023-12-13 14:34:51 +03:00
//class QModbusClient;
//class QModbusReply;
class ModBusHandler : public QObject
{
Q_OBJECT
public:
explicit ModBusHandler(QObject *parent = nullptr);
~ModBusHandler();
QModbusClient *modbusDevice = nullptr;
2023-12-13 14:34:51 +03:00
bool piborIsReqesting = false;
bool isConnected = false;
// QList <PrborConnectonAtr> PriborList;
QMap<uint,PrborConnectonAtr>PriborMap;
QMap<uint,PrborConnectonAtr>::iterator iteratorPriborMap;
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();
void writeDataToPribor(DataStruct datastruct, typeReq type); //обработчик в лямде!!!!!
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