Modbus tool: Create TCP connection pure virtual base class for generic connection handling

master
Simon Stürz 2024-07-01 13:28:13 +02:00
parent 90f954f198
commit a0ed908811
3 changed files with 52 additions and 18 deletions

View File

@ -17,6 +17,7 @@ gcc {
HEADERS += \ HEADERS += \
modbusdatautils.h \ modbusdatautils.h \
modbustcpconnection.h \
modbustcpmaster.h \ modbustcpmaster.h \
queuedmodbusreply.h queuedmodbusreply.h

View File

@ -0,0 +1,34 @@
#ifndef MODBUSTCPCONNECTION_H
#define MODBUSTCPCONNECTION_H
#include <QObject>
class ModbusTcpMaster;
class ModbusTcpConnection : public QObject
{
Q_OBJECT
public:
explicit ModbusTcpConnection(QObject *parent = nullptr) : QObject{parent} { }
virtual ~ModbusTcpConnection() = default;
virtual ModbusTcpMaster *modbusTcpMaster() const = 0;
virtual bool reachable() const = 0;
virtual bool initializing() const = 0;
virtual bool initialize() = 0;
virtual bool update() = 0;
public slots:
virtual bool connectDevice() = 0;
virtual void disconnectDevice() = 0;
virtual bool reconnectDevice() = 0;
signals:
void reachableChanged(bool reachable);
void initializationFinished(bool success);
};
#endif // MODBUSTCPCONNECTION_H

View File

@ -44,10 +44,11 @@ def writeTcpHeaderFile():
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, '#include <modbusdatautils.h>') writeLine(headerFile, '#include <modbusdatautils.h>')
writeLine(headerFile, '#include <modbustcpmaster.h>') writeLine(headerFile, '#include <modbustcpmaster.h>')
writeLine(headerFile, '#include <modbustcpconnection.h>')
writeLine(headerFile) writeLine(headerFile)
# Begin of class # Begin of class
writeLine(headerFile, 'class %s : public QObject' % className) writeLine(headerFile, 'class %s : public ModbusTcpConnection' % className)
writeLine(headerFile, '{') writeLine(headerFile, '{')
writeLine(headerFile, ' Q_OBJECT') writeLine(headerFile, ' Q_OBJECT')
@ -69,18 +70,18 @@ def writeTcpHeaderFile():
# Constructor # Constructor
writeLine(headerFile, ' explicit %s(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent = nullptr);' % className) writeLine(headerFile, ' explicit %s(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent = nullptr);' % className)
writeLine(headerFile, ' explicit %s(ModbusTcpMaster *modbusTcpMaster, quint16 slaveId, QObject *parent = nullptr);' % className) writeLine(headerFile, ' explicit %s(ModbusTcpMaster *modbusTcpMaster, quint16 slaveId, QObject *parent = nullptr);' % className)
writeLine(headerFile, ' ~%s() = default;' % className) writeLine(headerFile, ' ~%s() override = default;' % className)
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, ' ModbusTcpMaster *modbusTcpMaster() const;') writeLine(headerFile, ' ModbusTcpMaster *modbusTcpMaster() const override; ')
writeLine(headerFile, ' quint16 slaveId() const;') writeLine(headerFile, ' quint16 slaveId() const;')
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, ' bool reachable() const;') writeLine(headerFile, ' bool reachable() const override;')
writeLine(headerFile, ' bool initializing() const;') writeLine(headerFile, ' bool initializing() const override;')
writeLine(headerFile) writeLine(headerFile)
# Write init and update method declarations # Write init and update method declarations
writeLine(headerFile, ' virtual bool initialize();') writeLine(headerFile, ' virtual bool initialize() override;')
writeLine(headerFile, ' virtual bool update();') writeLine(headerFile, ' virtual bool update() override;')
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, ' ModbusDataUtils::ByteOrder endianness() const;') writeLine(headerFile, ' ModbusDataUtils::ByteOrder endianness() const;')
@ -137,18 +138,16 @@ def writeTcpHeaderFile():
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, 'public slots:') writeLine(headerFile, 'public slots:')
writeLine(headerFile, ' bool connectDevice();') writeLine(headerFile, ' bool connectDevice() override;')
writeLine(headerFile, ' void disconnectDevice();') writeLine(headerFile, ' void disconnectDevice() override;')
writeLine(headerFile, ' bool reconnectDevice();') writeLine(headerFile, ' bool reconnectDevice() override;')
writeLine(headerFile) writeLine(headerFile)
# Write registers value changed signals # Write registers value changed signals
writeLine(headerFile, 'signals:') writeLine(headerFile, 'signals:')
writeLine(headerFile, ' void reachableChanged(bool reachable);')
writeLine(headerFile, ' void checkReachabilityFailed();') writeLine(headerFile, ' void checkReachabilityFailed();')
writeLine(headerFile, ' void checkReachableRetriesChanged(uint checkReachableRetries);') writeLine(headerFile, ' void checkReachableRetriesChanged(uint checkReachableRetries);')
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, ' void initializationFinished(bool success);')
writeLine(headerFile, ' void updateFinished();') writeLine(headerFile, ' void updateFinished();')
writeLine(headerFile) writeLine(headerFile)
writeLine(headerFile, ' void endiannessChanged(ModbusDataUtils::ByteOrder endianness);') writeLine(headerFile, ' void endiannessChanged(ModbusDataUtils::ByteOrder endianness);')
@ -257,18 +256,18 @@ def writeTcpSourceFile():
# Constructor # Constructor
writeLine(sourceFile, '%s::%s(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent) :' % (className, className)) writeLine(sourceFile, '%s::%s(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent) :' % (className, className))
writeLine(sourceFile, ' QObject(parent),') writeLine(sourceFile, ' ModbusTcpConnection{parent},')
writeLine(sourceFile, ' m_modbusTcpMaster(new ModbusTcpMaster(hostAddress, port, this)),') writeLine(sourceFile, ' m_modbusTcpMaster{new ModbusTcpMaster(hostAddress, port, this)},')
writeLine(sourceFile, ' m_slaveId(slaveId)') writeLine(sourceFile, ' m_slaveId{slaveId}')
writeLine(sourceFile, '{') writeLine(sourceFile, '{')
writeLine(sourceFile, ' setupConnection();') writeLine(sourceFile, ' setupConnection();')
writeLine(sourceFile, '}') writeLine(sourceFile, '}')
writeLine(sourceFile) writeLine(sourceFile)
writeLine(sourceFile, '%s::%s(ModbusTcpMaster *modbusTcpMaster, quint16 slaveId, QObject *parent) :' % (className, className)) writeLine(sourceFile, '%s::%s(ModbusTcpMaster *modbusTcpMaster, quint16 slaveId, QObject *parent) :' % (className, className))
writeLine(sourceFile, ' QObject(parent),') writeLine(sourceFile, ' ModbusTcpConnection{parent},')
writeLine(sourceFile, ' m_modbusTcpMaster(modbusTcpMaster),') writeLine(sourceFile, ' m_modbusTcpMaster{modbusTcpMaster},')
writeLine(sourceFile, ' m_slaveId(slaveId)') writeLine(sourceFile, ' m_slaveId{slaveId}')
writeLine(sourceFile, '{') writeLine(sourceFile, '{')
writeLine(sourceFile, ' setupConnection();') writeLine(sourceFile, ' setupConnection();')
writeLine(sourceFile, '}') writeLine(sourceFile, '}')