From 7017e613b16b761ca530c9078cc0d714a4015009 Mon Sep 17 00:00:00 2001
From: anderssandstrom
Make sure the EL1252-0050 has a 5V power supply by an EL9505 (or similar), before powering the system. If the terminal is powered with the normal 24V it will most likely break
A 5v signal will not be detected with the 24V version (EL1252), the terminal will however not be damaged. Further more, it’s not a good idea to to power the 24V version with 5V (EL9505, or similar)
If the El70x1 is in error or warning state, further information about the reason for the error/warning can be read from the drives diagnostic register by using the ethercat command. See command line interface.
In order to use the ethercat command, you must first login to the server where the ecmc IOC is running.
The diagnostic data can be read from register Index A010 STM Diag data Ch.1 with the following syntax:
The ecmccfg/utils/read_el70xx_diag.sh tool can be used to read all the diagnostic registers:
bash read_el70xx_diag.sh <master_id> <slave_id>
+ecmccfg > manual > knowledge base > hardware > EL70x1
If the El70x1 is in error or warning state, further information about the reason for the error/warning can be read from the drives diagnostic register by using the ethercat command. See command line interface.
In order to use the ethercat command, you must first login to the server where the ecmc IOC is running.
The diagnostic data can be read from register Index A010 STM Diag data Ch.1 with the following syntax:
The ecmccfg/utils/read_el70xx_diag.sh tool can be used to read all the diagnostic registers:
bash read_el70xx_diag.sh <master_id> <slave_id>
Example: master 0, slave 3, drive under voltage warning
bash read_el70xx_diag.sh 0 3
#########################################################
@@ -42,5 +42,11 @@
Default they are set to 100% which is normally is too high for most applications. Start by setting these parameters to 0.8011:01 Kp and 8011:02 Ki factor:
This is the current loop settings and this is also what affect the performance. The higher you set these registers, the stiffer the control loop.
For most applications it is important to keep a ration of 40:1.
Default is 400 / 10, if you want a stiffer loop, then change to f ex 800 / 20 and onwards.
-Increase until the motor misbehaves and go back to a safe setting.
The EL704x stepper drives are default setup to a maximum velocity range of +-2000 full-steps/s. The 16bit velocity setpoint that are sent to the drive corresponds to this range. The speed range for the EL704x can however be changed by setting SDO 8012:05:
0 for 1000 full-steps/second
+1 for 2000 full-steps/second (default)
+2 for 4000 full-steps/second
+3 for 8000 full-steps/second
+4 for 16000 full-steps/second
+5 for 32000 full-steps/second
+
The drive scaling in the axis yaml configuration must be updated if the speed range is changed. See scaling.
In the standard setup at PSI over current protection modules are used to feed 24V to both the EtherCAT communication bus (E-bus) and the power bus of the EtherCAT slaves. If the over current protection is not enabled then the EtherCAT slaves will not receive power.
First time, (and only first time), a system is in use, the over-current modules needs to be enabled in order to allow current to flow. Enabling is done by push buttons in the LED area of the module. The long horizontal LEDs are in fact buttons that can be used to activate or tripp the over current protection.
Before pressing any button, check the electrical drawings and make sure it’s safe to power on the system.
The EL9221-5000 has one channel and therefore only the top button is needed to be pressed.
The EL9227-5500 is a 2 channel module and normally both channels needs to be enabled by pressing both the top and bottom long LED. if only one are pressed it could result in that the power to the communication is fine but the power to the i/o bus is lacking. This can result in strange issues. Both EL9227-5500 and EL9221-5000 have dedicated panels where status of the over current protection can be seen.
Some terminals are passive. Passive terminals are not EtherCAT slaves and do not communicate over EtherCAT (not equipped with EtherCAT slave controller). Passive terminals are normally used to simplify electrical connections (avoiding external terminals). For instance for distributing potential, 24V and 0V, an EL9184 can be used (8Ch 24V and 8Ch 0V).
The passive terminals will not show up as an EtherCAT slave when issuing the “ethercat slaves” command. However, they are normally visible in the electrical drawings. This could result in that the slave id in the electrical drawing is NOT corresponding to the EtherCAT slave index used when configuring ecmc. In worst case this could lead to that the wrong hardware/drive is configured.
When configuring ecmc, make sure the EtherCAT slave index is correct, do not blindly trust the electrical drawings since a passive terminal could introduce an shift in the slave indices.
24V is the most common signal level for the terminals, however, a few terminals also support other voltage levels, for instance 5V. +ecmccfg > manual > knowledge base > hardware > ELxxxx
24V is the most common signal level for the terminals, however, some also support other voltage levels, for instance 5V, or 12V or…. In that case, normally the terminal needs to be powered with the same voltage. -For 5V terminals, normally this is handled by adding a EL9505 before the 5v terminal in the ethercat chain. The EL9505 will supply the power bus with 5V instead of the normal 24V .
Example of slaves needing 5V power supply:
If a 5V terminal is supplied with 24V it will most likely break. Make sure the terminals has the correct power supply before powering the system.
The voltage level of the power bus after (downstream) of a 5V terminal is normally also 5V, if another voltage is needed then another system terminal is needed to set a new voltage level of the power bus
Example of slaves needing 5V power supply:
If a 5V terminal is supplied with 24V it will most likely break. Make sure the terminals has the correct power supply before powering the system.
The voltage level of the power bus after (downstream) of a 5V terminal is normally also 5V, if another voltage is needed then another system terminal is needed to set a new voltage level of the power bus
Blindly restarting the IOC, with only partially working EtherCAT hardware, WILL RESULT IN TOTAL FAILURE OF THE IOC!!!
Check the hardware BEFORE restarting the IOC!
High latency, more than 10% of the ethercat cycle time, can in worse case result, in lost ethercat frames, which of course is not an ideal situation. High latency of the ecmc_rt thread can be related to:
Check which driver is in use by running (on the ecmc server):
lsmod | grep ec_
+ecmccfg > manual > knowledge base > host / ecmc server
High latency, more than 10% of the ethercat cycle time, can in worse case result, in lost ethercat frames, which of course is not an ideal situation. High latency of the ecmc_rt thread can be related to:
Check which driver is in use by running (on the ecmc server):
lsmod | grep ec_
If the ec_master is using the ec_generic driver then a switch to igb driver is recommended.
The file /ioc/hosts/<hostname>/cfg/ETHERCATDRVR is listing the available drivers.
The recommended contents of the ETHERCATDRVR file is:
DEVICE_MODULES="igb generic"
In this case, the system will first try to use igb driver, if not possible it will fallback to the generic driver. After editing the file, the host needs to be rebooted in order for the changes to take effect.
** Reduce sample rate** @@ -23,4 +23,4 @@ ...
For more information see the chapter describing startup.cmd.
As a comparison, TwinCAT default EtherCAT rates are:
Issues that could occur in rates below 100Hz:
Issues that could occur in rates over 1Kz:
NOTE: Some slave might support a high rate but could have built in signal filters of several ms which then makes sampling at higher freqs unnecessary/not needed.
In order to successfully run an ecmc ethercat system at higher rates some tuning might be needed:
Due to the complexity an EtherCAT bus topology can assume, troubleshooting can be challenging. This guide should provide the basic means to diagnose simple errors and is by no means complete!
A very powerful tool is provided through the command line. See a summary, incl. some examples of what possible here.
For motion related issues, a very short troubleshooting guide is provided here.
For hardware related issues, a very short troubleshooting guide is provided here.
Tune drive control loops
The “BOTH_LIMITS” error can be related to that limits switches are not powered with 24V. As standard at PSI, limits are feed from 24V outputs, normally an EL2819 terminal. Basically the outputs needs then to be set to 1 in order to power the switches. Check the schematics in order to find out which output that powers the switches for a certain axis and then use one the following approaches to set it to 1:
Define the output in axis yaml file:
axis:
+ecmccfg > manual > knowledge base > motion
The “BOTH_LIMITS” error can be related to that limits switches are not powered with 24V. As standard at PSI, limits are feed from 24V outputs, normally an EL2819 terminal. Basically the outputs needs then to be set to 1 in order to power the switches. Check the schematics in order to find out which output that powers the switches for a certain axis and then use one the following approaches to set it to 1:
Define the output in axis yaml file:
axis:
id: 1 # Axis id
...
feedSwitchesOutput: ec0.s5.binaryOutput02 # Ethercat entry for feed switches
...
By using the command Cfg.WriteEcEntryEcPath(ec<master_id>.s<slave_id>.binaryOutput<id>,<value>):
ecmcConfigOrDie "Cfg.WriteEcEntryEcPath(ec0.s5>.binaryOutput02,1)"
-
A position lag error (following error) can be generated in the following situations:
Before increase current to the motor, make sure that both motor and drive can handle the higher current. Extra care needs to be taken for vacuum applications.
Check the scaling documentation here. -One way to test if the scaling is correct is to set all controller parameters (except Kff) to 0 and then initiate a move. Basically the actual position of the axis should follow the setpoint closely with teh same slope. If the slope differs, then the scaling factors are wrong.
If a stepper motor stalls because of too high velocity there’s a few thing that can be done in order to improve the ability to reach higher velocities:
Before increase current to the motor, make sure that both motor and drive can handle the higher current. Extra care needs to be taken for vacuum applications.
For EL704x stepper drives are default setup to maximum velocity range of +-2000 full-steps/s. The 16bit velocity setpoint that are sent to the drive corresponds to this range. Basically trying to write a higher value than that will saturate the velocity setpoint resulting in that the required speed is not achieved, resulting in position lag error. The speed range for the EL704x can however be changed by setting SDO 8012:05:
0 for 1000 full-steps/second
-1 for 2000 full-steps/second (default)
-2 for 4000 full-steps/second
-3 for 8000 full-steps/second
-4 for 16000 full-steps/second
-5 for 32000 full-steps/second
-
After changing this value you also need to change the drive scaling in the axis yaml file.
First check the dedicated hardware drive panel for diagnostics. If the drive is in warning or error state the diagnose the problem with the tool described in hardware.
Possible reasons:
This procedure is for experts only. You run the risk of destroying expansive devices! Limit switches are not obeyed! YOU HAVE BEEN WARNED!
For this however, the IOC needs to be reconfigured to not link the hardware to an axis!
dbgrep "*s007*"
-Drv01-Cmd
and -Drv01-Spd
-Drv01-Cmd
to 1
and check the amplifier did enable, if you don’t know how to check for an enabled amplifier, you should not use this command!-Drv01-Spd
. Depending on the scaling, the number might be in the range of 1..1000.A position lag error (following error) can be generated in the following situations:
Before increase current to the motor, make sure that both motor and drive can handle the higher current. Extra care needs to be taken for vacuum applications.
Check the scaling documentation here. +One way to test if the scaling is correct is to set all controller parameters (except Kff) to 0 and then initiate a move. Basically the actual position of the axis should follow the setpoint closely with the same slope. If the slope differs, then the scaling factors are wrong.
If a stepper motor stalls because of too high velocity there’s a few thing that can be done in order to improve the ability to reach higher velocities:
Before increase current to the motor, make sure that both motor and drive can handle the higher current. Extra care needs to be taken for vacuum applications.
The velocity setpoint of drives covers a certain velocity range:
If a velocity outside the velocity range is requested, the velocity setpoint will be saturated and the requested velocity will not be reached resulting in a position lag error.
For EL70xx drives the velocity range can be configured to other values than the default +-2000full-steps/s. See +el70x1 speed range for setting other velocity range.
First check the dedicated hardware drive panel for diagnostics. If the drive is in warning or error state then, if an EL70x1 drive, diagnose the problem further with the tool described in hardware.
Possible reasons:
This procedure is for experts only. You run the risk of destroying expansive devices! Limit switches are not obeyed! YOU HAVE BEEN WARNED!
For this however, the IOC needs to be reconfigured to not link the hardware to an axis!
dbgrep "*s007*"
-Drv01-Cmd
and -Drv01-Spd
-Drv01-Cmd
to 1
and check the amplifier did enable, if you don’t know how to check for an enabled amplifier, you should not use this command!-Drv01-Spd
. Depending on the scaling, the number might be in the range of 1..1000.For an overview of an ecmc system, the ecmcMain.ui panel is a good starting point. The ecmcMain.ui covers most parts of an ecmc system:
The panel is started with the following syntax:
caqtdm -macro "IOC=<ioc_name>" ecmcMain.ui
There are normally several control loops in an ecmc motion system:
The position loop control parameters can be accessed and tuned by PVs. Normally, a pure P controller is enough (ki and kp set to 0) but sometimes the I and D part can be needed.
Backlash
Tuning systems with backlash can be difficult. Sometimes a small D-part helps to reduce spikes in the centralized ecmc position loop controller output.
These control loops need to be tuned in the drive.
For EL70x1, see EL70x1 Tuning For other drives, consult the dedicated manual.
This is the respective plc file
ax${AXIS_NO}.enc.actpos:=(ax{{ var.ty1 }}.enc.actpos+ax{{ var.ty2 }}.enc.actpos)/2;
Note the mixed use to MACROs ${AXIS_NO}
and local variables {{ var.ty1 }}
to boost flexibility.
This will affect the motorRecord only, thus ECMC internally is still moving in the wrong direction. You have been warned!
Will result in the below if setting the DBG='' (and some other macros, see above):
println('Value: ', ec0.s10.binaryOutput01);
Always add a description when creating a PLC by setting the DESC macro when calling loadPLCFile.cmd.
Example:
${SCRIPTEXEC} ${ecmccfg_DIR}loadPLCFile.cmd, "FILE=./cfg/main.plc, INC=.:./cfg/, DESC='Toggle some bits', SAMPLE_RATE_MS=1000, PLC_MACROS='BO_S_ID=${ECMC_EC_SLAVE_NUM}'"
The description can maximum be 40 chars long.
iocsh
call
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}loadYamlPlc.cmd" "FILE=./plc1File.yaml, ECMC_TMPDIR=/tmp/"
Validates requested oversampling factor
Checks if requested oversampling factor is valid otherwise exits EPICS/ECMC
Anders Sandstroem
Validates the resulting sampling time for oversampling slaves.
Checks if the resulting sampling time for oversampling slaves is higher or equal to the minimum time.
Anders Sandstroem
Validates current settings
Checks if requested run current and standby current is less than max current and larger than 0.
Anders Sandstroem
Validates requested voltage
Ensure requested nominal voltage is less than max voltage and larger than 0
Anders Sandstroem
Add general PVs
Script for adding general and master diagnostics EPICS PVs
Niko Kivel, Anders Sandstroem
Script for general diagnostics
Script for setting default diagnostics
Niko Kivel, Anders Sandstroem
Initialization script
Script for setting up the basic EPICS environment.
Niko Kivel, Anders Sandstroem
Init main script
Script for setting up the basic EPICS environment.
Niko Kivel, Anders Sandstroem
init axis environment
Script for setting up the basic AXIS environment.
Niko Kivel, Anders Sandstroem
Issue a warning
Generic verification script for expressions
Anders Sandstroem
Generic verification script
Generic verification script for expressions
Anders Sandstroem
Script for adding axis related EPICS PVs.
Adds motorRecord to the IOC.
Anders Sandstroem
This script is typically called by \b addAxis.cmd
Script for configuring a physical axis.
Configures a physical axis in ECMC, based on previously set environment variables.
Anders Sandstroem
This script is typically called by \b addAxis.cmd, often via \b ecmc_axis-records.cmd
Script for adding axis diagnostic EPICS PVs.
Adds diagnostic PVs to the IOC.
Anders Sandstroem
Script for loading motor record related databases
Script for loading motor record related databases and creating motor record axis object
Anders Sandstroem
This script is typically called by \b ecmc_axis.cmd, often via \b ecmc_axis-records.cmd
Script for configuring axis synchronization
Configures ECMC for axis synchronization, based on previously set environment variables.
Anders Sandstroem
This script is typically called by \b applyAxisSynchronization.cmd
Script for adding encoder related EPICS PVs.
Script for adding an encoder to a previously created axis.
Anders Sandstroem
This script is typically called by \b addAxis.cmd
Script for adding an extra encoder
Configures a encoder object in ECMC, based on previously set environment variables.
Anders Sandstroem
This script is typically called by \b addEncoder.cmd
Script for adding axis related EPICS PVs.
Adds motorRecord to the IOC.
Anders Sandstroem
This script is typically called by \b addVirtualAxis.cmd
Script for configuring a virtual axis.
Configures a virtual axis in ECMC, based on previously set environment variables.
Anders Sandstroem
This script is typically called by \b addVirtualAxis.cmd, often via \b ecmc_virt_axis-records.cmd
Script for defining ${ECMC_PREFIX}
Gathers relevant information about MasterID, SlaveID, … to create naming convention compliant PREFIX
Niko Kivel
Script for defining ${ECMC_P}
Gathers relevant information about MasterID, SlaveID, … to create naming convention compliant PREFIX
Niko Kivel
Script for defining ${ECMC_P}
Gathers relevant information about MasterID, SlaveID, … to create naming convention compliant PREFIX
Niko Kivel
Script for adding axis EPICS PVs.
Adds an motion axis.
Niko Kivel
Script for adding dataStorage.
Adds dataStorage buffer.
Anders Sandstroem
DS_SIZE Size of data buffer.
DS_ID (optional), default 0, buffer ID
DS_TYPE (optional), default 0, 0: Normal Buffer, 1: Ring Buffer, 2: FIFO Buffer
SAMPLE_RATE_MS (optional), default 1
DS_DEBUG (optional), default 0, 0: No debug printouts, 1: Debug printouts
DESC (optional) Description of PLC
Example calls:
${SCRIPTEXEC} ${ecmccfg_DIR}addDataStorage.cmd "DS_ID=1, DS_SIZE=1000, SAMPLE_RATE_MS=100"
Script for adding an EtherCAT domain.
Adds an EtherCAt domain.
Anders Sandström
EXE_RATE (optional) Execution rate [cycles] defaults 0 (same EC_RATE)
EXE_OFFSET (optional) Execution offset cycles [cycles] defaults 0
ALLOW_OFFLINE (optional) Allow domain to be offline defaults 0
All EtherCAT entries generated after this command will be assigned
Script for adding a ethercat data item.
The ethercat data item allows for accessing alreday configured ethercat domain data in a flexible
Anders Sandström
Script for adding asyn SDO object (access to SDO:s in realtime)
Add SDO for async access during realtime operation
Anders Sandström
Script for adding an extra encoder to an axis.
Adds an encoder to the last configured axis.
Niko Kivel
CONFIG configuration file, i.e. ./cfg/axis_1_enc_2.enc
DEV (optional) device name, i.e. MOTOR1
CLEAR_VARS_CMD (optional) Set to “empty” for not clear env vars (if vars needed for later use).
CFG_MACROS (optional) Substitution macros for config file
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}addEncoder.cmd, "CONFIG=./cfg/linear_1_enc_3.enc"
Script for claiming a particular master.
Claims an EtherCAT master.
Niko Kivel
MASTER_ID (optional) master ID as shown by ethercat master
.
Example calls:
${SCRIPTEXEC} ${ecmccfg_DIR}addMaster.cmd
${SCRIPTEXEC} ${ecmccfg_DIR}addMaster.cmd, "MASTER_ID=3"
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL1018, SLAVE_ID=1, P_SCRIPT=mXsXXX"
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL3204, DEFAULT_SUBS=false, DEFAULT_SLAVE_PVS=true"
Script for adding a KL slave to the EtherCAT bus configuration of KL type.
Adds the respective hardware to the bus configuration, adds specific and default PV to the EPICS database. For some/most slaves also a default
Anders Sandstrom
HW_DESC Hardware descriptor, i.e. KL2032
SLAVE_ID EtherCAT bus position of the BK1250 (or similar terminal)
SLAVE_ID_KL KL-Bus index in two digit hex starting at zero for the first slave after BK1250 (or similar terminal)
SUBST_FILE (optional) substitution file
Example calls:
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL1018, SLAVE_ID=1, SLAVE_ID_KL=0A"
Script for adding axis EPICS PVs.
Adds an virtual axis with PVs.
Niko Kivel
Script for applying axis synchronization
Adds synchronization parameters to an axis provided by CONFIG.
Niko Kivel
CONFIG configuration file, i.e. ./cfg/linear_1.sax
CLEAR_VARS_CMD (optional) Set to “empty” for not clear env vars (if needed vars for later use).
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}applyAxisSynchronization.cmd, "CONFIG=./cfg/linear_1.sax"
Script for applying bus configuration.
Applies the EtherCAT configuration and caluclates data offsets in the process image.
Niko Kivel
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}applyConfig.cfg
Script for applying a specific slave configuration after the slave had been added manually.
Apply configurations to a slave.
Niko Kivel
Example call:
call applySlaveConfig with CONFIG
${SCRIPTEXEC} ${ecmccfg_DIR}applySlaveConfig.cmd, "CONFIG=-Motor-Nanotec-ST4118L1804-B"
call applySlaveConfig with LOCAL_CONFIG
${SCRIPTEXEC} ${ecmccfg_DIR}applySlaveConfig.cmd, "LOCAL_CONFIG=./myFancyServoConfig.cfg"
Script for applying dc config to slave
Apply dc configurations to a slave.
Anders Sandstroem
Script for applying substitution file
Applies substitution from ${SUBST_FILE} with ${P_SCRIPT}
Niko Kivel
SUBST_FILE (optional) substitution file
ECMC_P PV prefix
P_SCRIPT (optional) naming convention prefix script
NELM (optional) Used for oversampling cards. Defaults to 1
Example calls:
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}applySubstitutions.cmd" "SUBST_FILE=${SUBST_FILE=ecmc${ECMC_EC_HWTYPE}.substitutions},ECMC_P=${ECMC_P}"
Script for applying a template
Applies template from ${TEMPLATE_FILE} with ${P_SCRIPT}, PARAMS can be passed
Niko Kivel
TEMPLATE_FILE template file
ECMC_P PV prefix
PARAMS (optional) additional parameters
Example calls:
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=${ECMC_P}"
Script for adding an axis with configuration.
Adds an axis to the configuration and applies parameters provided by CONFIG.
Niko Kivel
CONFIG configuration file, i.e. ./cfg/linear_1.pax
DEV (optional) device name, i.e. MOTOR1
CLEAR_VARS_CMD (optional) Set to “empty” for not clear env vars (if vars needed for later use).
CFG_MACROS (optional) Substitution macros for config file
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}configureAxis.cmd, "CONFIG=./cfg/linear_1.pax"
Script for adding a slave with dedicated slave configuration to the EtherCAT bus configuration.
Adds the respective hardware to the bus configuration, adds specific and default PV to the EPICS database. Applies a specific slave configuration.
Niko Kivel
HW_DESC Hardware descriptor, i.e. EL7037
CONFIG configuration file, i.e. -Motor-Nanotec-ST4118L1804-B
The CONFIG together with the HW_DESC form the full filename which by definition is ecmc${HW_DESC}${CONFIG}.cmd, i.e.: ecmcEL7037-Motor-Nanotec-ST4118L1804-B.cmd
SLAVE_ID (optional) bus position
CFG_MACROS (optional) Substitution macros for config file
NELM (optional) Used for oversampling cards. Defaults to 1
Example calls:
${SCRIPTEXEC} ${ecmccfg_DIR}configureSlave.cmd, "HW_DESC=EL7037, CONFIG=-Motor-Nanotec-ST4118L1804-B"
${SCRIPTEXEC} ${ecmccfg_DIR}configureSlave.cmd, "HW_DESC=EL7037, CONFIG=-Motor-Nanotec-ST4118L1804-B, SLAVE_ID=8"
Script for adding a virtual axis with configuration.
Adds a virtual axis to the configuration and applies parameters provided by CONFIG.
Niko Kivel
CONFIG configuration file, i.e. ./cfg/linear_11.vax
DEV (optional) device name, i.e. GAP
CLEAR_VARS_CMD (optional) Set to “empty” for not clear env vars (if needed vars for later use).
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}configureVirtualAxis.cmd, "CONFIG=./cfg/linear_11.vax"
Script for finalizing. Executed just before iocInit (atInit)
Script for finalizing. Executed just before iocInit (atInit).
Anders Sandström
Script for loading Axis from yaml file via jinja2
adds an Axis, based on a yaml config file
Niko Kivel, Anders Sandström
FILE the yaml-file containing the PLC definition
DEV the device name (optional, defaults to ${IOC}
Example calls:
${SCRIPTEXEC} "./loadYamlAxis.cmd" "FILE=./axis1.yaml"
${SCRIPTEXEC} "./loadYamlAxis.cmd" "FILE=./axis1.yaml, DEV=foobar"
Script for adding Encoder from yaml file via jinja2
adds an encoder to an axis, based on a yaml config file
Anders Sandström
FILE the yaml-file containing the PLC definition
DEV the device name (optional, defaults to ${IOC}
Example calls:
${SCRIPTEXEC} "./loadYamlEnc.cmd" "FILE=./enc.yaml"
${SCRIPTEXEC} "./loadYamlEnc.cmd" "FILE=./enc.yaml, DEV=foobar"
Script for loading PLC from yaml file via jinja2
adds a PLC, line by line, from a yaml-file, parsed by jinja2
Niko Kivel, Anders Sandström
FILE the yaml-file containing the PLC definition
Example calls:
${SCRIPTEXEC} "./loadYamlPlc.cmd" "FILE=./plc1.yaml"
Script for adding a PLC from file.
Adds a PLC defined in FILE. Also adds PLC specific EPICS PVs, i.e. for enable/disable.
Niko Kivel
FILE PLC definition file, i.e. ./plc/homeSlit.plc
AX_ID (optional) Ax number, default 0
PLC_MACROS (optional) Substitution macros for PLC code
TMP_PATH (optional) directory to dump the temporary plc file after macro substitution
PRINT_PLC_FILE (optional) 1/0, printout msi parsed plc file (default enable(1)).
SUBST_FILE (optional) custom substitution file otherwise ecmccfg default will be loaded
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}loadAxisPLCFile.cmd, "AX_ID=1, FILE=./plc/homeSlit.plc"
Script for adding a PLC from file.
Adds a PLC defined in FILE. Also adds PLC specific EPICS PVs, i.e. for enable/disable.
Niko Kivel, Anders Sandström
FILE PLC definition file, i.e. ./plc/homeSlit.plc
PLC_ID (optional) PLC number, default 0, or to next free PLC, the actual PLC Id is stored in ECMC_PLC_ID and can be used after this command
SAMPLE_RATE_MS (optional) excecution rate, default 1000/EC_RATE
PLC_MACROS (optional) Substitution macros for PLC code. The macros “SELF_ID”,“SELF”,M_ID, and M are reserved:
TMP_PATH (optional) directory to dump the temporary plc file after macro substitution
PRINT_PLC_FILE (optional) 1/0, printout msi parsed plc file (default enable(1)).
SUBST_FILE (optional) custom substitution file otherwise ecmccfg default will be loaded
INC (optional) List of directories for include files to pass to MSI (if several paths thendivide with ‘:').
DESC (optional) Description of PLC
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}loadPLCFile.cmd, "PLC_ID=0, FILE=./plc/homeSlit.plc, SAMPLE_RATE_MS=100"
Script for loading a PLC from lib from file.
Adds a PLC defined in FILE. Also adds PLC specific EPICS PVs, i.e. for enable/disable.
Anders Sandström
FILE PLC definition file, i.e. ./plc/homeSlit.plc
PLC_ID (optional) PLC number, default last loaded PLC
PLC_MACROS (optional) Substitution macros for PLC code. The macros “SELF_ID”,“SELF”,M_ID, and M are reserved:
INC (optional) List of directories for include files to pass to MSI (if several paths thendivide with ‘:').
TMP_PATH (optional) directory to dump the temporary plc file after macro substitution
PRINT_PLC_FILE (optional) 1/0, printout msi parsed plc file (default enable(1)).
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}loadPLCLib.cmd, "PLC_ID=0, FILE=./plc/homeSlit.plc, SAMPLE_RATE_MS=100"
Script for loading a ecmc plugin from file.
Loads a ecmc-plugin from file.
Anders Sandström
FILE Filename of plugin shared lib (./ecmcPlugin_Advanced.so)
PLUGIN_ID Id of plugin to load
CONFIG (optional) Configuration string sent to plugin at construct
REPORT (optional) Printout information of loaded plugin if set to “1”
Example call:
${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=0,FILE=./ecmcPlugin_Advanced.so,CONFIG='PLUGIN CONFIGS GO HERE '
Script for adding multiple axes based on subst and template file
Configure multiple axes by using subst file
Anders Sandström
${SCRIPTEXEC} ${ecmccfg_DIR}loadSubstAxes.cmd, "FILE=./ax.subs"
Script for loading complete ecmc cfg based on subst files and templates
Loads complete ecmc cfg based on subst files and templates
Anders Sandström
${SCRIPTEXEC} ${ecmccfg_DIR}loadSubstConfig.cmd, "FILE=./cfg.subs"
Script for adding multiple hw based on subst and template file
Loads hw cfg based on subst files and templates
Anders Sandström
${SCRIPTEXEC} ${ecmccfg_DIR}loadSubstHw.cmd, "FILE=./hw.subs"
Restores record update rate to what was defined in startup.cmd
Restores record update rate to what was defined in startup.cmd
Anders Sandström
Script for switching to operational mode.
Validates configuration, starts realtime thread and checks EtherCAT slaves are in OP.
Niko Kivel
Script for enabling default diagnostics.
Set some default values to diagostics
Niko Kivel
Script for changing record update rate
Update record processing rate, all records created after this command will be updated in the specified rate.
Anders Sandström
** script for slave verification and optional reset**
will verify the slave identity and reset by writing to 0x1011, optionally read firmwre version from 0x100a
Niko Kivel
Macros