void Executer::updateTimerProgress() { if(mExecutionPaused) return; ActionTools::ActionInstance *actionInstance = currentActionInstance(); switch(mExecutionStatus) { case PrePause: if(mExecutionTime.elapsed() >= actionInstance->pauseBefore() + mPauseBefore) { mExecutionTimer.stop(); startActionExecution(); } mExecutionWindow->setProgressValue(mExecutionTime.elapsed()); break; case Executing://Timeout if(mExecutionTime.elapsed() >= actionInstance->timeout()) { mExecutionTimer.stop(); actionInstance->disconnect(); actionInstance->stopExecution(); executionException(ActionTools::ActionException::TimeoutException, QString()); } mExecutionWindow->setProgressValue(mExecutionTime.elapsed()); break; case PostPause: if(mExecutionTime.elapsed() >= actionInstance->pauseAfter() + mPauseAfter) { mExecutionTimer.stop(); startNextAction(); } mExecutionWindow->setProgressValue(mExecutionTime.elapsed()); break; default: Q_ASSERT(false && "updateTimerProgress() called, but execution is stopped"); break; } }
BatteryControllerUpdater::BatteryControllerUpdater(BatteryController *mBatteryController, ModbusRtu *modbus, QObject *parent): QObject(parent), mBatteryController(mBatteryController), mDeviceAddress(mBatteryController->DeviceAddress()), mRegisterCount(0), mUpdatingController(false), mModbus(0), mAcquisitionTimer(new QTimer(this)), mTimeoutCount(0), mState(Init), mTmpState(Wait) { Q_ASSERT(mBatteryController != 0); mModbus = modbus; connect(mModbus, SIGNAL(readCompleted(int, quint8, const QList<quint16> &)), this, SLOT(onReadCompleted(int, quint8, QList<quint16>))); connect(mModbus, SIGNAL(writeCompleted(int, quint8, quint16, quint16)), this, SLOT(onWriteCompleted(int, quint8, quint16, quint16))); connect(mModbus, SIGNAL(errorReceived(int, quint8, int)), this, SLOT(onErrorReceived(int, quint8, int))); connect(mAcquisitionTimer, SIGNAL(timeout()), this, SLOT(onWaitFinished())); connect(mBatteryController, SIGNAL(clearStatusRegisterFlagsChanged()), this, SLOT(onClearStatusRegisterFlagsChanged())); connect(mBatteryController, SIGNAL(operationalModeChanged()), this, SLOT(onOperationalModeChanged())); connect(mBatteryController, SIGNAL(requestDelayedSelfMaintenanceChanged()), this, SLOT(onRequestDelayedSelfMaintenanceChanged())); connect(mBatteryController, SIGNAL(requestImmediateSelfMaintenanceChanged()), this, SLOT(onRequestImmediateSelfMaintenanceChanged())); connect(mBatteryController, SIGNAL(deviceAddressChanged()), this, SLOT(onDeviceAddressChanged())); mAcquisitionTimer->setSingleShot(true); mStopwatch.start(); startNextAction(); }
void BatteryControllerUpdater::onErrorReceived(int errorType, quint8 slaveAddress, int exception) { if (slaveAddress != mDeviceAddress) return; QLOG_DEBUG() << "ModBus Error:" << errorType << exception << "State:" << mState << "Slave Address" << slaveAddress << "Timeout count:" << mTimeoutCount; if (errorType == ModbusRtu::Timeout) { if (mTimeoutCount == MaxTimeoutCount) { if (!mBatteryController->serial().isEmpty()) { QLOG_ERROR() << "Lost connection to battery controller"; } mState = WaitOnConnectionLost; mTimeoutCount = MaxTimeoutCount - 1; mBatteryController->setSerial(QString()); mBatteryController->setConnectionState(Disconnected); } else { ++mTimeoutCount; } } startNextAction(); }