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.
 
 

70 lines
1.9 KiB

#ifndef MODBUSMASTER_H
#define MODBUSMASTER_H
#include <QObject>
#include <QModbusDevice>
#include <QBitArray>
#include <QModbusDataUnit>
#include "ServoException.h"
#include "ModbusConfig.h"
#include "ExpConfig.h"
class QModbusClient;
class QModbusReply;
class ModbusMaster : public QObject
{
Q_OBJECT
private:
bool _initialized = false;
bool _connected = false;
QModbusClient* _modbusDevice = nullptr;
int _clientAddress;
QModbusDataUnit _modbusReplyUnit;
QBitArray _coilsToWrite;
QVector<quint16> _RegistersToWrite;
public:
explicit ModbusMaster(QObject* parent = nullptr);
void readRequest(QModbusDataUnit::RegisterType registerType,
int startAddress,
quint16 readSize);
void checkForError(QModbusReply* _reply);
void writeRequest(QModbusDataUnit::RegisterType registerType,
int startAddress,
quint16 writeSize);
//uncrustify off
public slots:
//uncrustify on
void init(ExpConfig& expConfig);
void connectToDevice(ModbusConfig modbusConfig, ExpConfig& expConfig);
void connectionStateChanged(QModbusDevice::State state);
bool getConnectionState();
QBitArray getCoil(int startAddress, quint16 readSize, ExpConfig& expConfig);
QBitArray getInputCoil(int startAddress, quint16 readSize, ExpConfig& expConfig);
QVector<quint16> getHoldingRegister(int startAddress, quint16 readSize, ExpConfig& expConfig);
QVector<quint16> getInputRegister(int startAddress, quint16 readSize, ExpConfig& expConfig);
void setSingleCoil(int startAddress, bool coilFlag, ExpConfig& expConfig);
void setMultipleCoil(int startAddress,
quint16 writeSize,
QBitArray coilFlags,
ExpConfig& expConfig);
void setSingleRegister(int startAddress, quint16 registerValue, ExpConfig& expConfig);
void setMultipleRegister(int startAddress,
quint16 writeSize,
QVector<quint16> registerValues,
ExpConfig& expConfig);
void close();
};
#endif //MODBUSMASTER_H