Introduce DCMachineEvent ...

... this is an DC-Plugin internal data-structure which can be
transformed to an ATBMachineEvent and sent to ISMAS.

DCMachineEvent is in fact a couple ot DeviceController::State and a
QString eventID.

Thi eventID is necessary to send a state-reset to ISMAS. ISMAS needs
same enventID for set- and reset Events.
This commit is contained in:
Siegfried Siegert 2025-05-12 13:26:48 +02:00
parent 0876fa229e
commit 612a932b9f
Signed by: SiegfriedSiegert
GPG Key ID: 68371E015E8F0B03
2 changed files with 49 additions and 20 deletions

View File

@ -92,7 +92,7 @@ bool DeviceControllerDiag::isOperatingState()
return !this->_isErrorState; return !this->_isErrorState;
} }
QSet<DeviceController::State> DeviceControllerDiag::getCurrentMachineState() QSet<DCMachineEvent> DeviceControllerDiag::getCurrentMachineState()
{ {
return this->machineEventSet; return this->machineEventSet;
} }
@ -408,24 +408,21 @@ void DeviceControllerDiag::sub_componentAssessment()
// compare machineEventSets // compare machineEventSets
// New events: present in current but not previous // New events: present in current but not previous
QSet<DeviceController::State> newEvents = this->machineEventSet - this->previousMachineEventSet; QSet<DCMachineEvent> newEvents = this->machineEventSet - this->previousMachineEventSet;
// Reset events: present in previous but not current // Reset events: present in previous but not current
QSet<DeviceController::State> resetEvents = this->previousMachineEventSet - this->machineEventSet; QSet<DCMachineEvent> resetEvents = this->previousMachineEventSet - this->machineEventSet;
// Triggering Actions // Triggering Actions
// Iterate through the results // Iterate through the results
for (const DeviceController::State& event : newEvents) { for (const DCMachineEvent& event : newEvents) {
private_sendDiagEvent(event, DeviceController::Action::SET); // New event detected private_sendDiagEvent(event, DeviceController::Action::SET); // New event detected
} }
// Proposal: send reset // send reset
/* for (const DCMachineEvent& event : resetEvents) {
for (const DeviceController::State& event : resetEvents) {
private_sendDiagEvent(event, DeviceController::Action::RESET); // Event no longer present private_sendDiagEvent(event, DeviceController::Action::RESET); // Event no longer present
} }
*/
// finish diag // finish diag
@ -457,18 +454,26 @@ void DeviceControllerDiag::private_setDiagEvent(DeviceController::State result)
return; return;
} }
machineEventSet.insert(result); DCMachineEvent newState = DCMachineEvent(result, QUuid::createUuid().toString(QUuid::WithoutBraces).mid(0, 8));
machineEventSet.insert(newState);
} }
void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result, DeviceController::Action action)
{
QString eventId = QUuid::createUuid().toString(QUuid::WithoutBraces).mid(0, 8);
QString eventName = QMetaEnum::fromType<DeviceController::State>().valueToKey(result);; /**
* @brief DeviceControllerDiag::private_sendDiagEvent
* @param result WXXX | EXXX | O000
* @param action SET|RESET
*/
void DeviceControllerDiag::private_sendDiagEvent(DCMachineEvent result, DeviceController::Action action)
{
QString eventId = result.eventId;
QString eventName = QMetaEnum::fromType<DeviceController::State>().valueToKey(result.state);
EVENT_CLASS eventClass = EVENT_CLASS::STATE; EVENT_CLASS eventClass = EVENT_CLASS::STATE;
QString parameter; QString parameter;
switch (result) { switch (result.state) {
case DeviceController::State::INITIAL_STATE: case DeviceController::State::INITIAL_STATE:
break; break;
@ -612,7 +617,7 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result,
break; break;
} }
this->lastState = result; this->lastState = result.state;
/** /**
* Variant: send 'parameter' as JSON: * Variant: send 'parameter' as JSON:

View File

@ -72,6 +72,30 @@ namespace DeviceController {
} }
// ----------------------------- DCMachineEvent -----------------------------------------
class DCMachineEvent {
public:
DCMachineEvent() = default;
DCMachineEvent(DeviceController::State state, const QString& id) : state(state), eventId(id) {}
DeviceController::State state;
QString eventId;
// Equality operator (required for QSet)
bool operator==(const DCMachineEvent& other) const {
return (state == other.state);
}
};
// Hash function (required for QSet)
inline uint qHash(const DCMachineEvent& key, uint seed = 0) {
return qHash(static_cast<int>(key.state), seed);
}
// ------------------------ DeviceControllerDiag --------------------------------------
class DeviceControllerDiag : public QObject class DeviceControllerDiag : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -89,7 +113,7 @@ public:
*/ */
bool isErrorState(); bool isErrorState();
bool isOperatingState(); bool isOperatingState();
QSet<DeviceController::State> getCurrentMachineState(); QSet<DCMachineEvent> getCurrentMachineState();
void setTimeout(int timeout); void setTimeout(int timeout);
@ -129,8 +153,8 @@ private:
int lastVoltage; int lastVoltage;
DeviceController::State lastState; DeviceController::State lastState;
QSet<DeviceController::State> machineEventSet; QSet<DCMachineEvent> machineEventSet;
QSet<DeviceController::State> previousMachineEventSet; QSet<DCMachineEvent> previousMachineEventSet;
bool _isErrorState; bool _isErrorState;
PersistentData* pData; PersistentData* pData;
@ -142,7 +166,7 @@ private slots:
void private_startDiag(); // diag entry method void private_startDiag(); // diag entry method
void private_setDiagEvent(DeviceController::State result); void private_setDiagEvent(DeviceController::State result);
void private_sendDiagEvent(DeviceController::State result, DeviceController::Action action); void private_sendDiagEvent(DCMachineEvent result, DeviceController::Action action);
void sys_superviseSystem(); void sys_superviseSystem();