Compare commits

..

3 Commits
2.2.7 ... 2.2.9

Author SHA1 Message Date
ac93e9e631 Send W255 on restart CArun 2024-07-15 11:09:37 +02:00
c1dd20ec4f Restart carun on consecutive E255 2024-07-15 11:09:28 +02:00
6c2717c56b Diag: check doors in sub_componentAssessment ...
... this prevents sending Operate "O000" in case of an opend door and
enables sending Operate "O000" after closing all doors because
'lastResult' has not changed.
2024-06-11 09:27:07 +02:00
2 changed files with 59 additions and 21 deletions

View File

@@ -5,6 +5,8 @@
#include <QUuid> #include <QUuid>
#include <QDebug> #include <QDebug>
#include <QProcess>
#include "support/JSON.h" #include "support/JSON.h"
@@ -18,6 +20,7 @@ DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *paren
, lastState(DeviceController::State::INITIAL_STATE) , lastState(DeviceController::State::INITIAL_STATE)
, _isErrorState(false) , _isErrorState(false)
, pData(pData) , pData(pData)
, E255counter(0)
{ {
diagRequestTimeoutTimer = new QTimer(this); diagRequestTimeoutTimer = new QTimer(this);
diagRequestTimeoutTimer->setInterval(1000*45); diagRequestTimeoutTimer->setInterval(1000*45);
@@ -104,14 +107,20 @@ void DeviceControllerDiag::private_startDiag()
this->private_sendDiagEvent(DeviceController::State::E255); this->private_sendDiagEvent(DeviceController::State::E255);
this->isRequestRunning = false; this->isRequestRunning = false;
this->flagInterruptDiag = false; this->flagInterruptDiag = false;
if (this->E255counter > 5) {
this->restartCArun();
}
else {
this->E255counter++;
// try it again, until success: // try it again, until success:
QTimer::singleShot(400, this, &DeviceControllerDiag::diagRequest); QTimer::singleShot(400, this, &DeviceControllerDiag::diagRequest);
/** /**
* But please note: * But please note:
* - diag does currently not stop suspend (start a background task) * - diag does currently not stop suspend (start a background task)
* - diag is called again in ModeOOO wokeup() * - diag is called again in ModeOOO wokeup()
*/ */
}
return; return;
} }
@@ -146,6 +155,8 @@ void DeviceControllerDiag::sys_superviseSystem()
this->private_sendDiagEvent(DeviceController::State::E255); this->private_sendDiagEvent(DeviceController::State::E255);
this->flagInterruptDiag = false; this->flagInterruptDiag = false;
this->isRequestRunning = false; this->isRequestRunning = false;
if (this->E255counter > 5) { this->restartCArun(); }
else { this->E255counter++; }
return; return;
} }
@@ -156,6 +167,8 @@ void DeviceControllerDiag::sys_superviseSystem()
this->private_sendDiagEvent(DeviceController::State::E254); this->private_sendDiagEvent(DeviceController::State::E254);
this->diagRequestTimeoutTimer->stop(); this->diagRequestTimeoutTimer->stop();
this->isRequestRunning = false; this->isRequestRunning = false;
if (this->E255counter > 5) { this->restartCArun(); }
else { this->E255counter++; }
return; return;
} }
@@ -168,7 +181,7 @@ void DeviceControllerDiag::sys_superviseSystem()
{ {
// noch keine Testergebnisse // noch keine Testergebnisse
if (dynMaCond.startupTestIsRunning) { if (dynMaCond.startupTestIsRunning) {
// TODO? qCritical() << " startupTestIsRunning --> call again";
} }
@@ -178,18 +191,6 @@ void DeviceControllerDiag::sys_superviseSystem()
return; return;
} }
// all doors: 99: undefined 0:closed 1:open
if (dynMaCond.lowerDoor || dynMaCond.upperDoor) {
// Service or battery door is open, goto INTRUSION MODE
qCritical() << "DeviceControllerDiag::sys_superviseSystem() Service or battery door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E253);
}
if (dynMaCond.middleDoor) {
// vault door is open, goto INTRUSION MODE
qCritical() << "DeviceControllerDiag::sys_superviseSystem() vault door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E252);
}
qCritical() << " --> call sub_componentAssessment()"; qCritical() << " --> call sub_componentAssessment()";
sub_componentAssessment(); sub_componentAssessment();
@@ -223,6 +224,21 @@ void DeviceControllerDiag::sub_componentAssessment()
this->private_sendDiagEvent(DeviceController::State::A000); this->private_sendDiagEvent(DeviceController::State::A000);
} }
// check for open doors
// all doors: 99: undefined 0:closed 1:open
if (dynMaCond.lowerDoor || dynMaCond.upperDoor) {
// Service or battery door is open
flag_sendOperate = false;
qCritical() << "DeviceControllerDiag::sys_superviseSystem() Service or battery door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E253);
}
if (dynMaCond.middleDoor) {
// vault door is open
flag_sendOperate = false;
qCritical() << "DeviceControllerDiag::sys_superviseSystem() vault door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E252);
}
// check for invalid states: // check for invalid states:
if (modCond.rtc>=200) { if (modCond.rtc>=200) {
@@ -567,6 +583,10 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
eventClass = EVENT_CLASS::WARNING; eventClass = EVENT_CLASS::WARNING;
parameter = "temperatur warning"; parameter = "temperatur warning";
break; break;
case DeviceController::State::W255: // restart carun
eventClass = EVENT_CLASS::WARNING;
parameter = "restart carun";
break;
} }
this->lastState = result; this->lastState = result;
@@ -596,3 +616,13 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
} }
/**
* reset / restart / reinit deviceController
*/
void DeviceControllerDiag::restartCArun()
{
this->E255counter = 0;
this->private_sendDiagEvent(DeviceController::State::W255);
QProcess::startDetached("/bin/systemctl", {"restart", "carun"});
}

View File

@@ -55,6 +55,8 @@ namespace DeviceController {
W003, W003,
W004, W004,
W255,
INITIAL_STATE INITIAL_STATE
}; };
Q_ENUM_NS(State) Q_ENUM_NS(State)
@@ -94,6 +96,11 @@ public slots:
*/ */
void diagReInit(); void diagReInit();
/**
* reset / restart / reinit deviceController
*/
void restartCArun();
signals: signals:
void diagResponse(ATBMachineEvent* machineEvent); void diagResponse(ATBMachineEvent* machineEvent);
@@ -118,6 +125,8 @@ private:
PersistentData* pData; PersistentData* pData;
int E255counter;
private slots: private slots:
void onDiagRequestTimeoutTimerTimeout(); void onDiagRequestTimeoutTimerTimeout();
@@ -126,7 +135,6 @@ private slots:
void sys_superviseSystem(); void sys_superviseSystem();
}; };
#endif // DEVICECONTROLLERDIAG_H #endif // DEVICECONTROLLERDIAG_H