Collect upgrade notes and migration checklists for major versions.
New features are described in ecmc RELEASE.md:
https://github.com/epics-modules/ecmc/blob/master/RELEASE.md
0..1.0; use values 100x smaller than native ecmc settingsBe careful when using motor record PID fields.
Example: ecmc Kp=1.0 corresponds to motor record PCOF=0.01.
getAxisStatusStructV2 removed (plugins need rebuild)Event*, CommandList*, DataRecorder* removed (replace with PLC logic)MtnCmd mbbo indices changed (prefer string writes, or update index-based clients)axis.autoEnable in YAMLaddMasterSlaveSM.cmdplcOverride and write ax<id>.mon.lowlim/highlim in PLC codeRemove legacy motor-record auto-enable parameter strings:
# remove legacy:
# parameters: 'powerAutoOnOff=2;powerOffDelay=-1;'
Use native ecmc auto-enable:
axis:
autoEnable:
enableTimeout: 1.0
disableTimeout: 5.0
atStartup: false
For virtual/physical synchronized systems, replace PLC-side state machine code with addMasterSlaveSM.cmd:
${SCRIPTEXEC} ${ecmccfg_DIR}addMasterSlaveSM.cmd "NAME=Slit_SM, MST_GRP_NAME=virtualAxes, SLV_GRP_NAME=realAxes"
If you have multiple systems, use unique NAME, MST_GRP_NAME, and SLV_GRP_NAME per system.
plcOverrideUse plcOverride in YAML and compute limits in PLC logic:
input:
limit:
forward: 'plcOverride'
backward: 'plcOverride'
plc:
enable: true
externalCommands: true
code:
- ax${AX_ID=1}.mon.lowlim:=ec_chk_bit(ec0.s$(DRV_SID).binaryInputs01,0) and ec_chk_bit(ec0.s$(DRV_SID).ONE,0);
- ax${AX_ID=1}.mon.highlim:=ec_chk_bit(ec0.s$(DRV_SID).binaryInputs01,1) and ec_chk_bit(ec0.s$(DRV_SID).ONE,1);
v11 adds SDO verification workflow checks (mainly stepper/servo drives):
addSlave.cmd marks drive channels that require SDO setup.applyComponent.cmd marks channels as configured after component application.iocInit fails if required channels are missing SDO configuration.If a multi-channel drive has an unused channel, still configure it (for example Generic-Ch-Not-Used).