diff --git a/404.html b/404.html index cef6ca275..44176b226 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -
Woops. Looks like this page doesn't exist ¯\_(ツ)_/¯.
Go to homepage
Built with from Grav and Hugo
A configuration framework for ECMC Motion Control Module for EPICS.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -10,4 +10,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
check the module loads for version dev, Epics R7+ and ECMC version dev, note MASTER_ID=-1 which runs ECMC in master-less mode. Make proper adjustments to match your needs in terms of versions.
dev
R7+
MASTER_ID=-1
iocsh -7 -r "ecmccfg,dev 'ECMC_VER=dev,MASTER_ID=-1'"
The default EtherCAT frame rate in ecmc is set to 1kHz. For most applications this is however not needed and can therefore be reduced. A reduced EtherCAT rate reduces the load on the controller. In general, a good value for the frame rate is in the range 100Hz to 1kHz. For motion systems, a frame rate of 100Hz..500Hz is normally enough. Rates outside the 100Hz..1kHz range is normally not a good idea, and some slaves might not support it. However, in special cases both lower and higher rates might be possible and required.
Example: Set rate to 500Hz
require ecmccfg "EC_RATE=500" ...
For more information see the chapter startup.cmd.
As a comparison, TwinCAT default EtherCAT rates are:
See host/ecmc_server for more information.
For more information see:
Add docs for:
In DAQ mode, motion functionalities are disabled and the following commands are blocked:
This mode is intended to be used for pure DAQ use cases.
Example of starting ecmc in DAQ mode:
$(ECMCCFG_INIT)$(SCRIPTEXEC) ${ecmccfg_DIR}startup.cmd, "IOC=$(IOC),ECMC_VER=develop,MODE=DAQ"
NOTE: The default record update rate is set to 10ms in initAlll.cmd. For DAQ applications it could be needed to change this parameter to update records faster by changing the ECMC_SAMPLE_RATE_MS variable:
epicsEnvSet("ECMC_SAMPLE_RATE_MS",1)
In this mode all features are supported, but motor record will not be created for motion axes.
Setting the parameter ENG_MODE=1 will result in loading of extra PVs usefull for commissioning, i.e. controller parameters for motion axes.
file
code
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}loadYamlPlc.cmd" "FILE=./plc1File.yaml, ECMC_TMPDIR=/tmp/"
${SCRIPTEXEC} ${ecmccfg_DIR}setAppMode.cmd
${SCRIPTEXEC} ${ecmccfg_DIR}loadYamlPlc.cmd "FILE=./plc1File.yaml"
See plc cfg for more information.
ethercat download
With this command the value of a register can be set on the slave.
If the type is not explicitly given, first issue ethercat -p <slaveID> sdos. This will allow implicit type handling.
type
ethercat -p <slaveID> sdos
Example: Set value of register 0x8010, sub-register 0x07 from slave 7 to 314.
0x8010
0x07
7
314
ethercat download -m0 -p7 0x8010 0x07 314
ethercat states
With this command a specific state of a slave can be forced, or at least an attempt to enter the specific state is made.
This is helpful when a slave is stuck, e.g. with an error. Rather than cycle the power of the entire controller, the slave can be set to ‘REBOOT’. This might be enough to recover.
Alternatively, cycling to ‘INIT’ and back to ‘OP’ might also be attempted.
A power cycling of the of the EtherCAT components is the last resort!
These terminals are very powerful since they can latch the time of the positive edge and/or negative edge of the input signal (independent of the ethercat bus rate). These timestamps can then be used to correlated other data, like encoders or analog inputs with timestamps.
IMPORTANT Sine the EL1252-0050 is a 5V terminal, it needs to be powered with 5V if the terminal is powered with 24V, the terminal will burn. The simplest way to achieve a correct power supply is by adding an EL9505 (or similar) before the EL1252-0050. See above for more information 5v-and-24v-terminals
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)
The status bits can then be masked away by:
The EL51xx series covers incremental encoder interfaces:
Normally, the incremental encoder interfaces do not require any SDO configuration. Therefore, the ecmccomp/applyComponent.cmd, which many times are needed after the ecmccfg/addSlave.cmd, is in most cases not needed.
Make sure you use the correct slave type when adding the slave. Some of the slaves have the same product id but totally different process data which can result in that the slave will not go into OP mode and ecmc will fail to start and a timeout will occur.
For example, the EL5101-0010 and EL5101-0011 has the same product id but very different process data. +ecmccfg > manual > knowledge base > hardware > EL51xx
For example, the EL5101-0010 and EL5101-0011 has the same product id but very different process data. So, if an EL5101-0011 is added to the configuration but the actual slave connected is an EL5101-0010, the initial product id verification will not catch the miss match. However, later the slave will not go online since the process data is wrong.
The issue can be diagnosed by checking the dmesg logs:
# first login to host (ecmc server) sudo dmesg
Configuring the wrong process data will lead to an error message “* EtherCAT * Invalid input configuration”
The solution is to use the correct configuration script.
This is commonly used at PSI (even though the EL5112 should be teh standard choice). For configuration, use the EL5101-0010 configuration script:
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "SLAVE_ID=16, HW_DESC=EL5101-0010" @@ -28,4 +28,4 @@ # EL5131_DC_TRG: Incremental encoder, access to timestamps and configuration of thresholds for outputs/triggering. ${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "SLAVE_ID=16, HW_DESC=EL5131_DC"
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 drive is in error/warning state and not possible to enable, see drive refuse to enable.
Further information about the error/warning can be read from from the drive’s diagnostic register, Index A010 STM Diag data Ch.1:
The ecmccfg/utils/read_el70xx_diag.sh tool can be used to read all the diagnostic registers of any ex70xx drive:
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 ######################################################### @@ -33,12 +33,11 @@ 0x00 0 ######################################################### - -
Note: The tool ecmccfg/utils/PDO_read can also be used for reading the diagnostics.
Use a multimeter to verify that the voltage level corresponds to voltage levels described in the electrical drawings. If the voltage is correct, then the under voltage alarm could be related to wrong setting of nominal drive voltage setting (48V but the drive is powered with 24V).
The nominal drive voltage setting can be changed by the U_NOM_MV macro when applying the component (ecmccomp).
Example: Set nominal voltage to 24V
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL7041-0052" +
Note: The toolecmccfg/utils/PDO_read can also be used for reading the diagnostics.
ecmccfg/utils/PDO_read
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL7041-0052" ${SCRIPTEXEC} ${ecmccomp_DIR}applyComponent.cmd "COMP=Motor-Generic-2Phase-Stepper, MACROS='I_MAX_MA=1000, I_STDBY_MA=500, U_NOM_MV=24000, R_COIL_MOHM=1230'"
For the EL703x drives the nominal voltage must be set to 24V (ecmccomp handles this automatically).
Use a multimeter to verify that the voltage level corresponds to voltage levels described in the electrical drawings. If the voltage is correct, then the over voltage alarm could be related to wrong setting of nominal drive voltage setting (24V but the drive is powered with 48V).
Example: Set nominal voltage to 48V
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL7041-0052" ${SCRIPTEXEC} ${ecmccomp_DIR}applyComponent.cmd "COMP=Motor-Generic-2Phase-Stepper, MACROS='I_MAX_MA=1000, I_STDBY_MA=500, U_NOM_MV=48000, R_COIL_MOHM=1230'" -
There are normally several control loops in an ecmc system:
However, for the EL70x1 drives there’s no dedicated velocity loop (however some current boost settings that can be applied in acc/dec, see below)
For more information on tuning the position loop see tuning
For most use cases, the default current controller parameters are already well tuned. Sometimes when operating at higher speeds the current loop needs to be tuned.
The following parameters can be tuned for a EL70x1 stepper drive:
8011:07 Ka factor / 8011:08 Kd factor are “current boosts” during acceleration/deceleration. +
However, for the EL70x1 drives there’s no dedicated velocity loop.
8011:07 Ka factor / 8011:08 Kd factor are “current boosts” during acceleration/deceleration. Default they are set to 100% which is normally is too high for most applications. Start by setting these parameters to 0.
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. @@ -48,5 +47,5 @@ 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.
When changing the speed range of the drive, also the drive scaling in the axis yaml configuration must be updated, 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, 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 a EL9505 is added before the 5v terminal in the ethercat chain supplying the power bus with 5V.
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!
For more information see the chapter describing startup.cmd.
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
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 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:
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
-Drv01-Spd
1
First check the dedicated hardware drive panel for diagnostics and errors/warnings. +For EL70x1 drive diagnostics, check el70x1.
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.
${AXIS_NO}
{{ var.ty1 }}
Always verify where the switches are connected in the electrical drawings.
All switches in the “input” section needs to be linked. If not used, then the simulation registers, “ONE” and “ZERO”, can be used:
Example, Use bit 1 in the ONE register of slave 1:
ec0.s1.ONE.1
If no ethercat slave is defined, slave number “-1” can be used: ec<master_id>.s-1.ONE.
This will affect the motorRecord only, thus ECMC internally is still moving in the wrong direction. You have been warned!
From v8+ yaml files are linted for syntactic errors, observe the iocsh for warnings and errors. Additionally the schema of the yaml file is checked by Cerberus. This check will point out errors in the structure of the configuration as well as certain type errors.
Synchronization configurations
Configuration of scaling
Defining the direction of motion
Configuration of homing
numerator
type: 0
uint16
bits: 16
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.
Unfortunately debugging of function libs is not as easy as normal PLC:s since exprtk returns less information at compile failure.
In order to troubleshoot, load the code as a normal PLC instead. This way you will get more diagnostics. Also remember, ecmc variables cannot be accessed in plc libs.
iocsh call
iocsh
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.
Validates current settings
Checks if requested run current and standby current is less than max current and larger than 0.
Validates requested voltage
Ensure requested nominal voltage is less than max voltage and larger than 0
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
Initialization script
Script for setting up the basic EPICS environment.
Init main script
init axis environment
Script for setting up the basic AXIS environment.
Issue a warning
Generic verification script for expressions
Generic verification script
Script for adding axis related EPICS PVs.
Adds motorRecord to the IOC.
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.
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.
Script for loading motor record related databases
Script for loading motor record related databases and creating motor record axis object
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.
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.
Script for adding an extra encoder
Configures a encoder object in ECMC, based on previously set environment variables.
This script is typically called by \b addEncoder.cmd
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.
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}
Script for adding axis EPICS PVs.
Adds an motion axis.
Script for adding dataStorage.
Adds dataStorage buffer.
DS_SIZE Size of data buffer.DS_ID (optional), default 0, buffer IDDS_TYPE (optional), default 0, 0: Normal Buffer, 1: Ring Buffer, 2: FIFO BufferSAMPLE_RATE_MS (optional), default 1DS_DEBUG (optional), default 0, 0: No debug printouts, 1: Debug printoutsDESC (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 0ALLOW_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
Script for adding asyn SDO object (access to SDO:s in realtime)
Add SDO for async access during realtime operation
Script for adding an extra encoder to an axis.
Adds an encoder to the last configured axis.
CONFIG configuration file, i.e. ./cfg/axis_1_enc_2.encDEV (optional) device name, i.e. MOTOR1CLEAR_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.
MASTER_ID (optional) master ID as shown by ethercat master.
ethercat master
${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. KL2032SLAVE_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
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "HW_DESC=EL1018, SLAVE_ID=1, SLAVE_ID_KL=0A"
Adds an virtual axis with PVs.
Script for applying axis synchronization
Adds synchronization parameters to an axis provided by CONFIG.
CONFIG configuration file, i.e. ./cfg/linear_1.saxCLEAR_VARS_CMD (optional) Set to “empty” for not clear env vars (if needed vars for later use).
${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.
${SCRIPTEXEC} ${ecmccfg_DIR}applyConfig.cfg
Script for applying a specific slave configuration after the slave had been added manually.
Apply configurations to a slave.
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.
Script for applying substitution file
Applies substitution from ${SUBST_FILE} with ${P_SCRIPT}
SUBST_FILE (optional) substitution fileECMC_P PV prefixP_SCRIPT (optional) naming convention prefix scriptNELM (optional) Used for oversampling cards. Defaults to 1
${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
TEMPLATE_FILE template fileECMC_P PV prefixPARAMS (optional) additional parameters
${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.
CONFIG configuration file, i.e. ./cfg/linear_1.paxDEV (optional) device name, i.e. MOTOR1CLEAR_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
${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.
HW_DESC Hardware descriptor, i.e. EL7037CONFIG 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 positionCFG_MACROS (optional) Substitution macros for config fileNELM (optional) Used for oversampling cards. Defaults to 1
${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.
CONFIG configuration file, i.e. ./cfg/linear_11.vaxDEV (optional) device name, i.e. GAPCLEAR_VARS_CMD (optional) Set to “empty” for not clear env vars (if needed vars for later use).
${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).
Script for loading Axis from yaml file via jinja2
jinja2
adds an Axis, based on a yaml config file
Niko Kivel, Anders Sandström
FILE the yaml-file containing the PLC definitionDEV the device name (optional, defaults to ${IOC}
${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
${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
FILE the yaml-file containing the PLC definition
${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.
FILE PLC definition file, i.e. ./plc/homeSlit.plcAX_ID (optional) Ax number, default 0PLC_MACROS (optional) Substitution macros for PLC codeTMP_PATH (optional) directory to dump the temporary plc file after macro substitutionPRINT_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
${SCRIPTEXEC} ${ecmccfg_DIR}loadAxisPLCFile.cmd, "AX_ID=1, FILE=./plc/homeSlit.plc"
FILE PLC definition file, i.e. ./plc/homeSlit.plcPLC_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 commandSAMPLE_RATE_MS (optional) excecution rate, default 1000/EC_RATEPLC_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 substitutionPRINT_PLC_FILE (optional) 1/0, printout msi parsed plc file (default enable(1)).SUBST_FILE (optional) custom substitution file otherwise ecmccfg default will be loadedINC (optional) List of directories for include files to pass to MSI (if several paths thendivide with ‘:').DESC (optional) Description of PLC
${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.
FILE PLC definition file, i.e. ./plc/homeSlit.plcPLC_ID (optional) PLC number, default last loaded PLCPLC_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 substitutionPRINT_PLC_FILE (optional) 1/0, printout msi parsed plc file (default enable(1)).
${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.
FILE Filename of plugin shared lib (./ecmcPlugin_Advanced.so)PLUGIN_ID Id of plugin to loadCONFIG (optional) Configuration string sent to plugin at constructREPORT (optional) Printout information of loaded plugin if set to “1”
${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
${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
${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
${SCRIPTEXEC} ${ecmccfg_DIR}loadSubstHw.cmd, "FILE=./hw.subs"
Restores record update rate to what was defined in startup.cmd
Script for switching to operational mode.
Validates configuration, starts realtime thread and checks EtherCAT slaves are in OP.
Script for enabling default diagnostics.
Set some default values to diagostics
Script for changing record update rate
Update record processing rate, all records created after this command will be updated in the specified rate.
** script for slave verification and optional reset**
will verify the slave identity and reset by writing to 0x1011, optionally read firmwre version from 0x100a
Macros