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.
74 lines
2.2 KiB
74 lines
2.2 KiB
#ifndef MODBUSMASTER_H
|
|
#define MODBUSMASTER_H
|
|
|
|
#include <QObject>
|
|
#include <QModbusDataUnit>
|
|
#include <QModbusRtuSerialMaster>
|
|
#include <QtSerialBus/qtserialbusglobal.h>
|
|
#include <QBitArray>
|
|
#include <QSerialPort>
|
|
#include "SettingSerialParameters.h"
|
|
#include "QWaitCondition"
|
|
#include "qmutex.h"
|
|
#include "SimulaterModbus.h"
|
|
class QModbusClient;
|
|
class QModbusReply;
|
|
|
|
|
|
class ModBusMaster : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit ModBusMaster(QObject *parent = nullptr);
|
|
~ModBusMaster();
|
|
|
|
void start();
|
|
void deinit();
|
|
void close();
|
|
void stop();
|
|
|
|
void setSingleCoil(int startAddress, bool coilFlag);
|
|
void setMultipleCoil(int startAddress, quint16 writeSize, QBitArray coilFlags);
|
|
void setSingleRegister(int startAddress, quint16 registerValue);
|
|
void setMultipleRegister(int startAddress, quint16 writeSize, QVector<quint16> registerValues);
|
|
|
|
// QBitArray getCoil(int startAddress, quint16 readSize);
|
|
QBitArray getInputCoil(int startAddress, quint16 readSize);
|
|
QVector<quint16> getInputRegister(int startAddress, quint16 readSize);
|
|
QVector<quint16> getHoldingRegister(int startAddress, quint16 readSize);
|
|
|
|
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();
|
|
|
|
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;
|
|
QString _serialPort ;
|
|
int _slaveAddress;
|
|
SettingSerialParameters _modbusSettings;
|
|
QBitArray _coilFlags;
|
|
QBitArray clientCoil;
|
|
QVector<quint16> _registerValues;
|
|
QWaitCondition modBusAnswerNotReady;
|
|
QMutex mutex;
|
|
bool freeThread=false;
|
|
|
|
public:
|
|
QModbusReply *reply;
|
|
Simulatermodbus objsimModbus;
|
|
|
|
};
|
|
|
|
#endif // MODBUSMASTER_H
|
|
|