diff --git a/README.md b/README.md index 8ecc879..22a8308 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,12 @@ ecmc_plugin_safety IMPORTANT: This plugin or ecmc does NOT offer any safety certified functionality. This plugin only offers a standard interface to an external safety system / safety PLC / safety relay!!!! -This plugin is designed for interfacing safety systems to ecmc motion axes. +This plugin is designed for interfacing safety systems, see example in below picture, to ecmc motion axes. + +![Safety system](docs/safetyplc.png) # SS1-t -The plugin supports stopping axes according to a concept described as SS1-t, see blow picture. In SS1-t the STO (or removal of power) from the axes are delayed for a certain defined time allowing a controlled rampdown of velocity. The rampdown of the axis is handled by the non-safe motion controller while the removal of power (or triggering of STO) after the time delay is handled by a safetry system. This makes it possible to stop moving axes in a controlled way and disable the drives before the power is interrupted (or STO triggered). This will result in a safer system and less harware failures and error messages. +The plugin supports stopping axes according to a concept described as SS1-t, see below picture. In SS1-t the STO (or removal of power) from the axes are delayed for a certain defined time allowing a controlled rampdown of velocity. The rampdown of the axis is handled by the non-safe motion controller while the removal of power (or triggering of STO) after the time delay is handled by a safety system, . This makes it possible to stop moving axes in a controlled way and disable the drives before the power is interrupted (or STO triggered). This will result in a safer system and less harware failures and error messages. After the time delay expires, hopfully all axes are at standstill and power is already removed from the drives. @@ -28,8 +30,8 @@ The ecmcAddSS1SafetyGroup() adds a SS1 safety group. The command takes the follo ``` ecmcAddSS1SafetyGroup(, , ,) : Name of group. - : Ethercat entry input for rampdown cmd. - : Ethercat entry output for group standstill status. + : Ethercat entry input for rampdown cmd. + : Ethercat entry output for group standstill status. : Time delay of STO [ms]. ``` Each group is interfacing the safety system through the same I/O (ethercat). diff --git a/docs/safetyplc.png b/docs/safetyplc.png new file mode 100644 index 0000000..1d275cf Binary files /dev/null and b/docs/safetyplc.png differ diff --git a/scripts/addSS1Group.cmd b/scripts/addSS1Group.cmd index d9a4d7b..28832ba 100644 --- a/scripts/addSS1Group.cmd +++ b/scripts/addSS1Group.cmd @@ -16,18 +16,18 @@ #- #- Arguments: #- NAME : Name of safety group -#- EC_RAMP_DOWN_CMD : Ethercat entry for rampd down command (cmd from safety PLC/system) -#- EC_STANDSTILL_STAT : Ethercat entry for axes at standstill status (feedback to safety PLC/system) +#- EC_RAMP_DOWN : Ethercat entry for rampd down command (cmd from safety PLC/system) +#- EC_AXES_STANDSTILL : Ethercat entry for axes at standstill status (feedback to safety PLC/system) #- DELAY_MS : Time between rampdown command and STO #- ################################################################################# #- ecmcAddSS1SafetyGroup(, , ,) #- : Name of group. -#- : Ethercat entry input for rampdown cmd. -#- : Ethercat entry output for group standstill status. +#- : Ethercat entry input for rampdown cmd. +#- : Ethercat entry output for group standstill status. #- : Time delay of STO [ms]. -ecmcAddSS1SafetyGroup("${NAME}","${EC_RAMP_DOWN_CMD}","${EC_STANDSTILL_STAT}",${DELAY_MS=0}) +ecmcAddSS1SafetyGroup("${NAME}","${EC_RAMP_DOWN}","${EC_AXES_STANDSTILL}",${DELAY_MS=0}) #- Load SS1 group records dbLoadRecords("ss1.template","P=${ECMC_PREFIX},NAME=${NAME}") diff --git a/src/ecmcSafetyPlgWrap.cpp b/src/ecmcSafetyPlgWrap.cpp index d93b001..3239f2f 100644 --- a/src/ecmcSafetyPlgWrap.cpp +++ b/src/ecmcSafetyPlgWrap.cpp @@ -56,7 +56,7 @@ int createSafetyGroup(const char *name, // ensure group does not already exist ecmcSS1SafetyGroup* safetyGroup = getGroupFromName(name); if( safetyGroup ) { - printf("Safety: Error, group %s already defined. Plugin will unload.\n"); + printf("Safety: Error, group %s already defined. Plugin will unload.\n",name); throw std::runtime_error( "Safety: Error, group already defined."); }