|
|
|
|
@ -272,49 +272,51 @@ def writePropertyUpdateMethodImplementationsTcp(fileDescriptor, className, regis
|
|
|
|
|
propertyName = registerDefinition['id']
|
|
|
|
|
writeLine(fileDescriptor, 'void %s::update%s()' % (className, propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, '{')
|
|
|
|
|
writeLine(fileDescriptor, ' // Update registers from %s' % registerDefinition['description'])
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size']))
|
|
|
|
|
|
|
|
|
|
if queuedRequests:
|
|
|
|
|
if 'readSchedule' in registerDefinition and registerDefinition['readSchedule'] == 'init':
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply)')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!m_currentInitReply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' // Update registers from %s' % registerDefinition['description'])
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size']))
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusReply *reply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (!reply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" init register from" << m_modbusTcpMaster->hostAddress().toString() << m_modbusTcpMaster->errorString();' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' finishInitialization(false);')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' reply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyInitFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedInitRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentInitReply, &QModbusReply::finished, m_currentInitReply, &QModbusReply::deleteLater);')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentInitReply, &QModbusReply::finished, this, [this](){')
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(m_currentInitReply->error());')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = reply;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply->error() != QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = m_currentInitReply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init \\"%s\\" registers" << m_currentInitReply->error() << m_currentInitReply->errorString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(reply->error());')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() != QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = reply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init \\"%s\\" registers" << reply->error() << reply->errorString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' } else {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init \\"%s\\" registers" << m_currentInitReply->error() << m_currentInitReply->errorString();' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init \\"%s\\" registers" << reply->error() << reply->errorString();' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor, ' finishInitialization(false);')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = m_currentInitReply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = reply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' process%sRegisterValues(unit.values());' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyInitFinished())')
|
|
|
|
|
@ -326,8 +328,11 @@ def writePropertyUpdateMethodImplementationsTcp(fileDescriptor, className, regis
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply)')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!m_currentUpdateReply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' // Update registers from %s' % registerDefinition['description'])
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size']))
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusReply *reply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (!reply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << m_modbusTcpMaster->errorString();' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyUpdateFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
@ -335,39 +340,44 @@ def writePropertyUpdateMethodImplementationsTcp(fileDescriptor, className, regis
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' reply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyUpdateFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentUpdateReply, &QModbusReply::finished, this, [this](){')
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(m_currentUpdateReply->error());')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply->error() == QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = m_currentUpdateReply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "<-- Response from \\"%s\\" register" << %s << "size:" << %s << unit.values();' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size']))
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = reply;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(reply->error());')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = reply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' process%sRegisterValues(unit.values());' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply->deleteLater();')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyUpdateFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' });')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentUpdateReply, &QModbusReply::errorOccurred, this, [this] (QModbusDevice::Error error){')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = m_currentUpdateReply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = reply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' } else {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << error << m_currentUpdateReply->errorString();' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description']))
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor, ' });')
|
|
|
|
|
else:
|
|
|
|
|
writeLine(fileDescriptor, ' // Update registers from %s' % registerDefinition['description'])
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size']))
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusReply *reply = read%s();' % (propertyName[0].upper() + propertyName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!reply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << m_modbusTcpMaster->errorString();' % (className, registerDefinition['description']))
|
|
|
|
|
@ -419,47 +429,51 @@ def writeBlockUpdateMethodImplementationsTcp(fileDescriptor, className, blockDef
|
|
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
|
|
|
|
|
if queuedRequests:
|
|
|
|
|
|
|
|
|
|
if 'readSchedule' in blockDefinition and blockDefinition['readSchedule'] == 'init':
|
|
|
|
|
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = readBlock%s();' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!m_currentInitReply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply)')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
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))
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusReply *reply = readBlock%s();' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!reply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading init block \\"%s\\" registers";' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' finishInitialization(false);')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' reply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyInitFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedInitRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentInitReply, &QModbusReply::finished, m_currentInitReply, &QModbusReply::deleteLater);')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentInitReply, &QModbusReply::finished, this, [this](){')
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(m_currentInitReply->error());')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = reply;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply->error() != QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = m_currentInitReply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentInitReply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init block \\"%s\\" registers" << m_currentInitReply->error() << m_currentInitReply->errorString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(reply->error());')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() != QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = reply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init block \\"%s\\" registers" << reply->error() << reply->errorString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' } else {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init block \\"%s\\" registers" << m_currentInitReply->error() << m_currentInitReply->errorString();' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating init block \\"%s\\" registers" << reply->error() << reply->errorString();' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' finishInitialization(false);')
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = m_currentInitReply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentInitReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = reply->result();')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' const QVector<quint16> blockValues = unit.values();')
|
|
|
|
|
writeLine(fileDescriptor, ' processBlock%sRegisterValues(blockValues);' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
@ -470,8 +484,11 @@ def writeBlockUpdateMethodImplementationsTcp(fileDescriptor, className, blockDef
|
|
|
|
|
writeLine(fileDescriptor, ' });')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
else:
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = readBlock%s();' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!m_currentUpdateReply) {')
|
|
|
|
|
|
|
|
|
|
writeLine(fileDescriptor, ' // Update register block \"%s\"' % blockName)
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read block \\"%s\\" registers from:" << %s << "size:" << %s;' % (className, blockName, blockStartAddress, blockSize))
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusReply *reply = readBlock%s();' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!reply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading block \\"%s\\" registers";' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyUpdateFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
@ -479,38 +496,44 @@ def writeBlockUpdateMethodImplementationsTcp(fileDescriptor, className, blockDef
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->isFinished()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' reply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyUpdateFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' return;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentUpdateReply, &QModbusReply::finished, this, [this](){')
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(m_currentUpdateReply->error());')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply->error() == QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = m_currentUpdateReply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = reply;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);')
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' handleModbusError(reply->error());')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusDevice::NoError) {')
|
|
|
|
|
writeLine(fileDescriptor, ' const QModbusDataUnit unit = reply->result();')
|
|
|
|
|
writeLine(fileDescriptor, ' const QVector<quint16> blockValues = unit.values();')
|
|
|
|
|
writeLine(fileDescriptor, ' processBlock%sRegisterValues(blockValues);' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply->deleteLater(); // Broadcast reply returns immediatly')
|
|
|
|
|
writeLine(fileDescriptor, ' m_currentUpdateReply = nullptr;')
|
|
|
|
|
writeLine(fileDescriptor, ' if (!verifyUpdateFinished())')
|
|
|
|
|
writeLine(fileDescriptor, ' QTimer::singleShot(%s, this, &%s::sendNextQueuedRequest);' % (queuedRequestsDelay, className))
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor, ' });')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
writeLine(fileDescriptor, ' connect(m_currentUpdateReply, &QModbusReply::errorOccurred, this, [this] (QModbusDevice::Error error){')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = m_currentUpdateReply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (m_currentUpdateReply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating block \\"%s\\" registers" << error << m_currentUpdateReply->errorString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [reply] (QModbusDevice::Error error){')
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusResponse response = reply->rawResult();')
|
|
|
|
|
writeLine(fileDescriptor, ' if (reply->error() == QModbusDevice::ProtocolError && response.isException()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating block \\"%s\\" registers" << error << reply->errorString() << ModbusDataUtils::exceptionCodeToString(response.exceptionCode());' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' } else {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating block \\"%s\\" registers" << error << m_currentUpdateReply->errorString();' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating block \\"%s\\" registers" << error << reply->errorString();' % (className, blockName))
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor, ' });')
|
|
|
|
|
else:
|
|
|
|
|
writeLine(fileDescriptor, ' // Update register block \"%s\"' % blockName)
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read block \\"%s\\" registers from:" << %s << "size:" << %s;' % (className, blockName, blockStartAddress, blockSize))
|
|
|
|
|
writeLine(fileDescriptor, ' QModbusReply *reply = readBlock%s();' % (blockName[0].upper() + blockName[1:]))
|
|
|
|
|
writeLine(fileDescriptor, ' if (!reply) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading block \\"%s\\" registers";' % (className, blockName))
|
|
|
|
|
@ -661,7 +684,6 @@ def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefiniti
|
|
|
|
|
# Read individual registers
|
|
|
|
|
for registerDefinition in registerDefinitions:
|
|
|
|
|
propertyName = registerDefinition['id']
|
|
|
|
|
propertyTyp = getCppDataType(registerDefinition)
|
|
|
|
|
|
|
|
|
|
if 'readSchedule' in registerDefinition and registerDefinition['readSchedule'] == 'init':
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
@ -800,6 +822,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe
|
|
|
|
|
|
|
|
|
|
writeLine(fileDescriptor, ' if (!m_updateRequestQueue.isEmpty()) {')
|
|
|
|
|
writeLine(fileDescriptor, ' qCDebug(dc%s()) << "Tried to update but there are still some update requests pending. Waiting for them to be finished..." << m_updateRequestQueue.count();' % className)
|
|
|
|
|
writeLine(fileDescriptor, ' sendNextQueuedRequest();')
|
|
|
|
|
writeLine(fileDescriptor, ' return true;')
|
|
|
|
|
writeLine(fileDescriptor, ' }')
|
|
|
|
|
writeLine(fileDescriptor)
|
|
|
|
|
|