コード例 #1
0
ファイル: executer.cpp プロジェクト: WeDo30/actiona
	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;
		}
	}
コード例 #2
0
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();
}
コード例 #3
0
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();
}