diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp index 4dd65043690de275dbd95fa51d717f88a91fa4c9..b478f9e5b2564b13a2e0e107dfae21fd7145a980 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp @@ -163,7 +163,7 @@ namespace armarx { const Management& m = p->_module<Management>(); long now = TimeUtil::GetTime(true).toMilliSeconds(); - if(!m.heartbeatRequired || now < m.controlLoopStartTime + m.heartbeatStartupMarginMS) + if (!m.heartbeatRequired || now < m.controlLoopStartTime + m.heartbeatStartupMarginMS) { return false; } @@ -209,16 +209,18 @@ namespace armarx rtSwitchControllerSetupChangedControllers = false; - // !emergencyStop && !rtIsInEmergencyStop() -> normal control flow - // !emergencyStop && rtIsInEmergencyStop() -> force switch to reactivate old ( + reset flag) - // emergencyStop && !rtIsInEmergencyStop() -> deactivate all + set flag - // emergencyStop && rtIsInEmergencyStop() -> nothing to do + // a missing hearbeat (if required by the config) is interpreted as emergencyStop == true - if(!emergencyStop && ManagementAttorneyForControlThread::HeartbeatMissing(this)) + if (!emergencyStop && ManagementAttorneyForControlThread::HeartbeatMissing(this)) { - emergencyStop = true; + rtSetEmergencyStopState(EmergencyStopState::eEmergencyStopActive); ARMARX_RT_LOGF_ERROR("Emergency Stop was activated because hearbeat is missing!"); } + + // !emergencyStop && !rtIsInEmergencyStop() -> normal control flow + // !emergencyStop && rtIsInEmergencyStop() -> force switch to reactivate old ( + reset flag) + // emergencyStop && !rtIsInEmergencyStop() -> deactivate all + set flag + // emergencyStop && rtIsInEmergencyStop() -> nothing to do if (emergencyStop) { if (rtIsInEmergencyStop())