Update test reachability mechanism and fix init return if not reachable
parent
f32b62ff77
commit
c1d190c036
|
|
@ -267,32 +267,37 @@ def writeInternalBlockReadMethodImplementationsRtu(fileDescriptor, className, bl
|
|||
|
||||
##############################################################
|
||||
|
||||
def writeVerifyReachabilityImplementationsRtu(fileDescriptor, className, registerDefinitions, checkReachableRegister):
|
||||
def writeTestReachabilityImplementationsRtu(fileDescriptor, className, registerDefinitions, checkReachableRegister):
|
||||
|
||||
propertyName = checkReachableRegister['id']
|
||||
propertyTyp = getCppDataType(checkReachableRegister)
|
||||
|
||||
writeLine(fileDescriptor, 'void %s::verifyReachability()' % (className))
|
||||
writeLine(fileDescriptor, 'void %s::testReachability()' % (className))
|
||||
writeLine(fileDescriptor, '{')
|
||||
writeLine(fileDescriptor, ' if (m_testRechableReply)')
|
||||
writeLine(fileDescriptor, ' return;')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' // Try to read the check reachability register %s in order to verify if the communication is working or not.' % checkReachableRegister['id'])
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Verify reachability by reading \\"%s\\" register:" << %s << "size:" << %s;' % (className, checkReachableRegister['description'], checkReachableRegister['address'], checkReachableRegister['size']))
|
||||
writeLine(fileDescriptor, ' ModbusRtuReply *reply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
||||
writeLine(fileDescriptor, ' if (!reply) {')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Test reachability by reading \\"%s\\" register:" << %s << "size:" << %s;' % (className, checkReachableRegister['description'], checkReachableRegister['address'], checkReachableRegister['size']))
|
||||
writeLine(fileDescriptor, ' m_testRechableReply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
||||
writeLine(fileDescriptor, ' if (!m_testRechableReply) {')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "Error occurred verifying reachability by reading \\"%s\\" register";' % (className, checkReachableRegister['description']))
|
||||
writeLine(fileDescriptor, ' return;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' if (reply->isFinished()) {')
|
||||
writeLine(fileDescriptor, ' if (m_testRechableReply->isFinished()) {')
|
||||
writeLine(fileDescriptor, ' m_testRechableReply = nullptr;')
|
||||
writeLine(fileDescriptor, ' return;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' connect(reply, &ModbusRtuReply::finished, this, [this, reply](){')
|
||||
writeLine(fileDescriptor, ' connect(m_testRechableReply, &ModbusRtuReply::finished, this, [this, m_testRechableReply](){')
|
||||
writeLine(fileDescriptor, ' // Note: we don\'t care about the result here, only the error')
|
||||
writeLine(fileDescriptor, ' handleModbusError(reply->error());')
|
||||
writeLine(fileDescriptor, ' handleModbusError(m_testRechableReply->error());')
|
||||
writeLine(fileDescriptor, ' m_testRechableReply = nullptr;')
|
||||
writeLine(fileDescriptor, ' });')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' connect(reply, &ModbusRtuReply::errorOccurred, this, [reply] (ModbusRtuReply::Error error){')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "ModbusRtu reply error occurred while verifying reachability by reading \\"%s\\" register" << error << reply->errorString();' % (className, checkReachableRegister['description']))
|
||||
writeLine(fileDescriptor, ' connect(m_testRechableReply, &ModbusRtuReply::errorOccurred, this, [this] (ModbusRtuReply::Error error){')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "ModbusRtu reply error occurred while verifying reachability by reading \\"%s\\" register" << error << m_testRechableReply->errorString();' % (className, checkReachableRegister['description']))
|
||||
writeLine(fileDescriptor, ' });')
|
||||
writeLine(fileDescriptor, '}')
|
||||
writeLine(fileDescriptor)
|
||||
|
|
@ -302,6 +307,10 @@ def writeVerifyReachabilityImplementationsRtu(fileDescriptor, className, registe
|
|||
def writeInitMethodImplementationRtu(fileDescriptor, className, registerDefinitions, blockDefinitions):
|
||||
writeLine(fileDescriptor, 'bool %s::initialize()' % (className))
|
||||
writeLine(fileDescriptor, '{')
|
||||
writeLine(fileDescriptor, ' if (!m_reachable) {')
|
||||
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Tried to initialize but the device is not to be reachable.";' % className)
|
||||
writeLine(fileDescriptor, ' return false;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
|
||||
# First check if there are any init registers
|
||||
initRequired = False
|
||||
|
|
@ -470,7 +479,7 @@ def writeUpdateMethodRtu(fileDescriptor, className, registerDefinitions, blockDe
|
|||
writeLine(fileDescriptor, ' // Hardware resource available but communication not working. ')
|
||||
writeLine(fileDescriptor, ' // Try to read the check reachability register to re-evaluatoe the communication... ')
|
||||
writeLine(fileDescriptor, ' if (m_modbusRtuMaster->connected() && !m_communicationWorking) {')
|
||||
writeLine(fileDescriptor, ' verifyReachability();')
|
||||
writeLine(fileDescriptor, ' testReachability();')
|
||||
writeLine(fileDescriptor, ' return false;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
|
|
|
|||
|
|
@ -269,33 +269,39 @@ def writeInternalBlockReadMethodImplementationsTcp(fileDescriptor, className, bl
|
|||
|
||||
##############################################################
|
||||
|
||||
def writeVerifyReachabilityImplementationsTcp(fileDescriptor, className, registerDefinitions, checkReachableRegister):
|
||||
def writeTestReachabilityImplementationsTcp(fileDescriptor, className, registerDefinitions, checkReachableRegister):
|
||||
|
||||
propertyName = checkReachableRegister['id']
|
||||
propertyTyp = getCppDataType(checkReachableRegister)
|
||||
|
||||
writeLine(fileDescriptor, 'void %s::verifyReachability()' % (className))
|
||||
writeLine(fileDescriptor, 'void %s::testReachability()' % (className))
|
||||
writeLine(fileDescriptor, '{')
|
||||
writeLine(fileDescriptor, ' if (m_testRechableReply)')
|
||||
writeLine(fileDescriptor, ' return;')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' // Try to read the check reachability register %s in order to verify if the communication is working or not.' % checkReachableRegister['id'])
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Verify reachability by reading \\"%s\\" register:" << %s << "size:" << %s;' % (className, checkReachableRegister['description'], checkReachableRegister['address'], checkReachableRegister['size']))
|
||||
writeLine(fileDescriptor, ' QModbusReply *reply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
||||
writeLine(fileDescriptor, ' if (!reply) {')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Test reachability by reading \\"%s\\" register:" << %s << "size:" << %s;' % (className, checkReachableRegister['description'], checkReachableRegister['address'], checkReachableRegister['size']))
|
||||
writeLine(fileDescriptor, ' m_testRechableReply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
||||
writeLine(fileDescriptor, ' if (!m_testRechableReply) {')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "Error occurred verifying reachability by reading \\"%s\\" register";' % (className, checkReachableRegister['description']))
|
||||
writeLine(fileDescriptor, ' return;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' if (reply->isFinished()) {')
|
||||
writeLine(fileDescriptor, ' reply->deleteLater(); // Broadcast reply returns immediatly')
|
||||
writeLine(fileDescriptor, ' if (m_testRechableReply->isFinished()) {')
|
||||
writeLine(fileDescriptor, ' m_testRechableReply->deleteLater(); // Broadcast reply returns immediatly')
|
||||
writeLine(fileDescriptor, ' m_testRechableReply = nullptr;')
|
||||
writeLine(fileDescriptor, ' return;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
|
||||
writeLine(fileDescriptor, ' connect(m_testRechableReply, &QModbusReply::finished, this, [this](){')
|
||||
writeLine(fileDescriptor, ' // Note: we don\'t care about the result here, only the error')
|
||||
writeLine(fileDescriptor, ' handleModbusError(reply->error());')
|
||||
writeLine(fileDescriptor, ' handleModbusError(m_testRechableReply->error());')
|
||||
writeLine(fileDescriptor, ' m_testRechableReply->deleteLater();')
|
||||
writeLine(fileDescriptor, ' m_testRechableReply = nullptr;')
|
||||
writeLine(fileDescriptor, ' });')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [reply] (QModbusDevice::Error error){')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "ModbusRtu reply error occurred while verifying reachability by reading \\"%s\\" register" << error << reply->errorString();' % (className, checkReachableRegister['description']))
|
||||
writeLine(fileDescriptor, ' connect(m_testRechableReply, &QModbusReply::errorOccurred, this, [this] (QModbusDevice::Error error){')
|
||||
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "Modbus reply error occurred while verifying reachability by reading \\"%s\\" register" << error << m_testRechableReply->errorString();' % (className, checkReachableRegister['description']))
|
||||
writeLine(fileDescriptor, ' });')
|
||||
writeLine(fileDescriptor, '}')
|
||||
writeLine(fileDescriptor)
|
||||
|
|
@ -305,6 +311,10 @@ def writeVerifyReachabilityImplementationsTcp(fileDescriptor, className, registe
|
|||
def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefinitions, blockDefinitions):
|
||||
writeLine(fileDescriptor, 'bool %s::initialize()' % (className))
|
||||
writeLine(fileDescriptor, '{')
|
||||
writeLine(fileDescriptor, ' if (!m_reachable) {')
|
||||
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Tried to initialize but the device is not to be reachable.";' % className)
|
||||
writeLine(fileDescriptor, ' return false;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
|
||||
# First check if there are any init registers
|
||||
initRequired = False
|
||||
|
|
|
|||
|
|
@ -153,9 +153,10 @@ def writeTcpHeaderFile():
|
|||
writeLine(headerFile)
|
||||
writeLine(headerFile, ' void verifyUpdateFinished();')
|
||||
writeLine(headerFile)
|
||||
writeLine(headerFile, ' QModbusReply *m_testRechableReply = nullptr;')
|
||||
writeLine(headerFile, ' void handleModbusError(QModbusDevice::Error error);')
|
||||
writeLine(headerFile, ' void evaluateReachableState();')
|
||||
writeLine(headerFile, ' void verifyReachability();')
|
||||
writeLine(headerFile, ' void testReachability();')
|
||||
|
||||
# End of class
|
||||
writeLine(headerFile)
|
||||
|
|
@ -192,7 +193,7 @@ def writeTcpSourceFile():
|
|||
writeLine(sourceFile, ' m_pendingUpdateReplies.clear();')
|
||||
writeLine(sourceFile, ' m_communicationWorking = false;')
|
||||
writeLine(sourceFile, ' m_communicationFailedCounter = 0;')
|
||||
writeLine(sourceFile, ' verifyReachability();')
|
||||
writeLine(sourceFile, ' testReachability();')
|
||||
writeLine(sourceFile, ' } else {')
|
||||
writeLine(sourceFile, ' qCWarning(dc%s()) << "Modbus TCP connection diconnected from" << m_hostAddress.toString() << ". The connection is not reachable any more.";' % (className))
|
||||
writeLine(sourceFile, ' m_communicationWorking = false;')
|
||||
|
|
@ -328,7 +329,7 @@ def writeTcpSourceFile():
|
|||
writeLine(sourceFile, '}')
|
||||
writeLine(sourceFile)
|
||||
|
||||
writeVerifyReachabilityImplementationsTcp(sourceFile, className, registerJson['registers'], checkReachableRegister)
|
||||
writeTestReachabilityImplementationsTcp(sourceFile, className, registerJson['registers'], checkReachableRegister)
|
||||
|
||||
|
||||
# Write the debug print
|
||||
|
|
@ -474,9 +475,10 @@ def writeRtuHeaderFile():
|
|||
writeLine(headerFile)
|
||||
writeLine(headerFile, ' void verifyUpdateFinished();')
|
||||
writeLine(headerFile)
|
||||
writeLine(headerFile, ' ModbusRtuReply *m_testRechableReply = nullptr;')
|
||||
writeLine(headerFile, ' void handleModbusError(ModbusRtuReply::Error error);')
|
||||
writeLine(headerFile, ' void evaluateReachableState();')
|
||||
writeLine(headerFile, ' void verifyReachability();')
|
||||
writeLine(headerFile, ' void testReachability();')
|
||||
|
||||
|
||||
# End of class
|
||||
|
|
@ -515,7 +517,7 @@ def writeRtuSourceFile():
|
|||
writeLine(sourceFile, ' m_pendingUpdateReplies.clear();')
|
||||
writeLine(sourceFile, ' m_communicationWorking = false;')
|
||||
writeLine(sourceFile, ' m_communicationFailedCounter = 0;')
|
||||
writeLine(sourceFile, ' verifyReachability();')
|
||||
writeLine(sourceFile, ' testReachability();')
|
||||
writeLine(sourceFile, ' } else {')
|
||||
writeLine(sourceFile, ' qCWarning(dc%s()) << "Modbus RTU resource" << m_modbusRtuMaster->serialPort() << "disconnected. The connection is not reachable any more.";' % (className))
|
||||
writeLine(sourceFile, ' m_communicationWorking = false;')
|
||||
|
|
@ -662,7 +664,7 @@ def writeRtuSourceFile():
|
|||
writeLine(sourceFile, '}')
|
||||
writeLine(sourceFile)
|
||||
|
||||
writeVerifyReachabilityImplementationsRtu(sourceFile, className, registerJson['registers'], checkReachableRegister)
|
||||
writeTestReachabilityImplementationsRtu(sourceFile, className, registerJson['registers'], checkReachableRegister)
|
||||
|
||||
# Write the debug print
|
||||
debugObjectParamName = className[0].lower() + className[1:]
|
||||
|
|
|
|||
Loading…
Reference in New Issue