Add modbus tcp block update implementation
parent
4507f3afb5
commit
e95d3f089d
|
|
@ -602,7 +602,77 @@ def writeBlockUpdateMethodImplementationsRtu(fileDescriptor, className, blockDef
|
||||||
writeLine(fileDescriptor)
|
writeLine(fileDescriptor)
|
||||||
|
|
||||||
|
|
||||||
|
def writeBlockUpdateMethodImplementationsTcp(fileDescriptor, className, blockDefinitions):
|
||||||
|
for blockDefinition in blockDefinitions:
|
||||||
|
blockName = blockDefinition['id']
|
||||||
|
blockRegisters = blockDefinition['registers']
|
||||||
|
blockStartAddress = 0
|
||||||
|
registerCount = 0
|
||||||
|
blockSize = 0
|
||||||
|
registerType = ""
|
||||||
|
|
||||||
|
for i, blockRegister in enumerate(blockRegisters):
|
||||||
|
if i == 0:
|
||||||
|
blockStartAddress = blockRegister['address']
|
||||||
|
registerType = blockRegister['registerType']
|
||||||
|
|
||||||
|
registerCount += 1
|
||||||
|
blockSize += blockRegister['size']
|
||||||
|
|
||||||
|
writeLine(fileDescriptor, 'void %s::update%sBlock()' % (className, blockName[0].upper() + blockName[1:]))
|
||||||
|
writeLine(fileDescriptor, '{')
|
||||||
|
writeLine(fileDescriptor, ' // Update register block \"%s\"' % blockName)
|
||||||
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read block \\"%s\\" registers from:" << %s << "size:" << %s;' % (className, blockName, blockStartAddress, blockSize))
|
||||||
|
|
||||||
|
# Build request depending on the register type
|
||||||
|
# Build request depending on the register type
|
||||||
|
if registerType == 'inputRegister':
|
||||||
|
writeLine(fileDescriptor, ' QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, %s, %s);' % (blockStartAddress, blockSize))
|
||||||
|
elif registerType == 'discreteInputs':
|
||||||
|
writeLine(fileDescriptor, ' QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::DiscreteInputs, %s, %s);' % (blockStartAddress, blockSize))
|
||||||
|
elif registerType == 'coils':
|
||||||
|
writeLine(fileDescriptor, ' QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, %s, %s);' % (blockStartAddress, blockSize))
|
||||||
|
else:
|
||||||
|
#Default to holdingRegister
|
||||||
|
writeLine(fileDescriptor, ' QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, %s, %s);' % (blockStartAddress, blockSize))
|
||||||
|
|
||||||
|
writeLine(fileDescriptor, ' QModbusReply *reply = sendReadRequest(request, m_slaveId);')
|
||||||
|
|
||||||
|
writeLine(fileDescriptor, ' if (reply) {')
|
||||||
|
writeLine(fileDescriptor, ' if (!reply->isFinished()) {')
|
||||||
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
|
||||||
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusReply::NoError) {')
|
||||||
|
writeLine(fileDescriptor, ' QVector<quint16> blockValues = reply->result();')
|
||||||
|
writeLine(fileDescriptor, ' QVector<quint16> values;')
|
||||||
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "<-- Response from reading block \\"%s\\" register" << %s << "size:" << %s << blockValues;' % (className, blockName, blockStartAddress, blockSize))
|
||||||
|
|
||||||
|
# Start parsing the registers using offsets
|
||||||
|
offset = 0
|
||||||
|
for i, blockRegister in enumerate(blockRegisters):
|
||||||
|
propertyName = blockRegister['id']
|
||||||
|
propertyTyp = getCppDataType(blockRegister)
|
||||||
|
writeLine(fileDescriptor, ' values = blockValues.mid(%s, %s);' % (offset, blockRegister['size']))
|
||||||
|
writeLine(fileDescriptor, ' %s received%s = %s;' % (propertyTyp, propertyName[0].upper() + propertyName[1:], getValueConversionMethod(blockRegister)))
|
||||||
|
writeLine(fileDescriptor, ' if (m_%s != received%s) {' % (propertyName, propertyName[0].upper() + propertyName[1:]))
|
||||||
|
writeLine(fileDescriptor, ' m_%s = received%s;' % (propertyName, propertyName[0].upper() + propertyName[1:]))
|
||||||
|
writeLine(fileDescriptor, ' emit %sChanged(m_%s);' % (propertyName, propertyName))
|
||||||
|
writeLine(fileDescriptor, ' }')
|
||||||
|
writeLine(fileDescriptor)
|
||||||
|
offset += blockRegister['size']
|
||||||
|
|
||||||
|
writeLine(fileDescriptor, ' }')
|
||||||
|
writeLine(fileDescriptor, ' });')
|
||||||
|
writeLine(fileDescriptor)
|
||||||
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [reply] (QModbusReply::Error error){')
|
||||||
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating block \\"%s\\" registers" << error << reply->errorString();' % (className, blockName))
|
||||||
|
writeLine(fileDescriptor, ' emit reply->finished();')
|
||||||
|
writeLine(fileDescriptor, ' });')
|
||||||
|
writeLine(fileDescriptor, ' }')
|
||||||
|
writeLine(fileDescriptor, ' } else {')
|
||||||
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading block \\"%s\\" registers";' % (className, blockName))
|
||||||
|
writeLine(fileDescriptor, ' }')
|
||||||
|
writeLine(fileDescriptor, '}')
|
||||||
|
writeLine(fileDescriptor)
|
||||||
|
|
||||||
def writeInternalPropertyReadMethodDeclarationsTcp(fileDescriptor, registerDefinitions):
|
def writeInternalPropertyReadMethodDeclarationsTcp(fileDescriptor, registerDefinitions):
|
||||||
for registerDefinition in registerDefinitions:
|
for registerDefinition in registerDefinitions:
|
||||||
|
|
@ -885,6 +955,9 @@ def writeTcpSourceFile():
|
||||||
# Write update methods
|
# Write update methods
|
||||||
writePropertyUpdateMethodImplementationsTcp(sourceFile, className, registerJson['registers'])
|
writePropertyUpdateMethodImplementationsTcp(sourceFile, className, registerJson['registers'])
|
||||||
|
|
||||||
|
# Write block update method
|
||||||
|
writeBlockUpdateMethodImplementationsTcp(sourceFile, className, registerJson['blocks'])
|
||||||
|
|
||||||
# Write property read method implementations
|
# Write property read method implementations
|
||||||
writeInternalPropertyReadMethodImplementationsTcp(sourceFile, className, registerJson['registers'])
|
writeInternalPropertyReadMethodImplementationsTcp(sourceFile, className, registerJson['registers'])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue