Files
ecmc_plugin_grbl/iocsh/log.log
Anders Sandstrom 218ade3e2a WIP
2022-01-25 18:53:17 +01:00

2182 lines
118 KiB
Plaintext

registerChannelProviderLocal firstTime true
#
# Start at "2022-W04-Jan25-1846-16-CET"
#
# Version information:
# European Spallation Source ERIC : iocsh.bash (3.4.0-PID-13898)
#
# --->--> snip -->-->
# Please Use Version and other environment variables
# in order to report or debug this shell
#
# HOSTDISPLAY=""
# WINDOWID=""
# PWD="/home/pi/sources/e3-ecmc_plugin_grbl/ecmc_plugin_grbl-dev/iocsh"
# USER="pi"
# LOGNAME="pi"
# EPICS_HOST_ARCH="linux-arm"
# EPICS_BASE="/home/pi/epics/base-7.0.5"
# E3_REQUIRE_NAME="require"
# E3_REQUIRE_VERSION="3.4.0"
# E3_REQUIRE_LOCATION="/home/pi/epics/base-7.0.5/require/3.4.0"
# E3_REQUIRE_BIN="/home/pi/epics/base-7.0.5/require/3.4.0/bin"
# E3_REQUIRE_DB="/home/pi/epics/base-7.0.5/require/3.4.0/db"
# E3_REQUIRE_DBD="/home/pi/epics/base-7.0.5/require/3.4.0/dbd"
# E3_REQUIRE_INC="/home/pi/epics/base-7.0.5/require/3.4.0/include"
# E3_REQUIRE_LIB="/home/pi/epics/base-7.0.5/require/3.4.0/lib"
# EPICS_DRIVER_PATH="/home/pi/epics/base-7.0.5/require/3.4.0/siteMods:/home/pi/epics/base-7.0.5/require/3.4.0/siteApps"
# EPICS_CA_AUTO_ADDR_LIST=""
# EPICS_CA_ADDR_LIST=""
# PATH="/home/pi/epics/base-7.0.5/require/3.4.0/bin:/home/pi/epics/base-7.0.5/bin/linux-arm:/home/pi/berryconda3/bin:/home/pi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
# --->--> snip -->-->
#
# Set REQUIRE_IOC for its internal PVs
epicsEnvSet REQUIRE_IOC "REQMOD:raspberrypi-13898"
#
# Enable an exit subroutine for sotfioc
dbLoadRecords "/home/pi/epics/base-7.0.5/db/softIocExit.db" "IOC=REQMOD:raspberrypi-13898"
#
# Set E3_IOCSH_TOP for the absolute path where iocsh.bash is executed.
epicsEnvSet E3_IOCSH_TOP "/home/pi/sources/e3-ecmc_plugin_grbl/ecmc_plugin_grbl-dev/iocsh"
#
#
# Load require module, which has the version 3.4.0
#
dlload /home/pi/epics/base-7.0.5/require/3.4.0/lib/linux-arm/librequire.so
dbLoadDatabase /home/pi/epics/base-7.0.5/require/3.4.0/dbd/require.dbd
require_registerRecordDeviceDriver
Loading module info records for require
#
# Set E3_CMD_TOP for the absolute path where test.script exists
epicsEnvSet E3_CMD_TOP "/home/pi/sources/e3-ecmc_plugin_grbl/ecmc_plugin_grbl-dev/iocsh"
#
iocshLoad 'test.script',''
##############################################################################
## Example: Demo of ecmc grbl g-code plugin
## https://github.com/anderssandstrom/ecmc_plugin_grbl
## https://github.com/anderssandstrom/e3-ecmc_plugin_grbl
##
## The plugin exposes:
##
## Initiation:
epicsEnvSet("IOC" ,"IOC_TEST")
epicsEnvSet("ECMCCFG_INIT" ,"") #Only run startup once (auto at PSI, need call at ESS), variable set to "#" in startup.cmd
epicsEnvSet("SCRIPTEXEC" ,"iocshLoad")
require ecmccfg ruckig
Module ecmccfg version ruckig found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/lib/linux-arm/libecmccfg.so
Loaded ecmccfg version ruckig
Loading dbd file /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/dbd/ecmccfg.dbd
Calling function ecmccfg_registerRecordDeviceDriver
Loading module info records for ecmccfg
# Epics Motor record driver that will be used:
epicsEnvShow(ECMC_MR_MODULE)
ECMC_MR_MODULE is not an environment variable.
# run module startup.cmd (only needed at ESS PSI auto call at require)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/startup.cmd, "IOC=IOC_TEST,ECMC_VER=ruckig"
#==============================================================================
# startup.cmd
on error halt
require ecmc "ruckig"
Module ecmc version ruckig found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc/ruckig/
Module ecmc depends on asyn 4.41.0
Module asyn version 4.41.0 found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/asyn/4.41.0/
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/asyn/4.41.0/lib/linux-arm/libasyn.so
Loaded asyn version 4.41.0
Loading dbd file /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/asyn/4.41.0/dbd/asyn.dbd
Calling function asyn_registerRecordDeviceDriver
Loading module info records for asyn
Module ecmc depends on exprtk 1.2.1
Module exprtk version 1.2.1 found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/exprtk/1.2.1/
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/exprtk/1.2.1/lib/linux-arm/libexprtk.so
Loaded exprtk version 1.2.1
exprtk has no dbd file
Loading module info records for exprtk
Module ecmc depends on motor develop
Module motor version develop found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/motor/develop/
Module motor depends on asyn 4.41.0
Module asyn version 4.41.0 already loaded
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/motor/develop/lib/linux-arm/libmotor.so
Loaded motor version develop
Loading dbd file /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/motor/develop/dbd/motor.dbd
Calling function motor_registerRecordDeviceDriver
Loading module info records for motor
Module ecmc depends on ruckig 1.0.0
Module ruckig version 1.0.0 found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ruckig/1.0.0/
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ruckig/1.0.0/lib/linux-arm/libruckig.so
Loaded ruckig version 1.0.0
ruckig has no dbd file
Loading module info records for ruckig
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc/ruckig/lib/linux-arm/libecmc.so
Loaded ecmc version ruckig
Loading dbd file /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc/ruckig/dbd/ecmc.dbd
Calling function ecmc_registerRecordDeviceDriver
Loading module info records for ecmc
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'ecmcMotorRecord'='EthercatMC'", "require EthercatMC 3.0.2 # Using EthercatMC motor record support.","# Using ecmcMotorRecord motor record support.")
# Using ecmcMotorRecord motor record support.
epicsEnvUnset(ECMC_EXE_CMD)
epicsEnvSet("ECMC_CONFIG_ROOT", "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/")
epicsEnvSet("ECMC_CONFIG_DB", "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/db")
epicsEnvSet("SCRIPTEXEC", "iocshLoad")
epicsEnvSet("SM_PREFIX", "IOC_TEST:") # colon added since IOC is _not_ PREFIX
epicsEnvSet("ECMC_PROC_HOOK", "")
epicsEnvSet(ECMC_MODE, FULL)
ecmcEpicsEnvSetCalcTernary(ECMC_SUPPORT_MOTION, "'FULL'!='DAQ'","","# MODE == DAQ, DISABLING MOTION.")
epicsEnvShow(ECMC_SUPPORT_MOTION)
ECMC_SUPPORT_MOTION=
ecmcEpicsEnvSetCalcTernary(ECMC_USE_MOTOR_RECORD, "'FULL'=='FULL'","","# MODE != FULL, DISABLING MOTOR RECORD.")
epicsEnvShow(ECMC_USE_MOTOR_RECORD)
ECMC_USE_MOTOR_RECORD=
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/initAll.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/initAll.cmd"
#==============================================================================
# initAll.cmd
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/init.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/init.cmd
#==============================================================================
# init.cmd
epicsEnvSet("ECMC_ASYN_TIMEOUT", 1) # Asyn timeout
epicsEnvSet("ECMC_ASYN_ADDR", 0) # Asyn Address
epicsEnvSet("ECMC_MOTOR_PORT", "NOT SET")
epicsEnvSet("ECMC_ASYN_PORT", "NOT SET")
epicsEnvSet("ECMC_PREFIX", "NOT SET")
epicsEnvSet("ECMC_GEN_EC_RECORDS", "NOT SET")
epicsEnvSet("ECMC_GEN_AX_RECORDS", "NOT SET")
epicsEnvSet("ECMC_EC_AXIS_HEALTH", "NOT SET")
epicsEnvSet("ECMC_PLC_SAMPLE_RATE_MS", "NOT SET")
epicsEnvSet("ECMC_TSE", -2)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/initAxis.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/initAxis.cmd"
#==============================================================================
# initAxis.cmd
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_unset.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_unset.cmd"
#==============================================================================
# ecmc_axis_unset.cmd
epicsEnvUnset(ECMC_AXISCONFIG)
epicsEnvUnset(ECMC_AXISFIELDINIT)
epicsEnvUnset(ECMC_PREC)
epicsEnvUnset(ECMC_EGU)
epicsEnvUnset(ECMC_DESC)
epicsEnvUnset(ECMC_R)
epicsEnvUnset(ECMC_MOTOR_NAME)
epicsEnvUnset(ECMC_EC_AXIS_HEALTH)
epicsEnvUnset(ECMC_MOD_RANGE)
epicsEnvUnset(ECMC_MOD_TYPE)
epicsEnvUnset(ECMC_EMERG_DECEL)
epicsEnvUnset(ECMC_VELO)
epicsEnvUnset(ECMC_ACCL)
epicsEnvUnset(ECMC_ACCS_EGU_PER_S2)
epicsEnvUnset(ECMC_HOME_VEL_TO)
epicsEnvUnset(ECMC_HOME_VEL_FRM)
epicsEnvUnset(ECMC_CNTRL_KP)
epicsEnvUnset(ECMC_CNTRL_KI)
epicsEnvUnset(ECMC_CNTRL_KD)
epicsEnvUnset(ECMC_CNTRL_KFF)
epicsEnvUnset(ECMC_EC_ENC_ACTPOS)
epicsEnvUnset(ECMC_EC_ENC_LATCHPOS)
epicsEnvUnset(ECMC_EC_ENC_LATCH_CONTROL)
epicsEnvUnset(ECMC_EC_ENC_LATCH_STATUS)
epicsEnvUnset(ECMC_HOME_LATCH_COUNT_OFFSET)
epicsEnvUnset(ECMC_ENC_SCALE_DENOM)
epicsEnvUnset(ECMC_ENC_SCALE_NUM)
epicsEnvUnset(ECMC_ENC_TYPE)
epicsEnvUnset(ECMC_ENC_BITS)
epicsEnvUnset(ECMC_ENC_ABS_BITS)
epicsEnvUnset(ECMC_ENC_ABS_OFFSET)
epicsEnvUnset(ECMC_ENC_VEL_FILTER_SIZE)
epicsEnvUnset(ECMC_ENC_POS_FILTER_SIZE)
epicsEnvUnset(ECMC_ENC_POS_FILTER_ENABLE)
epicsEnvUnset(ECMC_EC_ENC_RESET)
epicsEnvUnset(ECMC_EC_ENC_ALARM_0)
epicsEnvUnset(ECMC_EC_ENC_ALARM_1)
epicsEnvUnset(ECMC_EC_ENC_ALARM_2)
epicsEnvUnset(ECMC_EC_ENC_WARNING)
epicsEnvUnset(ECMC_EC_DRV_CONTROL)
epicsEnvUnset(ECMC_EC_DRV_STATUS)
epicsEnvUnset(ECMC_EC_DRV_VELOCITY)
epicsEnvUnset(ECMC_EC_DRV_BRAKE)
epicsEnvUnset(ECMC_EC_DRV_REDUCE_TORQUE)
epicsEnvUnset(ECMC_EC_DRV_RESET)
epicsEnvUnset(ECMC_EC_DRV_ALARM_0)
epicsEnvUnset(ECMC_EC_DRV_ALARM_1)
epicsEnvUnset(ECMC_EC_DRV_ALARM_2)
epicsEnvUnset(ECMC_EC_DRV_WARNING)
epicsEnvUnset(ECMC_DRV_SCALE_DENOM)
epicsEnvUnset(ECMC_DRV_SCALE_NUM)
epicsEnvUnset(ECMC_DRV_BRAKE_OPEN_DLY_TIME)
epicsEnvUnset(ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME)
epicsEnvUnset(ECMC_SOFT_LOW_LIM)
epicsEnvUnset(ECMC_DXLM_ENABLE)
epicsEnvUnset(ECMC_SOFT_HIGH_LIM)
epicsEnvUnset(ECMC_DXLM_ENABLE)
epicsEnvUnset(ECMC_EC_MON_LOWLIM)
epicsEnvUnset(ECMC_EC_MON_HIGHLIM)
epicsEnvUnset(ECMC_EC_MON_HOME_SWITCH)
epicsEnvUnset(ECMC_EC_MON_EXT_INTERLOCK)
epicsEnvUnset(ECMC_MON_AT_TARGET_TOL)
epicsEnvUnset(ECMC_MON_AT_TARGET_TIME)
epicsEnvUnset(ECMC_MON_AT_TARGET_ENA)
epicsEnvUnset(ECMC_MON_LAG_MON_TOL)
epicsEnvUnset(ECMC_MON_LAG_MON_TIME)
epicsEnvUnset(ECMC_MON_LAG_MON_ENA)
epicsEnvUnset(ECMC_MON_VELO_MAX)
epicsEnvUnset(ECMC_MON_VELO_MAX_ENA)
epicsEnvUnset(ECMC_MON_VELO_MAX_DRV_TIME)
epicsEnvUnset(ECMC_MON_VELO_MAX_TRAJ_TIME)
epicsEnvUnset(ECMC_JOG_VEL)
epicsEnvUnset(ECMC_JAR)
epicsEnvUnset(ECMC_HOME_PROC)
epicsEnvUnset(ECMC_HOME_POS)
epicsEnvUnset(ECMC_HOME_ACC)
epicsEnvUnset(ECMC_HOME_DEC)
epicsEnvUnset(ECMC_DRV_TYPE)
epicsEnvUnset(ECMC_VELO)
epicsEnvUnset(ECMC_SOFT_LOW_LIM)
epicsEnvUnset(ECMC_SOFT_HIGH_LIM)
epicsEnvUnset(ECMC_HOME_POS_MOVE_ENA)
epicsEnvUnset(ECMC_HOME_POS_MOVE_TARG_POS)
epicsEnvUnset(ECMC_TRAJ_TYPE)
epicsEnvUnset(ECMC_JERK)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync_unset.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync_unset.cmd"
#==============================================================================
# ecmc_axis_sync_unset.cmd
epicsEnvUnset(ECMC_CMD_FRM_OTHER_PLC_ENABLE)
epicsEnvUnset(ECMC_CMD_AXIS_PLC_ENABLE)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_1)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_2)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_3)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_4)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_5)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_6)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_7)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_8)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_9)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_10)
epicsEnvUnset(ECMC_ENC_VELO_FILT_SIZE)
epicsEnvUnset(ECMC_ENC_VELO_FILT_ENABLE)
epicsEnvUnset(ECMC_ENC_SOURCE)
epicsEnvUnset(ECMC_TRAJ_VELO_FILT_SIZE)
epicsEnvUnset(ECMC_TRAJ_VELO_FILT_ENABLE)
epicsEnvUnset(ECMC_TRAJ_SOURCE)
epicsEnvSet("ECMC_EGU", "mm")
epicsEnvSet("ECMC_PREC", 3)
epicsEnvSet("ECMC_AXISFIELDINIT", "") # Extra field ini2022/01/25 18:46:16.945
ECMC Initializes.............
2022/01/25 18:46:16.946 ESS Open Source EtherCAT Motion Control Epics Module2022/01/25 18:46:16.946
Mode: Configuration
2022/01/25 18:46:16.946 OK
2022/01/25 18:46:16.946 OK
2022/01/25 18:46:16.947 OK
2022/01/25 18:46:16.949 OK
2022/01/25 18:46:16.970 OK
2022/01/25 18:46:16.970 OK
2022/01/25 18:46:16.970 OK
t to motor record
epicsEnvSet("ECMC_AXISCONFIG", "") # Extra parameters to driver
############################################################
############# ASYN Configuration:
epicsEnvSet("ECMC_MOTOR_PORT" "MCU1")
epicsEnvSet("ECMC_ASYN_PORT" "MC_CPU1")
epicsEnvSet("ECMC_PREFIX" "IOC_TEST:")
ecmcAsynPortDriverConfigure(MC_CPU1,1000,0,0,100)
ecmcAsynPortDriverConfigure: portName = MC_CPU1, paramTableSize = 1000, disableAutoConnect = 0, priority = 0, defaultSampleRateMS = 100.000000
asynOctetSetOutputEos(MC_CPU1, -1, ";\n")
asynOctetSetInputEos(MC_CPU1, -1, ";\n")
asynSetTraceMask(MC_CPU1, -1, 0x41)
asynSetTraceIOMask(MC_CPU1, -1, 6)
asynSetTraceInfoMask(MC_CPU1, -1, 1)
ecmcMotorRecordCreateController(MCU1, MC_CPU1, "64", 200, 1000, "")
############################################################
############# Misc settings:
# Disable function call trace printouts
ecmcConfigOrDie "Cfg.SetEnableFuncCallDiag(0)"
# Disable on change printouts from objects (enable for easy logging)
ecmcConfigOrDie "Cfg.SetTraceMaskBit(15,0)"
# Choose to generate EPICS-records for EtherCAT-entries
# (For records use ECMC_GEN_EC_RECORDS="-records" otherwise ECMC_GEN_EC_RECORDS="")
epicsEnvSet("ECMC_GEN_EC_RECORDS", "-records")
# Choose to generate EPICS-records for ax-entries (PosAct, SetPos,..)
# (For records use ECMC_GEN_AX_RECORDS="-records" otherwise ECMC_GEN_AX_RECORDS="")
epicsEnvSet("ECMC_GEN_AX_RECORDS", "-records")
# suffix for pva enabled scripts, templates and substitutions
ecmcEpicsEnvSetCalcTernary(ECMC_PVA, "0", "Pva","")
# Set EtherCAT frequency (defaults to 1000)
ecmcConfigOrDie "Cfg.SetSampleRate(1000)"
epicsEnvSet("ECMC_EC_SAMPLE_RATE" , 1000)
ecmcEpicsEnvSetCalc("ECMC_EC_SAMPLE_RATE_MS" ,1000/1000)
# Update records in 10ms (100Hz) for FULL MODE and in EC_RATE for DAQ mode
ecmcEpicsEnvSetCalcTernary(ECMC_SAMPLE_RATE_MS, "'FULL'=='DAQ'","1","10")
epicsEnvSet("ECMC_P_SCRIPT", "mXsXXX")
ecmcEpicsEnvSetCalcTernary(ECMC_MASTER_CMD, "0>=0", "","#- ")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addMaster.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addMaster.cmd", "MASTER_ID=0"
#===============================================================================
# addMaster.cfg
epicsEnvSet("ECMC_EC_MASTER_ID" "0")
# Claim master
ecmcConfigOrDie "Cfg.EcSetMaster(0)"
epicsEnvSet("ECMC_EC_MASTER_ID" ,0)
epicsEnvSet("ECMC_TMP_DIR", "/tmp/IOC_TEST/EcMaster_0/")
system "mkdir -p /tmp/IOC_TEST/EcMaster_0/"
epicsEnvSet("ECMC_TMP_DIR", "/tmp/IOC_TEST/EcMaster_0/")
system "mkdir -p /tmp/IOC_TEST/EcMaster_0/"
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/setDiagnostics.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/setDiagnostics.cmd
#==============================================================================
# setDiagnostics.cmd
ecmcConfigOrDie "Cfg.EcSetDiagnostics(1)"
ecmcConfigOrDie "Cfg.EcEnablePrintouts(0)"
ecmcConfigOrDie "Cfg.EcSetDomainFailedCyclesLimit(100)"
epicsEnvSet("ECMCCFG_INIT" ,"#")
##############################################################################
## Configure hardware:
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcMCU1021_coupler.cmd
############################################################
############# MCU1021:
#Configure EK1100 coupler terminal
epicsEnvSet(ECMC_EC_SLAVE_NUM,0)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=0, HW_DESC=EK1100"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "0")
epicsEnvSet("HW_DESC", "EK1100")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEK1100.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEK1100.cmd" 2022/01/25 18:46:16.972 OK
2022/01/25 18:46:16.973 OK
2022/01/25 18:46:16.980 OK
2022/01/25 18:46:16.981 OK
2022/01/25 18:46:16.981 OK
2022/01/25 18:46:16.981 OK
2022/01/25 18:46:16.982 OK
"NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EK1100")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x044c2c52")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,0,0x2,0x044c2c52)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "0>0", "","#- ")
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
ecmcConfigOrDie "Cfg.EcAddSlave(0,0,0x2,0x044c2c52)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=0,HWTYPE=EK1100"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "0","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s000")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s000-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEK1100.substitutions,ECMC_P=IOC_TEST:m0s000-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEK1100.substitutions,1,1)
dbLoadTemplate(ecmcEK1100.substitutions,"ECMC_P=IOC_TEST:m0s000-,ECMC_G=IOC_TEST:m0s000,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=0,HWTYPE=EK1100,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s000-,ECMC_G=IOC_TEST:m0s000"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s000-,ECMC_G=IOC_TEST:m0s000,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=0,HWTYPE=EK1100,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "0+1","%d")
#Configure EL1018 digital input terminal
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "0+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=1, HW_DESC=EL1018"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "1")
epicsEnvSet("HW_DESC", "EL1018")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL1018.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL1018.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL1018")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x03fa3052")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,1,0x2,0x03fa3052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "0>0", "","#- ")
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEX1008.cmd
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a00,0x6000,0x1,B1,binaryInput01)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a01,0x6010,0x1,B1,binaryInput02)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a02,0x6020,0x1,B1,binaryInput03)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a03,0x6030,0x1,B1,binaryInput04)"
ecmcConfigOrDie "Cfg.EcAddEn2022/01/25 18:46:16.982 OK
2022/01/25 18:46:16.982 OK
2022/01/25 18:46:16.982 OK
2022/01/25 18:46:16.982 OK
2022/01/25 18:46:16.990 OK
2022/01/25 18:46:16.992 OK
2022/01/25 18:46:16.992 OK
2022/01/25 18:46:16.992 OK
2022/01/25 18:46:16.992 OK
2022/01/25 18:46:16.992 OK
2022/01/25 18:46:16.993 OK
tryDT(1,0x2,0x03fa3052,2,0,0x1a04,0x6040,0x1,B1,binaryInput05)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a05,0x6050,0x1,B1,binaryInput06)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a06,0x6060,0x1,B1,binaryInput07)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(1,0x2,0x03fa3052,2,0,0x1a07,0x6070,0x1,B1,binaryInput08)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=1,HWTYPE=EL1018"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "1","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s001")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s001-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL1018.substitutions,ECMC_P=IOC_TEST:m0s001-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL1018.substitutions,1,1)
dbLoadTemplate(ecmcEL1018.substitutions,"ECMC_P=IOC_TEST:m0s001-,ECMC_G=IOC_TEST:m0s001,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=1,HWTYPE=EL1018,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s001-,ECMC_G=IOC_TEST:m0s001"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s001-,ECMC_G=IOC_TEST:m0s001,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=1,HWTYPE=EL1018,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "1+1","%d")
#Configure EL2808 digital output terminal
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "1+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=2, HW_DESC=EL2808"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "2")
epicsEnvSet("HW_DESC", "EL2808")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL2808.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL2808.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL2808")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x0af83052")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,2,0x2,0x0af83052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "0>0", "","#- ")
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEX2008.cmd
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1600,0x7000,0x1,B1,binaryOutput01)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1601,0x7010,0x1,B1,binaryOutput02)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1602,0x7020,0x1,B1,binaryOutput03)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1603,0x7030,0x1,B1,binaryOutput04)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1604,0x7040,0x1,B1,binaryOutput05)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1605,0x7050,0x1,B1,binaryOutput06)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1606,0x7060,0x1,B1,binaryOutp2022/01/25 18:46:16.993 OK
2022/01/25 18:46:16.993 OK
2022/01/25 18:46:17.002 OK
2022/01/25 18:46:17.072 OK
2022/01/25 18:46:17.152 14385
2022/01/25 18:46:17.153 OK
2022/01/25 18:46:17.153 OK
2022/01/25 18:46:17.153 OK
2022/01/25 18:46:17.153 OK
2022/01/25 18:46:17.153 OK
ut07)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(2,0x2,0x0af83052,1,0,0x1607,0x7070,0x1,B1,binaryOutput08)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=2,HWTYPE=EL2808"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "2","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s002")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s002-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL2808.substitutions,ECMC_P=IOC_TEST:m0s002-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL2808.substitutions,1,1)
dbLoadTemplate(ecmcEL2808.substitutions,"ECMC_P=IOC_TEST:m0s002-,ECMC_G=IOC_TEST:m0s002,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=2,HWTYPE=EL2808,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s002-,ECMC_G=IOC_TEST:m0s002"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s002-,ECMC_G=IOC_TEST:m0s002,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=2,HWTYPE=EL2808,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "2+1","%d")
# Save the slave number for later
epicsEnvSet("ECMC_EC_SLAVE_NUM_DIG_OUT", "2")
#Configure EL5101 Incremental Encoder Interface
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "2+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=3, HW_DESC=EL5101"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "3")
epicsEnvSet("HW_DESC", "EL5101")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL5101.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL5101.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL5101")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x13ed3052")
ecmcFileExist(/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd,1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd "RESET=true"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,3,0x2,0x13ed3052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "true>0", "","#- ")
ecmcConfigOrDie "Cfg.EcWriteSdo(3,0x1011,0x1,1684107116,4)"
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
ecmcConfig "EcReadSdo(3,0x100a,0x0,2)"
ecmcEpicsEnvSetCalc("ECMC_EC_SLAVE_FW", "14385", "0x%04x")
# Firmware version: 0x3831
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
ecmcConfigOrDie "Cfg.EcAddEntryComplete(3,0x2,0x13ed3052,1,2,0x1600,0x7000,0x01,8,encoderControl01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(3,0x2,0x13ed3052,1,2,0x1600,0x7000,0x02,16,encoderValue01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(3,0x2,0x13ed3052,2,3,0x1a03,0x6010,0x00,16,encoderStatus01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(3,0x2,0x13ed3052,2,3,0x1a03,0x6010,0x10,16,positionActual01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(3,0x2,0x13ed3052,2,3,0x1a03,0x6010,0x20,16,encoderLatchPostion01)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/re2022/01/25 18:46:17.161 OK
2022/01/25 18:46:17.232 OK
2022/01/25 18:46:17.312 14385
2022/01/25 18:46:17.313 OK
2022/01/25 18:46:17.313 OK
2022/01/25 18:46:17.314 OK
2022/01/25 18:46:17.314 OK
2022/01/25 18:46:17.314 OK
quire/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=3,HWTYPE=EL5101"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "3","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s003")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s003-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL5101.substitutions,ECMC_P=IOC_TEST:m0s003-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL5101.substitutions,1,1)
dbLoadTemplate(ecmcEL5101.substitutions,"ECMC_P=IOC_TEST:m0s003-,ECMC_G=IOC_TEST:m0s003,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=3,HWTYPE=EL5101,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s003-,ECMC_G=IOC_TEST:m0s003"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s003-,ECMC_G=IOC_TEST:m0s003,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=3,HWTYPE=EL5101,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "3+1","%d")
#Configure EL5101 Incremental Encoder Interface
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "3+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=4, HW_DESC=EL5101"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "4")
epicsEnvSet("HW_DESC", "EL5101")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL5101.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL5101.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL5101")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x13ed3052")
ecmcFileExist(/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd,1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd "RESET=true"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,4,0x2,0x13ed3052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "true>0", "","#- ")
ecmcConfigOrDie "Cfg.EcWriteSdo(4,0x1011,0x1,1684107116,4)"
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
ecmcConfig "EcReadSdo(4,0x100a,0x0,2)"
ecmcEpicsEnvSetCalc("ECMC_EC_SLAVE_FW", "14385", "0x%04x")
# Firmware version: 0x3831
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
ecmcConfigOrDie "Cfg.EcAddEntryComplete(4,0x2,0x13ed3052,1,2,0x1600,0x7000,0x01,8,encoderControl01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(4,0x2,0x13ed3052,1,2,0x1600,0x7000,0x02,16,encoderValue01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(4,0x2,0x13ed3052,2,3,0x1a03,0x6010,0x00,16,encoderStatus01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(4,0x2,0x13ed3052,2,3,0x1a03,0x6010,0x10,16,positionActual01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(4,0x2,0x13ed3052,2,3,0x1a03,0x6010,0x20,16,encoderLatchPostion01)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=4,HWTYPE=EL5101"
#=======================================================================2022/01/25 18:46:17.326 OK
2022/01/25 18:46:17.327 OK
2022/01/25 18:46:17.328 OK
=======
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "4","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s004")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s004-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL5101.substitutions,ECMC_P=IOC_TEST:m0s004-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL5101.substitutions,1,1)
dbLoadTemplate(ecmcEL5101.substitutions,"ECMC_P=IOC_TEST:m0s004-,ECMC_G=IOC_TEST:m0s004,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=4,HWTYPE=EL5101,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s004-,ECMC_G=IOC_TEST:m0s004"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s004-,ECMC_G=IOC_TEST:m0s004,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=4,HWTYPE=EL5101,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "4+1","%d")
# Configure EL9505 Power supply terminal 5V
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "4+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=5, HW_DESC=EL9505"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "5")
epicsEnvSet("HW_DESC", "EL9505")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL9505.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL9505.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL9505")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x25213052")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,5,0x2,0x25213052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "0>0", "","#- ")
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
ecmcConfigOrDie "Cfg.EcAddEntryComplete(5,0x2,0x25213052,2,0,0x1a00,0x6000,0x1,1,powerOk01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(5,0x2,0x25213052,2,0,0x1a00,0x6000,0x2,1,overload01)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=5,HWTYPE=EL9505"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "5","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s005")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s005-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL9505.substitutions,ECMC_P=IOC_TEST:m0s005-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL9505.substitutions,1,1)
dbLoadTemplate(ecmcEL9505.substitutions,"ECMC_P=IOC_TEST:m0s005-,ECMC_G=IOC_TEST:m0s005,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=5,HWTYPE=EL9505,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "",2022/01/25 18:46:17.339 OK
2022/01/25 18:46:17.341 OK
2022/01/25 18:46:17.341 OK
2022/01/25 18:46:17.342 OK
2022/01/25 18:46:17.342 OK
2022/01/25 18:46:17.342 OK
2022/01/25 18:46:17.342 OK
2022/01/25 18:46:17.342 OK
2022/01/25 18:46:17.342 OK
"#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s005-,ECMC_G=IOC_TEST:m0s005"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s005-,ECMC_G=IOC_TEST:m0s005,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=5,HWTYPE=EL9505,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "5+1","%d")
# Configure EL1252 digital input terminal
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "5+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd, "SLAVE_ID=6, HW_DESC=EL1252"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "6")
epicsEnvSet("HW_DESC", "EL1252")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL1252.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL1252.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL1252")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x04e43052")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,6,0x2,0x04e43052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "0>0", "","#- ")
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEX1002.cmd
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,0,0x1a00,0x6000,0x1,B1,binaryInput01)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,0,0x1a01,0x6010,0x1,B1,binaryInput02)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,1,0x1a13,0x1d09,0xae,U8,status01)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,1,0x1a13,0x1d09,0xaf,U8,status02)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,1,0x1a13,0x1d09,0xb0,U64,timestampLatchPositive01)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,1,0x1a13,0x1d09,0xb8,U64,timestampLatchNegative01)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,1,0x1a13,0x1d09,0xc0,U64,timestampLatchPositive02)"
ecmcConfigOrDie "Cfg.EcAddEntryDT(6,0x2,0x04e43052,2,1,0x1a13,0x1d09,0xc8,U64,timestampLatchNegative02)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=6,HWTYPE=EL1252"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "6","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s006")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s006-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL1252.substitutions,ECMC_P=IOC_TEST:m0s006-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL1252.substitutions,1,1)
dbLoadTemplate(ecmcEL1252.substitutions,"ECMC_P=IOC_TEST:m0s006-,ECMC_G=IOC_TEST:m0s006,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=6,HWTYPE=EL1252,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s006-,ECMC_G=IOC_TEST:m0s006"
#==================2022/01/25 18:46:17.356 OK
2022/01/25 18:46:17.472 OK
2022/01/25 18:46:17.552 12848
2022/01/25 18:46:17.555 OK
2022/01/25 18:46:17.555 OK
2022/01/25 18:46:17.556 OK
2022/01/25 18:46:17.557 OK
2022/01/25 18:46:17.557 OK
2022/01/25 18:46:17.558 OK
2022/01/25 18:46:17.558 OK
2022/01/25 18:46:17.559 OK
2022/01/25 18:46:17.559 OK
2022/01/25 18:46:17.560 OK
2022/01/25 18:46:17.560 OK
2022/01/25 18:46:17.560 OK
============================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s006-,ECMC_G=IOC_TEST:m0s006,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=6,HWTYPE=EL1252,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "6+1","%d")
# Configure EL9410 Power supply with refresh of E-Bus.
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "6+1")
#${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "SLAVE_ID=${ECMC_EC_SLAVE_NUM}, HW_DESC=EL9410"
#Configure EL7037 stepper drive terminal, motor 1
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "7+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/configureSlave.cmd, "SLAVE_ID=8, HW_DESC=EL7037, CONFIG=-Motor-Nanotec-ST4118L1804-B"
#==============================================================================
# configureSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "8")
epicsEnvSet("HW_DESC", "EL7037")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd "SLAVE_ID=8, HW_DESC=EL7037, NELM=1"
#==============================================================================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "8")
epicsEnvSet("HW_DESC", "EL7037")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL7037")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x1b7d3052")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd "RESET=true"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,8,0x2,0x1b7d3052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "true>0", "","#- ")
ecmcConfigOrDie "Cfg.EcWriteSdo(8,0x1011,0x1,1684107116,4)"
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
ecmcConfig "EcReadSdo(8,0x100a,0x0,2)"
ecmcEpicsEnvSetCalc("ECMC_EC_SLAVE_FW", "12848", "0x%04x")
# Firmware version: 0x3230
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEX70XX.cmd
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,1,2,0x1600,0x7000,0x01,16,encoderControl01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,1,2,0x1600,0x7000,0x11,16,encoderValue01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,1,2,0x1602,0x7010,0x1,16,driveControl01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,1,2,0x1604,0x7010,0x21,16,1,velocitySetpoint01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,2,3,0x1a00,0x6000,0x0,16,encoderStatus01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,2,3,0x1a00,0x6000,0x11,16,positionActual01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,2,3,0x1a00,0x6000,0x12,16,encoderLatchPostion01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(8,0x2,0x1b7d3052,2,3,0x1a03,0x6010,0x1,16,driveStatus01)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8012,0x5,1,1)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8012,0xA,1,1)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8012,0x8,1,1)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8012,0x9,0,1)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=8,HWTYPE=EL7037"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "8","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s008")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s008-")
epicsE2022/01/25 18:46:17.583 OK
2022/01/25 18:46:17.583 OK
2022/01/25 18:46:17.583 OK
2022/01/25 18:46:17.583 OK
2022/01/25 18:46:17.583 OK
2022/01/25 18:46:17.584 OK
nvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL7037.substitutions,ECMC_P=IOC_TEST:m0s008-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL7037.substitutions,1,1)
dbLoadTemplate(ecmcEL7037.substitutions,"ECMC_P=IOC_TEST:m0s008-,ECMC_G=IOC_TEST:m0s008,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=8,HWTYPE=EL7037,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s008-,ECMC_G=IOC_TEST:m0s008"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s008-,ECMC_G=IOC_TEST:m0s008,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=8,HWTYPE=EL7037,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "8+1","%d")
# apply config ${CONFIG} for ${HW_DESC}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037-Motor-Nanotec-ST4118L1804-B.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037-Motor-Nanotec-ST4118L1804-B.cmd ""
epicsEnvSet(I_MAX_MA_LOCAL,"1500")
epicsEnvSet(I_RUN_MA_LOCAL,1000)
epicsEnvSet(I_STDBY_MA_LOCAL,500)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/chkValidCurrentSetOrDie.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/chkValidCurrentSetOrDie.cmd "I_RUN_MA=1000,I_STDBY_MA=500,I_MAX_MA=1500"
#==============================================================================
# chkValidCurrentSetOrDie.cmd
# Ensure running current is below max current otherwise exit
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "1000>1500 or 1000<=0", "ecmcExit Error: Run current setpoint to high or negative...","# Run current setting OK (1000)...")
# Result:
# Run current setting OK (1000)...
epicsEnvUnset(ECMC_EXE_CMD)
# Ensure standby current is below max current otherwise exit
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "500>1500 or 500<0", "ecmcExit Error: Standby current setpoint to high or negative...","# Standby current setting OK (500)...")
# Result:
# Standby current setting OK (500)...
epicsEnvUnset(ECMC_EXE_CMD)
# Ensure standby current is below run current otherwise exit
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "500>1000", "ecmcExit Error: Standby current higher than run current...","# Standby current and run current setting OK (500<1000)...")
# Result:
# Standby current and run current setting OK (500<1000)...
epicsEnvUnset(ECMC_EXE_CMD)
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8010,0x1,1000,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8010,0x2,500,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8010,0x3,2400,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8010,0x4,175,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8010,0x6,200,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(8,0x8010,0xA,330,2)"
epicsEnvUnset("I_RUN_MA_LOCAL")
epicsEnvUnset("I_STDBY_MA_LOCAL")
epicsEnvUnset("I_MAX_MA_LOCAL")
#Configure EL7037 stepper drive terminal, motor 2
ecmcEpicsEnvSetCalc(ECMC_EC_SLAVE_NUM, "8+1")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/configureSlave.cmd, "SLAVE_ID=9, HW_DESC=EL7037, CONFIG=-Motor-Nanotec-ST4118L1804-B"
#==============================================================================
# configureSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "9")
epicsEnvSet("HW_DESC", "EL7037")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addSlave.cmd "SLAVE_ID=9, HW_DESC=EL7037, NELM=1"
#==============================================================2022/01/25 18:46:17.589 OK
2022/01/25 18:46:17.692 OK
2022/01/25 18:46:17.772 12848
2022/01/25 18:46:17.775 OK
2022/01/25 18:46:17.775 OK
2022/01/25 18:46:17.775 OK
2022/01/25 18:46:17.776 OK
2022/01/25 18:46:17.776 OK
2022/01/25 18:46:17.777 OK
2022/01/25 18:46:17.777 OK
2022/01/25 18:46:17.777 OK
2022/01/25 18:46:17.777 OK
2022/01/25 18:46:17.777 OK
2022/01/25 18:46:17.778 OK
2022/01/25 18:46:17.778 OK
================
# addSlave.cmd
epicsEnvSet("ECMC_EC_SLAVE_NUM", "9")
epicsEnvSet("HW_DESC", "EL7037")
epicsEnvSet("P_SCRIPT", "mXsXXX")
# add ${HW_DESC} to the bus at position ${SLAVE_ID}
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037.cmd" "NELM=1"
epicsEnvSet("ECMC_EC_HWTYPE" "EL7037")
epicsEnvSet("ECMC_EC_VENDOR_ID" "0x2")
epicsEnvSet("ECMC_EC_PRODUCT_ID" "0x1b7d3052")
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/slaveVerify.cmd "RESET=true"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_VERIFY, "0==0", "","#- ")
ecmcConfigOrDie "Cfg.EcSlaveVerify(0,9,0x2,0x1b7d3052)"
ecmcEpicsEnvSetCalcTernary(ECMC_SLAVE_RESET, "true>0", "","#- ")
ecmcConfigOrDie "Cfg.EcWriteSdo(9,0x1011,0x1,1684107116,4)"
epicsEnvSet(ECMC_EC_SLAVE_FW, "0x0000")
ecmcConfig "EcReadSdo(9,0x100a,0x0,2)"
ecmcEpicsEnvSetCalc("ECMC_EC_SLAVE_FW", "12848", "0x%04x")
# Firmware version: 0x3230
epicsEnvUnset(ECMC_SLAVE_VERIFY)
epicsEnvUnset(ECMC_COMMENT)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEX70XX.cmd
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,1,2,0x1600,0x7000,0x01,16,encoderControl01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,1,2,0x1600,0x7000,0x11,16,encoderValue01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,1,2,0x1602,0x7010,0x1,16,driveControl01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,1,2,0x1604,0x7010,0x21,16,1,velocitySetpoint01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,2,3,0x1a00,0x6000,0x0,16,encoderStatus01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,2,3,0x1a00,0x6000,0x11,16,positionActual01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,2,3,0x1a00,0x6000,0x12,16,encoderLatchPostion01)"
ecmcConfigOrDie "Cfg.EcAddEntryComplete(9,0x2,0x1b7d3052,2,3,0x1a03,0x6010,0x1,16,driveStatus01)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8012,0x5,1,1)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8012,0xA,1,1)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8012,0x8,1,1)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8012,0x9,0,1)"
# deduce what the prefix should be
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd",1)
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcmXsXXX.cmd" "MASTER_ID=0,SLAVE_POS=9,HWTYPE=EL7037"
#==============================================================================
# ecmcmXsXXX.cmd
ecmcEpicsEnvSetCalc("sid", "9","%03d")
ecmcEpicsEnvSetCalc("mid", "0","%01d")
epicsEnvSet("ECMC_G", "IOC_TEST:m0s009")
epicsEnvSet("ECMC_P", "IOC_TEST:m0s009-")
epicsEnvUnset(sid)
epicsEnvUnset(mid)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SUBS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applySubstitutions.cmd" "SUBST_FILE=ecmcEL7037.substitutions,ECMC_P=IOC_TEST:m0s009-"
#==============================================================================
# applySubstitutions.cmd
ecmcFileExist(ecmcEL7037.substitutions,1,1)
dbLoadTemplate(ecmcEL7037.substitutions,"ECMC_P=IOC_TEST:m0s009-,ECMC_G=IOC_TEST:m0s009,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=9,HWTYPE=EL7037,T_SMP_MS=10,TSE=-2,NELM=1")
epicsEnvUnset(DEFAULT_SUBS)
ecmcEpicsEnvSetCalcTernary(DEFAULT_SLAVE_PVS, "True", "","#- ")
iocshLoad "/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyTemplate.cmd" "TEMPLATE_FILE=ecmcEcSlave.template,ECMC_P=IOC_TEST:m0s009-,ECMC_G=IOC_TEST:m0s009"
#==============================================================================
# applyTemplate.cmd
ecmcFileExist(ecmcEcSlave.template,1,1)
dbLoadRecords("ecmcEcSlave.template", "ECMC_P=IOC_TEST:m0s009-,ECMC_G=IOC_TEST:m0s009,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,MASTER_ID=0,SLAVE_POS=9,HWTYPE=EL7037,T_SMP_MS=10,TSE=-2,")
epicsEnvUnset(DEFAULT_SLAVE_PVS)
# increment SLAVE_ID
ecmcEpicsEnvSetCalc("SLAVE_ID", "9+1","%d")
# apply config ${CONFIG} for ${HW_DESC}
e2022/01/25 18:46:17.799 OK
2022/01/25 18:46:17.799 OK
2022/01/25 18:46:17.799 OK
2022/01/25 18:46:17.799 OK
2022/01/25 18:46:17.799 OK
2022/01/25 18:46:17.799 OK
2022/01/25 18:46:17.800 OK
2022/01/25 18:46:17.800 OK
2022/01/25 18:46:17.800 OK
2022/01/25 18:46:17.800 OK
2022/01/25 18:46:17.800 OK
2022/01/25 18:46:17.801 OK
2022/01/25 18:46:17.801 OK
2022/01/25 18:46:17.801 OK
2022/01/25 18:46:17.801 OK
cmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037-Motor-Nanotec-ST4118L1804-B.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmcEL7037-Motor-Nanotec-ST4118L1804-B.cmd ""
epicsEnvSet(I_MAX_MA_LOCAL,"1500")
epicsEnvSet(I_RUN_MA_LOCAL,1000)
epicsEnvSet(I_STDBY_MA_LOCAL,500)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/chkValidCurrentSetOrDie.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/chkValidCurrentSetOrDie.cmd "I_RUN_MA=1000,I_STDBY_MA=500,I_MAX_MA=1500"
#==============================================================================
# chkValidCurrentSetOrDie.cmd
# Ensure running current is below max current otherwise exit
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "1000>1500 or 1000<=0", "ecmcExit Error: Run current setpoint to high or negative...","# Run current setting OK (1000)...")
# Result:
# Run current setting OK (1000)...
epicsEnvUnset(ECMC_EXE_CMD)
# Ensure standby current is below max current otherwise exit
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "500>1500 or 500<0", "ecmcExit Error: Standby current setpoint to high or negative...","# Standby current setting OK (500)...")
# Result:
# Standby current setting OK (500)...
epicsEnvUnset(ECMC_EXE_CMD)
# Ensure standby current is below run current otherwise exit
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "500>1000", "ecmcExit Error: Standby current higher than run current...","# Standby current and run current setting OK (500<1000)...")
# Result:
# Standby current and run current setting OK (500<1000)...
epicsEnvUnset(ECMC_EXE_CMD)
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8010,0x1,1000,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8010,0x2,500,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8010,0x3,2400,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8010,0x4,175,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8010,0x6,200,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(9,0x8010,0xA,330,2)"
epicsEnvUnset("I_RUN_MA_LOCAL")
epicsEnvUnset("I_STDBY_MA_LOCAL")
epicsEnvUnset("I_MAX_MA_LOCAL")
#Apply hardware configuration
ecmcConfigOrDie "Cfg.EcApplyConfig(1)"
# ADDITIONAL SETUP
# Set all outputs to feed switches
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput01,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput02,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput03,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput04,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput05,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput06,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput07,1)"
ecmcConfigOrDie "Cfg.WriteEcEntryIDString(2,binaryOutput08,1)"
# END of ADDITIONAL SETUP
##############################################################################
## AXIS 1
#
epicsEnvSet("DEV", "IOC_TEST")
iocshLoad (/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/configureAxis.cmd, CONFIG=./cfg/linear_1.ax)
#==============================================================================
# configureAxis.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'FULL'='DAQ'","ecmcExit Error: ECMC started in DAQ mode. Motion not supported..","#-")
epicsEnvUnset(ECMC_EXE_CMD)
epicsEnvSet("ECMC_PREFIX" "IOC_TEST:")
ecmcFileExist("./cfg/linear_1.ax",1)
iocshLoad ./cfg/linear_1.ax ""
#General
epicsEnvSet("ECMC_MOTOR_NAME", "Axis1")
epicsEnvSet("ECMC_R", "Axis1-")
epicsEnvSet("ECMC_AXIS_NO", "1")
epicsEnvSet("ECMC_DESC", "MCU1021 Lower Axis (1)")
epicsEnvSet("ECMC_EGU", "mm") # Motor Record Unit
epicsEnvSet("ECMC_PREC", "3") # Motor Record Precision
epicsEnvSet("ECMC_AXISCONFIG", "") # Extra parameters to driver
epicsEnvSet("ECMC_EC_AXIS_HEALTH", "") # Entry for axis health output (example: ec0.s1.binaryOutput01.0)
epicsEnvSet("ECMC_MOD_RANGE" , "0") # Modulo range (traj setpoints and encoder values will be in range 0..ECMC_MOD_RANGE)
epicsEnvSet("ECMC_MOD_TYPE", "0") # For positioning and MOD_RANGE>0: 0 = Normal, 1 = Always Fwd, 2 = Always Bwd, 3 = Closest Distance
#Encoder
epicsEnvSet("ECMC_ENC_SCALE_NUM" "-60")
epicsEnvSet("ECMC_ENC_SCALE_DENOM" "2000")
epicsEnvSet("ECMC_ENC_TYPE" "1") # Type: 0=Incremental, 1=Absolute
epicsEnvSet("ECMC_ENC_BITS" "16") # Total bit count of encoder raw data
epicsEnvSet("ECMC_ENC_ABS_BITS", "0") # Absolute bit count (for absolute encoders) always least significant part of ECMC_ENC_BITS
epicsEnvSet("ECMC_ENC_ABS_OFFSET" "0") # Encoder offset in eng units (for absolute encoders)
epicsEnvSet("ECMC_EC_ENC_ACTPOS", "ec0.s3.positionActual01") # Ethercat entry for actual position input (encoder)
epicsEnvSet("ECMC_EC_ENC_RESET", "") # Reset (if no encoder reset bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_0", "") # Error 0 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_1", "") # Error 1 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_2", "") # Error 2 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_WARNING", "") # Warning (if no encoder warning bit then leave empty)
#Drive
epicsEnvSet("ECMC_DRV_TYPE" "0") # Stepper: 0. DS402: 1 (DS402 = servos and advanced stepper drives)
epicsEnvSet("ECMC_DRV_SCALE_NUM" "600.0") # Fastest speed in engineering units
epicsEnvSet("ECMC_DRV_SCALE_DENOM" "32768.0") # I/O range for ECMC_EC_ALIAS_DRV_VELO_SET
epicsEnvSet("ECMC_EC_DRV_CONTROL", "ec0.s8.driveControl01.0") # Ethercat entry for control word or bit output
epicsEnvSet("ECMC_EC_DRV_STATUS", "ec0.s8.driveStatus01.1") # Ethercat entry for status word or bit input
epicsEnvSet("ECMC_EC_DRV_VELOCITY", "ec0.s8.velocitySetpoint01") # Ethercat entry for velocity setpoint output
epicsEnvSet("ECMC_EC_DRV_REDUCE_TORQUE", "ec0.s8.driveControl01.2") # Ethercat entry for reduce torque output
epicsEnvSet("ECMC_EC_DRV_BRAKE", "") # Ethercat entry for brake output
epicsEnvSet("ECMC_DRV_BRAKE_OPEN_DLY_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_EC_DRV_RESET", "ec0.s8.driveControl01.1") # Reset
epicsEnvSet("ECMC_EC_DRV_ALARM_0", "ec0.s8.driveStatus01.3") # Error
epicsEnvSet("ECMC_EC_DRV_ALARM_1", "ec0.s8.driveStatus01.7") # Stall
epicsEnvSet("ECMC_EC_DRV_ALARM_2", "ec0.s8.driveStatus01.14") # Sync error
epicsEnvSet("ECMC_EC_DRV_WARNING", "ec0.s8.driveStatus01.2") # Warning
#Trajectory
epicsEnvSet("ECMC_TRAJ_TYPE" "0") # Trapetz: 0. S-Curve: 1
epicsEnvSet("ECMC_VELO", "10.0")
epicsEnvSet("ECMC_JOG_VEL", "5")
epicsEnvSet("ECMC_JAR", "0.0") # JAR defaults to VELO/ACCL
epicsEnvSet("ECMC_ACCS_EGU_PER_S2", "10")
epicsEnvSet("ECMC_EMERG_DECEL", "100") # Emergency deceleration
epicsEnvSet("ECMC_JERK", "10.0") # Only valid for ECMC_TRAJ_TYPE==1
#Homing
epicsEnvSet("ECMC_HOME_PROC", "3")
epicsEnvSet("ECMC_HOME_POS", "0.0")
epicsEnvSet("ECMC_HOME_VEL_TO", "5")
epicsEnvSet("ECMC_HOME_VEL_FRM", "4")
epicsEnvSet("ECMC_HOME_ACC", "21")
epicsEnvSet("ECMC_HOME_DEC", "100")
epicsEnvSet("ECMC_HOME_POS_MOVE_ENA", "0") # Enable move to position after successfull homing
epicsEnvSet("ECMC_HOME_POS_MOVE_TARG_POS","0") # Target position to go to after successfull homing
#Controller
epicsEnvSet("ECMC_CNTRL_KP", "15.0")
epicsEnvSet("ECMC_CNTRL_KI", "0.02")
epicsEnvSet("ECMC_CNTRL_KD", "0.0")
epicsEnvSet("ECMC_CNTRL_KFF", "1.0")
#Monitoring
# Switches
epicsEnvSet("ECMC_EC_MON_LOWLIM", "ec0.s1.binaryInput02.0") # Ethercat entry for low limit switch input
epicsEnvSet("ECMC_EC_MON_HIGHLIM", "ec0.s1.binaryInput01.0") # Ethercat entry for high limit switch inpuit
epicsEnvSet("ECMC_EC_MON_HOME_SWITCH", "ec0.s1.binaryInput03.0") # Ethercat entry for home switch input
epicsEnvSet("ECMC_EC_MON_EXT_INTERLOCK", "ec0.s1.ONE.0") # Ethercat entry for external interlock input
# Softlimits (disable with 0,0,0)
epicsEnvSet("ECMC_SOFT_LOW_LIM", "-20")
epicsEnvSet("ECMC_SOFT_HIGH_LIM", "130")
epicsEnvSet("ECMC_DXLM_ENABLE", "1")
# Position lag
epicsEnvSet("ECMC_MON_LAG_MON_TOL", "1.0")
epicsEnvSet("ECMC_MON_LAG_MON_TIME", "10")
epicsEnvSet("ECMC_MON_LAG_MON_ENA", "1")
# At target
epicsEnvSet("ECMC_MON_AT_TARGET_TOL", "0.1")
epicsEnvSet("ECMC_MON_AT_TARGET_TIME", "100")
epicsEnvSet("ECMC_MON_AT_TARGET_ENA", "1")
# Velocity
epicsEnvSet("ECMC_MON_VELO_MAX", "100.0")
epicsEnvSet("ECMC_MON_VELO_MAX_TRAJ_TIME","100")
epicsEnvSet("ECMC_MON_VELO_MAX_DRV_TIME", "200")
epicsEnvSet("ECMC_MON_VELO_MAX_ENA", "1")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addAxis.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addAxis.cmd
#==============================================================================
# addAxis.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'FULL'='DAQ'","ecmcExit Error: ECMC started in DAQ mode. Motion not supported..","#-")
epicsEnvUnset(ECMC_EXE_CMD)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis-records.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis-records.cmd
#==============================================================================
# ecmc_axis-records.cmd
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis.cmd
#==============================================================================
# ecmc_axis.cmd
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(-60)<>0',SUCCESS_STR='ECMC_ENC_SCALE_NUM value OK == -60...',ERROR_STR='ECMC_ENC_SCALE_NUM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(-60)<>0","# ECMC_ENC_SCALE_NUM value OK == -60...", "ecmcExit Error: ECMC_ENC_SCALE_NUM == 0...")
# ECMC_ENC_SCALE_NUM value OK == -60...
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(2000)<>0',SUCCESS_STR='ECMC_ENC_SCALE_DENOM value OK == 2000...',ERROR_STR='ECMC_ENC_SCALE_DENOM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(2000)<>0","# ECMC_ENC_SCALE_DENOM value OK == 2000...", "ecmcExit Error: ECMC_ENC_SCALE_DENOM == 0...")
# ECMC_ENC_SCALE_DENOM value OK == 2000...
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(600.0)<>0',SUCCESS_STR='ECMC_DRV_SCALE_NUM value OK == 600.0...',ERROR_STR='ECMC_DRV_SCALE_NUM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTe2022/01/25 18:46:17.818 OK
2022/01/25 18:46:17.819 OK
2022/01/25 18:46:17.819 OK
2022/01/25 18:46:17.819 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.823 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.824 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.825 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.826 OK
2022/01/25 18:46:17.827 OK
2022/01/25 18:46:17.827 OK
2022/01/25 18:46:17.827 OK
2022/01/25 18:46:17.827 OK
2022/01/25 18:46:17.827 OK
2022/01/25 18:46:17.827 OK
rnary(ECMC_EXE_CMD,"abs(600.0)<>0","# ECMC_DRV_SCALE_NUM value OK == 600.0...", "ecmcExit Error: ECMC_DRV_SCALE_NUM == 0...")
# ECMC_DRV_SCALE_NUM value OK == 600.0...
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(32768.0)<>0',SUCCESS_STR='ECMC_DRV_SCALE_DENOM value OK == 32768.0...',ERROR_STR='ECMC_DRV_SCALE_DENOM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(32768.0)<>0","# ECMC_DRV_SCALE_DENOM value OK == 32768.0...", "ecmcExit Error: ECMC_DRV_SCALE_DENOM == 0...")
# ECMC_DRV_SCALE_DENOM value OK == 32768.0...
epicsEnvUnset(ECMC_EXE_CMD)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd "EXPR_STR='-1>0',WARNING_STR='WARNING: ECMC_MRES setting is deprecated and will not be used. (MRES will be calulated instead: ECMC_ENC_SCALE_NUM/ECMC_ENC_SCALE_DENOM).. '"
#==============================================================================
# issueWarning.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"-1>0","", "#-")
epicsEnvUnset(ECMC_EXE_CMD)
ecmcConfigOrDie "Cfg.CreateAxis(1,1,0,0)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.health")"
ecmcConfigOrDie "Cfg.SetAxisModRange(1, 0)"
ecmcConfigOrDie "Cfg.SetAxisModType(1, 0)"
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd "EXPR_STR='-1>0',WARNING_STR='WARNING: ECMC_ACCL setting is deprecated. Please use ECMC_ACCS_EGU_PER_S2 instead..'"
#==============================================================================
# issueWarning.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"-1>0","", "#-")
epicsEnvUnset(ECMC_EXE_CMD)
ecmcEpicsEnvSetCalcTernary(ECMC_BLOCK_ACCL,"'EMPTY'!='EMPTY'","", "#-")
ecmcEpicsEnvSetCalcTernary(ECMC_BLOCK_ACCS,"'EMPTY'=='EMPTY'","", "#-")
ecmcConfigOrDie "Cfg.SetAxisAcc(1,10)"
ecmcConfigOrDie "Cfg.SetAxisDec(1,10)"
ecmcConfigOrDie "Cfg.SetAxisJerk(1,10.0)"
ecmcConfigOrDie "Cfg.SetAxisVel(1,10.0)"
ecmcConfigOrDie "Cfg.SetAxisEmergDeceleration(1,100)"
ecmcConfigOrDie "Cfg.SetAxisHomeVelTwordsCam(1,5)"
ecmcConfigOrDie "Cfg.SetAxisHomeVelOffCam(1,4)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKp(1,15.0)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKi(1,0.02)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKd(1,0.0)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKff(1,1.0)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s3.positionActual01,"ax1.enc.actpos")"
ecmcConfigOrDie "Cfg.SetAxisEncScaleDenom(1,2000)"
ecmcConfigOrDie "Cfg.SetAxisEncScaleNum(1,-60)"
ecmcConfigOrDie "Cfg.SetAxisEncType(1,1)"
ecmcConfigOrDie "Cfg.SetAxisEncBits(1,16)"
ecmcConfigOrDie "Cfg.SetAxisEncAbsBits(1,0)"
ecmcConfigOrDie "Cfg.SetAxisEncOffset(1,0)"
ecmcConfigOrDie "Cfg.SetAxisEncVelFilterSize(1,100)"
ecmcConfigOrDie "Cfg.SetAxisEncPosFilterSize(1,1)"
ecmcConfigOrDie "Cfg.SetAxisEncPosFilterEnable(1,0)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.reset")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.alarm0")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.alarm1")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.alarm2")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.warning")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.latchpos")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.latchcontrol")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.enc.latchstatus")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveControl01.0,"ax1.drv.control")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveStatus01.1,"ax1.drv.status")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.velocitySetpoint01,"ax1.drv.velocity")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.drv.position")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax1.drv.brake")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveControl01.2,"ax1.drv.reducetorque")"
ecmcConf2022/01/25 18:46:17.827 OK
2022/01/25 18:46:17.828 OK
2022/01/25 18:46:17.828 OK
2022/01/25 18:46:17.829 OK
2022/01/25 18:46:17.829 OK
2022/01/25 18:46:17.829 OK
2022/01/25 18:46:17.829 OK
2022/01/25 18:46:17.829 OK
2022/01/25 18:46:17.829 OK
2022/01/25 18:46:17.830 OK
2022/01/25 18:46:17.830 OK
2022/01/25 18:46:17.830 OK
2022/01/25 18:46:17.830 OK
2022/01/25 18:46:17.831 OK
2022/01/25 18:46:17.831 OK
2022/01/25 18:46:17.831 OK
2022/01/25 18:46:17.831 OK
2022/01/25 18:46:17.831 OK
2022/01/25 18:46:17.831 OK
2022/01/25 18:46:17.832 OK
2022/01/25 18:46:17.832 OK
2022/01/25 18:46:17.832 OK
2022/01/25 18:46:17.832 OK
2022/01/25 18:46:17.833 OK
2022/01/25 18:46:17.833 OK
2022/01/25 18:46:17.833 OK
2022/01/25 18:46:17.833 OK
2022/01/25 18:46:17.833 OK
2022/01/25 18:46:17.833 OK
2022/01/25 18:46:17.834 OK
2022/01/25 18:46:17.834 OK
2022/01/25 18:46:17.834 OK
2022/01/25 18:46:17.835 ecmcMotorRecord:: setIntegerParam(1 motorPowerAutoOnOff_)=2
2022/01/25 18:46:17.835 ecmcMotorRecord:: setDoubleParam(1 motorPowerOnDelay_)=6
2022/01/25 18:46:17.835 ecmcMotorRecord:: setDoubleParam(1 motorPowerOffDelay_=-1
2022/01/25 18:46:17.836 ecmcMotorRecord:: udateMotorLimitsRO(1) enabledHighAndLow=1 valid=1 fValueHigh=130 fValueLow=-20
2022/01/25 18:46:17.836 ecmcMotorRecord:: connected(1)
2022/01/25 18:46:17.836 ecmcMotorRecord:: initialPoll(1) status=0
igOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveControl01.1,"ax1.drv.reset")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveStatus01.3,"ax1.drv.alarm0")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveStatus01.7,"ax1.drv.alarm1")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveStatus01.14,"ax1.drv.alarm2")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s8.driveStatus01.2,"ax1.drv.warning")"
ecmcConfigOrDie "Cfg.SetAxisDrvScaleDenom(1,32768.0)"
ecmcConfigOrDie "Cfg.SetAxisDrvScaleNum(1,600.0)"
ecmcConfigOrDie "Cfg.SetAxisDrvBrakeOpenDelayTime(1,0)"
ecmcConfigOrDie "Cfg.SetAxisDrvBrakeCloseAheadTime(1,0)"
ecmcConfigOrDie "Cfg.SetAxisSoftLimitPosBwd(1,-20)"
ecmcConfigOrDie "Cfg.SetAxisEnableSoftLimitBwd(1,1)"
ecmcConfigOrDie "Cfg.SetAxisSoftLimitPosFwd(1,130)"
ecmcConfigOrDie "Cfg.SetAxisEnableSoftLimitFwd(1,1)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.binaryInput02.0,"ax1.mon.lowlim")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.binaryInput01.0,"ax1.mon.highlim")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.binaryInput03.0,"ax1.mon.homesensor")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.ONE.0,"ax1.mon.extinterlock")"
ecmcConfigOrDie "Cfg.SetAxisMonAtTargetTol(1,0.1)"
ecmcConfigOrDie "Cfg.SetAxisMonAtTargetTime(1,100)"
ecmcConfigOrDie "Cfg.SetAxisMonEnableAtTargetMon(1,1)"
ecmcConfigOrDie "Cfg.SetAxisMonPosLagTol(1,1.0)"
ecmcConfigOrDie "Cfg.SetAxisMonPosLagTime(1,10)"
ecmcConfigOrDie "Cfg.SetAxisMonEnableLagMon(1,1)"
ecmcConfigOrDie "Cfg.SetAxisMonMaxVel(1,100.0)"
ecmcConfigOrDie "Cfg.SetAxisMonEnableMaxVel(1,1)"
ecmcConfigOrDie "Cfg.SetAxisMonMaxVelDriveILDelay(1,200)"
ecmcConfigOrDie "Cfg.SetAxisMonMaxVelTrajILDelay(1,100)"
ecmcConfigOrDie "Cfg.SetAxisMonHomeSwitchPolarity(1,0)"
ecmcConfigOrDie "Cfg.SetAxisHomeLatchCountOffset(1,0.0)"
ecmcConfigOrDie "Cfg.SetAxisHomePosition(1,0.0)"
ecmcConfigOrDie "Cfg.SetAxisHomePostMoveEnable(1, 0)"
ecmcConfigOrDie "Cfg.SetAxisHomePostMoveTargetPosition(1, 0)"
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_mr.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_mr.cmd
#==============================================================================
# ecmc_axis_mr.cmd
ecmcMotorRecordCreateAxis(MCU1, "1", "6", )
ecmcEpicsEnvSetCalc("ECMC_TEMP_SREV","if(abs(2000)>0){RESULT:=abs(2000);} else {RESULT:=1.0};","%d")
ecmcEpicsEnvSetCalc("ECMC_TEMP_UREV","if(abs(-60)>0){RESULT:=abs(-60);} else {RESULT:=1.0};","%lf")
ecmcFileExist(ecmcMotorRecord.template,1,1)
dbLoadRecords(ecmcMotorRecord.template, "PREFIX=IOC_TEST:, MOTOR_NAME=Axis1, MOTOR_PORT=MCU1, AXIS_NO=1, DESC=MCU1021 Lower Axis (1), EGU=mm, PREC=3, VELO=10.0, JVEL=5, JAR=0.0, ACCS=10, RDBD=0.1, DLLM=-20, DHLM=130, HOMEPROC=3,SREV=2000,UREV=60.000000, ")
epicsEnvSet("ECMC_AXISFIELDINIT", "")
ecmcFileExist(ecmcMotorRecordhome.template,1,1)
dbLoadRecords(ecmcMotorRecordhome.template, "PREFIX=IOC_TEST:, MOTOR_NAME=Axis1, MOTOR_PORT=MCU1, AXIS_NO=1,HOMEPROC=3, HOMEPOS=0.0, HVELTO=5, HVELFRM=4, HOMEACC=21, HOMEDEC=100")
epicsEnvUnset(ECMC_TEMP_SREV)
epicsEnvUnset(ECMC_TEMP_UREV)
epicsEnvUnset(ECMC_BLOCK_ACCL)
epicsEnvUnset(ECMC_BLOCK_ACCS)
ecmcFileExist("ecmcAxis.db",1,1)
dbLoadRecords("ecmcAxis.db","P=IOC_TEST:,AXIS_NAME=Axis1,AXIS_NO=1,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,T_SMP_MS=10,TSE=-2")
ecmcFileExist("ecmcAxisType.db",1,1)
dbLoadRecords("ecmcAxisType.db","P=IOC_TEST:,AXIS_NAME=Axis1,AXIS_TYPE=1")
ecmcFileExist(/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_unset.cmd,1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_unset.cmd
#==============================================================================
# ecmc_axis_unset.cmd
epicsEnvUnset(ECMC_AXISCONFIG)
epicsEnvUnset(ECMC_AXISFIELDINIT)
epicsEnvUnset(ECMC_PREC)
epicsEnvUnset(ECMC_EGU)
epicsEnvUnset(ECMC_DESC)
epicsEnvUnset(ECMC_R)
epicsEnvUnset(ECMC_MOTOR_NAME)
epicsEnvUnset(ECMC_EC_AXIS_HEALTH)
epicsEnvUnset(ECMC_MOD_RANGE)
epicsEnvUnset(ECMC_MOD_TYPE)
epicsEnvUnset(ECMC_EMERG_DECEL)
epicsEnvUnset(ECMC_VELO)macLib: macro ECMC_EXE_CMD is undefined (expanding string ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'${ECMC_MODE=FULL}'='DAQ'","ecmcExit Error: ECMC started in DAQ mode. Motion not supported..","#-")${ECMC_EXE_CMD})
macLib: macro ECMC_EXE_CMD is undefined (expanding string ${ECMC_EXE_CMD})
epicsEnvUnset(ECMC_ACCL)
epicsEnvUnset(ECMC_ACCS_EGU_PER_S2)
epicsEnvUnset(ECMC_HOME_VEL_TO)
epicsEnvUnset(ECMC_HOME_VEL_FRM)
epicsEnvUnset(ECMC_CNTRL_KP)
epicsEnvUnset(ECMC_CNTRL_KI)
epicsEnvUnset(ECMC_CNTRL_KD)
epicsEnvUnset(ECMC_CNTRL_KFF)
epicsEnvUnset(ECMC_EC_ENC_ACTPOS)
epicsEnvUnset(ECMC_EC_ENC_LATCHPOS)
epicsEnvUnset(ECMC_EC_ENC_LATCH_CONTROL)
epicsEnvUnset(ECMC_EC_ENC_LATCH_STATUS)
epicsEnvUnset(ECMC_HOME_LATCH_COUNT_OFFSET)
epicsEnvUnset(ECMC_ENC_SCALE_DENOM)
epicsEnvUnset(ECMC_ENC_SCALE_NUM)
epicsEnvUnset(ECMC_ENC_TYPE)
epicsEnvUnset(ECMC_ENC_BITS)
epicsEnvUnset(ECMC_ENC_ABS_BITS)
epicsEnvUnset(ECMC_ENC_ABS_OFFSET)
epicsEnvUnset(ECMC_ENC_VEL_FILTER_SIZE)
epicsEnvUnset(ECMC_ENC_POS_FILTER_SIZE)
epicsEnvUnset(ECMC_ENC_POS_FILTER_ENABLE)
epicsEnvUnset(ECMC_EC_ENC_RESET)
epicsEnvUnset(ECMC_EC_ENC_ALARM_0)
epicsEnvUnset(ECMC_EC_ENC_ALARM_1)
epicsEnvUnset(ECMC_EC_ENC_ALARM_2)
epicsEnvUnset(ECMC_EC_ENC_WARNING)
epicsEnvUnset(ECMC_EC_DRV_CONTROL)
epicsEnvUnset(ECMC_EC_DRV_STATUS)
epicsEnvUnset(ECMC_EC_DRV_VELOCITY)
epicsEnvUnset(ECMC_EC_DRV_BRAKE)
epicsEnvUnset(ECMC_EC_DRV_REDUCE_TORQUE)
epicsEnvUnset(ECMC_EC_DRV_RESET)
epicsEnvUnset(ECMC_EC_DRV_ALARM_0)
epicsEnvUnset(ECMC_EC_DRV_ALARM_1)
epicsEnvUnset(ECMC_EC_DRV_ALARM_2)
epicsEnvUnset(ECMC_EC_DRV_WARNING)
epicsEnvUnset(ECMC_DRV_SCALE_DENOM)
epicsEnvUnset(ECMC_DRV_SCALE_NUM)
epicsEnvUnset(ECMC_DRV_BRAKE_OPEN_DLY_TIME)
epicsEnvUnset(ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME)
epicsEnvUnset(ECMC_SOFT_LOW_LIM)
epicsEnvUnset(ECMC_DXLM_ENABLE)
epicsEnvUnset(ECMC_SOFT_HIGH_LIM)
epicsEnvUnset(ECMC_DXLM_ENABLE)
epicsEnvUnset(ECMC_EC_MON_LOWLIM)
epicsEnvUnset(ECMC_EC_MON_HIGHLIM)
epicsEnvUnset(ECMC_EC_MON_HOME_SWITCH)
epicsEnvUnset(ECMC_EC_MON_EXT_INTERLOCK)
epicsEnvUnset(ECMC_MON_AT_TARGET_TOL)
epicsEnvUnset(ECMC_MON_AT_TARGET_TIME)
epicsEnvUnset(ECMC_MON_AT_TARGET_ENA)
epicsEnvUnset(ECMC_MON_LAG_MON_TOL)
epicsEnvUnset(ECMC_MON_LAG_MON_TIME)
epicsEnvUnset(ECMC_MON_LAG_MON_ENA)
epicsEnvUnset(ECMC_MON_VELO_MAX)
epicsEnvUnset(ECMC_MON_VELO_MAX_ENA)
epicsEnvUnset(ECMC_MON_VELO_MAX_DRV_TIME)
epicsEnvUnset(ECMC_MON_VELO_MAX_TRAJ_TIME)
epicsEnvUnset(ECMC_JOG_VEL)
epicsEnvUnset(ECMC_JAR)
epicsEnvUnset(ECMC_HOME_PROC)
epicsEnvUnset(ECMC_HOME_POS)
epicsEnvUnset(ECMC_HOME_ACC)
epicsEnvUnset(ECMC_HOME_DEC)
epicsEnvUnset(ECMC_DRV_TYPE)
epicsEnvUnset(ECMC_VELO)
epicsEnvUnset(ECMC_SOFT_LOW_LIM)
epicsEnvUnset(ECMC_SOFT_HIGH_LIM)
epicsEnvUnset(ECMC_HOME_POS_MOVE_ENA)
epicsEnvUnset(ECMC_HOME_POS_MOVE_TARG_POS)
epicsEnvUnset(ECMC_TRAJ_TYPE)
epicsEnvUnset(ECMC_JERK)
epicsEnvSet("ECMC_PREFIX" "IOC_TEST:")
# Set external setpoints
iocshLoad (/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyAxisSynchronization.cmd, CONFIG=./cfg/linear_1.sax)
#==============================================================================
# applyAxisSynchronization.cmd
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad ./cfg/linear_1.sax
############# Encoder
epicsEnvSet("ECMC_ENC_SOURCE", "0") # 0 Internal (from hardware), 1 from PLC
epicsEnvSet("ECMC_ENC_VELO_FILT_ENABLE", "1") # Enable velocity filter
epicsEnvSet("ECMC_ENC_VELO_FILT_SIZE", "20") # Encoder velocity Low pass filter size
############# Trajectory
epicsEnvSet("ECMC_TRAJ_SOURCE", "1") # 0 Internal (from hardware), 1 from PLC
epicsEnvSet("ECMC_TRAJ_VELO_FILT_ENABLE", "1") # Enable velocity filter
epicsEnvSet("ECMC_TRAJ_VELO_FILT_SIZE", "20") # Trajectory velocity Low pass filter size
############# Commands
epicsEnvSet("ECMC_CMD_FRM_OTHER_PLC_ENABLE", "1") # Allow commands from PLC
epicsEnvSet("ECMC_CMD_AXIS_PLC_ENABLE", "0") # Enable Axis PLC
# Each line below is appended to one single expression/source.
# Executed in sync with axis (before)
epicsEnvSet("ECMC_AXIS_EXPR_LINE_1", "var a:=1|")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_2", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_3", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_4", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_5", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_6", 2022/01/25 18:46:17.860 OK
2022/01/25 18:46:17.860 OK
2022/01/25 18:46:17.860 OK
2022/01/25 18:46:17.860 OK
2022/01/25 18:46:17.860 OK
2022/01/25 18:46:17.861 OK
2022/01/25 18:46:17.861 OK
2022/01/25 18:46:17.861 OK
2022/01/25 18:46:17.861 OK
2022/01/25 18:46:17.861 OK
2022/01/25 18:46:17.861 OK
2022/01/25 18:46:17.862 OK
2022/01/25 18:46:17.862 OK
2022/01/25 18:46:17.862 OK
2022/01/25 18:46:17.862 OK
2022/01/25 18:46:17.862 OK
2022/01/25 18:46:17.862 OK
2022/01/25 18:46:17.863 OK
"")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_7", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_8", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_9", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_10", "")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync.cmd
#==============================================================================
# ecmc_axis_sync.cmd
ecmcConfigOrDie "Cfg.SetAxisAllowCommandsFromPLC(1,1)"
ecmcConfigOrDie "Cfg.SetAxisPLCEnable(1,0)"
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)=var a:=1|"
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(1)="
ecmcConfigOrDie "Cfg.SetAxisPLCEncVelFilterSize(1,20)"
ecmcConfigOrDie "Cfg.SetAxisPLCEncVelFilterEnable(1,1)"
ecmcConfigOrDie "Cfg.SetAxisEncSourceType(1,0)"
ecmcConfigOrDie "Cfg.SetAxisPLCTrajVelFilterSize(1,20)"
ecmcConfigOrDie "Cfg.SetAxisPLCTrajVelFilterEnable(1,1)"
ecmcConfigOrDie "Cfg.SetAxisTrajSourceType(1,1)"
ecmcFileExist(/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync_unset.cmd,1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync_unset.cmd
#==============================================================================
# ecmc_axis_sync_unset.cmd
epicsEnvUnset(ECMC_CMD_FRM_OTHER_PLC_ENABLE)
epicsEnvUnset(ECMC_CMD_AXIS_PLC_ENABLE)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_1)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_2)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_3)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_4)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_5)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_6)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_7)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_8)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_9)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_10)
epicsEnvUnset(ECMC_ENC_VELO_FILT_SIZE)
epicsEnvUnset(ECMC_ENC_VELO_FILT_ENABLE)
epicsEnvUnset(ECMC_ENC_SOURCE)
epicsEnvUnset(ECMC_TRAJ_VELO_FILT_SIZE)
epicsEnvUnset(ECMC_TRAJ_VELO_FILT_ENABLE)
epicsEnvUnset(ECMC_TRAJ_SOURCE)
##############################################################################
## AXIS 2
#
#epicsEnvSet("DEV", "$(IOC)")
iocshLoad (/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/configureAxis.cmd, CONFIG=./cfg/linear_2.ax)
#==============================================================================
# configureAxis.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'FULL'='DAQ'","ecmcExit Error: ECMC started in DAQ mode. Motion not supported..","#-")
epicsEnvUnset(ECMC_EXE_CMD)
epicsEnvSet("ECMC_PREFIX" "IOC_TEST:")
ecmcFileExist("./cfg/linear_2.ax",1)
iocshLoad ./cfg/linear_2.ax ""
#General
epicsEnvSet("ECMC_MOTOR_NAME", "Axis2")
epicsEnvSet("ECMC_R", "Axis2-")
epicsEnvSet("ECMC_AXIS_NO", "2")
epicsEnvSet("ECMC_DESC", "MCU1021 Upper Axis (2)")
epicsEnvSet("ECMC_EGU", "mm") # Motor Record Unit
epicsEnvSet("ECMC_PREC", "3") # Motor Record Precision
epicsEnvSet("ECMC_AXISCONFIG", "") # Extra parameters to driver
epicsEnvSet("ECMC_EC_AXIS_HEALTH", "") # Entry for axis health output (example: ec0.s1.binaryOutput01.0)
epicsEnvSet("ECMC_MOD_RANGE" , "0") # Modulo range (traj setpoints and encoder values will be in range 0..ECMC_MOD_RANGE)
epicsEnvSet("ECMC_MOD_TYPE", "0") # For positioning and MOD_RANGE>0: 0 = Normal, 1 = Always Fwd, 2 = Always Bwd, 3 = Closest Distance
#Encoder
epicsEnvSet("ECMC_ENC_SCALE_NUM" "60")
epicsEnvSet("ECMC_ENC_SCALE_DENOM" "2000")
epicsEnvSet("ECMC_ENC_TYPE" "0") # Type: 0=Incremental, 1=Absolute
epicsEnvSet("ECMC_ENC_BITS" "16") # Total bit count of encoder raw data
epicsEnvSet("ECMC_ENC_ABS_BITS", "0") # Absolute bit count (for absolute encoders) always least significant part of ECMC_ENC_BITS
epicsEnvSet("ECMC_ENC_ABS_OFFSET" "0") # Encoder offset in eng units (for absolute encoders)
epicsEnvSet("ECMC_EC_ENC_ACTPOS", "ec0.s4.positionActual01") # Ethercat entry for actual position input (encoder)
epicsEnvSet("ECMC_EC_ENC_RESET", "") # Reset (if no encoder reset bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_0", "") # Error 0 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_1", "") # Error 1 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_2", "") # Error 2 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_WARNING", "") # Warning (if no encoder warning bit then leave empty)
#Drive
epicsEnvSet("ECMC_DRV_TYPE" "0") # Stepper: 0. DS402: 1 (DS402 = servos and advanced stepper drives)
epicsEnvSet("ECMC_DRV_SCALE_NUM" "-600.0") # Fastest speed in engineering units
epicsEnvSet("ECMC_DRV_SCALE_DENOM" "32768.0") # I/O range for ECMC_EC_ALIAS_DRV_VELO_SET
epicsEnvSet("ECMC_EC_DRV_CONTROL", "ec0.s9.driveControl01.0") # Ethercat entry for control word or bit output
epicsEnvSet("ECMC_EC_DRV_STATUS", "ec0.s9.driveStatus01.1") # Ethercat entry for status word or bit input
epicsEnvSet("ECMC_EC_DRV_VELOCITY", "ec0.s9.velocitySetpoint01") # Ethercat entry for velocity setpoint output
epicsEnvSet("ECMC_EC_DRV_REDUCE_TORQUE", "ec0.s9.driveControl01.2") # Ethercat entry for reduce torque output
epicsEnvSet("ECMC_EC_DRV_BRAKE", "") # Ethercat entry for brake output
epicsEnvSet("ECMC_DRV_BRAKE_OPEN_DLY_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_EC_DRV_RESET", "ec0.s9.driveControl01.1") # Reset
epicsEnvSet("ECMC_EC_DRV_ALARM_0", "ec0.s9.driveStatus01.3") # Error
epicsEnvSet("ECMC_EC_DRV_ALARM_1", "ec0.s9.driveStatus01.7") # Stall
epicsEnvSet("ECMC_EC_DRV_ALARM_2", "ec0.s9.driveStatus01.14") # Sync error
epicsEnvSet("ECMC_EC_DRV_WARNING", "ec0.s9.driveStatus01.2") # Warning
#Trajectory
epicsEnvSet("ECMC_VELO", "10.0")
epicsEnvSet("ECMC_JOG_VEL", "5")
epicsEnvSet("ECMC_JAR", "0.0") # JAR defaults to VELO/ACCL
epicsEnvSet("ECMC_ACCS_EGU_PER_S2", "10")
epicsEnvSet("ECMC_EMERG_DECEL", "100") # Emergency deceleration
#Homing
epicsEnvSet("ECMC_HOME_PROC", "3")
epicsEnvSet("ECMC_HOME_POS", "0.0")
epicsEnvSet("ECMC_HOME_VEL_TO", "5")
epicsEnvSet("ECMC_HOME_VEL_FRM", "4")
epicsEnvSet("ECMC_HOME_ACC", "21")
epicsEnvSet("ECMC_HOME_DEC", "100")
epicsEnvSet("ECMC_HOME_POS_MOVE_ENA", "0") # Enable move to position after successfull homing
epicsEnvSet("ECMC_HOME_POS_MOVE_TARG_POS","0") # Target position to go to after successfull homing
#Controller
epicsEnvSet("ECMC_CNTRL_KP", "15.0")
epicsEnvSet("ECMC_CNTRL_KI", "0.02")
epicsEnvSet("ECMC_CNTRL_KD", "0.0")
epicsEnvSet("ECMC_CNTRL_KFF", "1.0")
#Monitoring
# Switches
epicsEnvSet("ECMC_EC_MON_LOWLIM", "ec0.s1.binaryInput06.0") # Ethercat entry for low limit switch input
epicsEnvSet("ECMC_EC_MON_HIGHLIM", "ec0.s1.binaryInput05.0") # Ethercat entry for high limit switch inpuit
epicsEnvSet("ECMC_EC_MON_HOME_SWITCH", "ec0.s1.binaryInput07.0") # Ethercat entry for home switch input
epicsEnvSet("ECMC_EC_MON_EXT_INTERLOCK", "ec0.s0.ONE.0") # Ethercat entry for external interlock input
# Softlimits (disable with 0,0)
epicsEnvSet("ECMC_SOFT_LOW_LIM", "-130")
epicsEnvSet("ECMC_SOFT_HIGH_LIM", "20")
epicsEnvSet("ECMC_DXLM_ENABLE", "1")
# Position lag
epicsEnvSet("ECMC_MON_LAG_MON_TOL", "1.0")
epicsEnvSet("ECMC_MON_LAG_MON_TIME", "10")
epicsEnvSet("ECMC_MON_LAG_MON_ENA", "1")
# At target
epicsEnvSet("ECMC_MON_AT_TARGET_TOL", "0.1")
epicsEnvSet("ECMC_MON_AT_TARGET_TIME", "100")
epicsEnvSet("ECMC_MON_AT_TARGET_ENA", "1")
# Velocity
epicsEnvSet("ECMC_MON_VELO_MAX", "100.0")
epicsEnvSet("ECMC_MON_VELO_MAX_TRAJ_TIME","100")
epicsEnvSet("ECMC_MON_VELO_MAX_DRV_TIME", "200")
epicsEnvSet("ECMC_MON_VELO_MAX_ENA", "1")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addAxis.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/addAxis.cmd
#==============================================================================
# addAxis.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'FULL'='DAQ'","ecmcExit Error: ECMC started in DAQ mode. Motion not supported..","#-")
epicsEnvUnset(ECMC_EXE_CMD)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis-records.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis-records.cmd
#==============================================================================
# ecmc_axis-records.cmd
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis.cmd
#==============================================================================
# ecmc_axis.cmd
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(60)<>0',SUCCESS_STR='ECMC_ENC_SCALE_NUM value OK == 60...',ERROR_STR='ECMC_ENC_SCALE_NUM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(60)<>0","# ECMC_ENC_SCALE_NUM value OK == 60...", "ecmcExit Error: ECMC_ENC_SCALE_NUM == 0...")
# ECMC_ENC_SCALE_NUM value OK == 60...
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(2000)<>0',SUCCESS_STR='ECMC_ENC_SCALE_DENOM value OK == 2000...',ERROR_STR='ECMC_ENC_SCALE_DENOM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(2000)<>0","# ECMC_ENC_SCALE_DENOM value OK == 2000...", "ecmcExit Error: ECMC_ENC_SCALE_DENOM == 0...")
# ECMC_ENC_SCALE_DENOM value OK == 2000...
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(-600.0)<>0',SUCCESS_STR='ECMC_DRV_SCALE_NUM value OK == -600.0...',ERROR_STR='ECMC_DRV_SCALE_NUM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(-600.0)<>0","# ECMC_DRV_SCALE_NUM value OK == -600.0...", "ecmcExit Error: ECMC_DRV_SCALE_NUM == 0...")
# ECMC_DRV_SCALE_NUM value OK == -600.0...
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/verifyOrDie.cmd "EXPR_STR='abs(32768.0)<>0',SUCCESS_STR='ECMC_DRV_SCALE_DENOM value OK == 32768.0...',ERROR_STR='ECMC_DRV_SCALE_DENOM == 0...'"
#==============================================================================
# verifyOrDie.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"abs(32768.0)<>0","# ECMC_DRV_SCALE_DENOM value2022/01/25 18:46:17.879 OK
2022/01/25 18:46:17.879 OK
2022/01/25 18:46:17.879 OK
2022/01/25 18:46:17.879 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.883 OK
2022/01/25 18:46:17.884 OK
2022/01/25 18:46:17.884 OK
2022/01/25 18:46:17.884 OK
2022/01/25 18:46:17.884 OK
2022/01/25 18:46:17.884 OK
2022/01/25 18:46:17.884 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.885 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.886 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.887 OK
2022/01/25 18:46:17.888 OK
2022/01/25 18:46:17.888 OK
2022/01/25 18:46:17.888 OK
2022/01/25 18:46:17.888 OK
2022/01/25 18:46:17.888 OK
2022/01/25 18:46:17.888 OK
2022/01/25 18:46:17.889 OK
2022/01/25 18:46:17.889 OK
OK == 32768.0...", "ecmcExit Error: ECMC_DRV_SCALE_DENOM == 0...")
# ECMC_DRV_SCALE_DENOM value OK == 32768.0...
epicsEnvUnset(ECMC_EXE_CMD)
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd "EXPR_STR='-1>0',WARNING_STR='WARNING: ECMC_MRES setting is deprecated and will not be used. (MRES will be calulated instead: ECMC_ENC_SCALE_NUM/ECMC_ENC_SCALE_DENOM).. '"
#==============================================================================
# issueWarning.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"-1>0","", "#-")
epicsEnvUnset(ECMC_EXE_CMD)
ecmcConfigOrDie "Cfg.CreateAxis(2,1,0,0)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.health")"
ecmcConfigOrDie "Cfg.SetAxisModRange(2, 0)"
ecmcConfigOrDie "Cfg.SetAxisModType(2, 0)"
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/issueWarning.cmd "EXPR_STR='-1>0',WARNING_STR='WARNING: ECMC_ACCL setting is deprecated. Please use ECMC_ACCS_EGU_PER_S2 instead..'"
#==============================================================================
# issueWarning.cmd
ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD,"-1>0","", "#-")
epicsEnvUnset(ECMC_EXE_CMD)
ecmcEpicsEnvSetCalcTernary(ECMC_BLOCK_ACCL,"'EMPTY'!='EMPTY'","", "#-")
ecmcEpicsEnvSetCalcTernary(ECMC_BLOCK_ACCS,"'EMPTY'=='EMPTY'","", "#-")
ecmcConfigOrDie "Cfg.SetAxisAcc(2,10)"
ecmcConfigOrDie "Cfg.SetAxisDec(2,10)"
ecmcConfigOrDie "Cfg.SetAxisJerk(2,0)"
ecmcConfigOrDie "Cfg.SetAxisVel(2,10.0)"
ecmcConfigOrDie "Cfg.SetAxisEmergDeceleration(2,100)"
ecmcConfigOrDie "Cfg.SetAxisHomeVelTwordsCam(2,5)"
ecmcConfigOrDie "Cfg.SetAxisHomeVelOffCam(2,4)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKp(2,15.0)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKi(2,0.02)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKd(2,0.0)"
ecmcConfigOrDie "Cfg.SetAxisCntrlKff(2,1.0)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s4.positionActual01,"ax2.enc.actpos")"
ecmcConfigOrDie "Cfg.SetAxisEncScaleDenom(2,2000)"
ecmcConfigOrDie "Cfg.SetAxisEncScaleNum(2,60)"
ecmcConfigOrDie "Cfg.SetAxisEncType(2,0)"
ecmcConfigOrDie "Cfg.SetAxisEncBits(2,16)"
ecmcConfigOrDie "Cfg.SetAxisEncAbsBits(2,0)"
ecmcConfigOrDie "Cfg.SetAxisEncOffset(2,0)"
ecmcConfigOrDie "Cfg.SetAxisEncVelFilterSize(2,100)"
ecmcConfigOrDie "Cfg.SetAxisEncPosFilterSize(2,1)"
ecmcConfigOrDie "Cfg.SetAxisEncPosFilterEnable(2,0)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.reset")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.alarm0")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.alarm1")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.alarm2")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.warning")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.latchpos")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.latchcontrol")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.enc.latchstatus")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveControl01.0,"ax2.drv.control")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveStatus01.1,"ax2.drv.status")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.velocitySetpoint01,"ax2.drv.velocity")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.drv.position")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(,"ax2.drv.brake")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveControl01.2,"ax2.drv.reducetorque")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveControl01.1,"ax2.drv.reset")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveStatus01.3,"ax2.drv.alarm0")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveStatus01.7,"ax2.drv.alarm1")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveStatus01.14,"ax2.drv.alarm2")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s9.driveStatus01.2,"ax2.drv.warning")"
ecmcConfigOrDie "Cfg.SetAxisDrvScaleDenom(2,32768.0)"
ecmcConfigOrDie "Cfg.SetAxisDrvScaleNum(2,-600.0)"
ecmcConfigOrDie "Cfg.SetAxisDrvBrakeOpenDelayTime(2,0)"
ecmcConfigOrDie "Cfg.SetAxisDrvBr2022/01/25 18:46:17.889 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.890 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.891 OK
2022/01/25 18:46:17.892 OK
2022/01/25 18:46:17.892 OK
2022/01/25 18:46:17.892 OK
2022/01/25 18:46:17.892 OK
2022/01/25 18:46:17.892 OK
2022/01/25 18:46:17.893 OK
2022/01/25 18:46:17.893 OK
2022/01/25 18:46:17.893 OK
2022/01/25 18:46:17.893 OK
2022/01/25 18:46:17.894 ecmcMotorRecord:: setIntegerParam(2 motorPowerAutoOnOff_)=2
2022/01/25 18:46:17.894 ecmcMotorRecord:: setDoubleParam(2 motorPowerOnDelay_)=6
2022/01/25 18:46:17.894 ecmcMotorRecord:: setDoubleParam(2 motorPowerOffDelay_=-1
2022/01/25 18:46:17.894 ecmcMotorRecord:: udateMotorLimitsRO(2) enabledHighAndLow=1 valid=1 fValueHigh=20 fValueLow=-130
2022/01/25 18:46:17.894 ecmcMotorRecord:: connected(2)
2022/01/25 18:46:17.894 ecmcMotorRecord:: initialPoll(2) status=0
akeCloseAheadTime(2,0)"
ecmcConfigOrDie "Cfg.SetAxisSoftLimitPosBwd(2,-130)"
ecmcConfigOrDie "Cfg.SetAxisEnableSoftLimitBwd(2,1)"
ecmcConfigOrDie "Cfg.SetAxisSoftLimitPosFwd(2,20)"
ecmcConfigOrDie "Cfg.SetAxisEnableSoftLimitFwd(2,1)"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.binaryInput06.0,"ax2.mon.lowlim")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.binaryInput05.0,"ax2.mon.highlim")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s1.binaryInput07.0,"ax2.mon.homesensor")"
ecmcConfigOrDie "Cfg.LinkEcEntryToObject(ec0.s0.ONE.0,"ax2.mon.extinterlock")"
ecmcConfigOrDie "Cfg.SetAxisMonAtTargetTol(2,0.1)"
ecmcConfigOrDie "Cfg.SetAxisMonAtTargetTime(2,100)"
ecmcConfigOrDie "Cfg.SetAxisMonEnableAtTargetMon(2,1)"
ecmcConfigOrDie "Cfg.SetAxisMonPosLagTol(2,1.0)"
ecmcConfigOrDie "Cfg.SetAxisMonPosLagTime(2,10)"
ecmcConfigOrDie "Cfg.SetAxisMonEnableLagMon(2,1)"
ecmcConfigOrDie "Cfg.SetAxisMonMaxVel(2,100.0)"
ecmcConfigOrDie "Cfg.SetAxisMonEnableMaxVel(2,1)"
ecmcConfigOrDie "Cfg.SetAxisMonMaxVelDriveILDelay(2,200)"
ecmcConfigOrDie "Cfg.SetAxisMonMaxVelTrajILDelay(2,100)"
ecmcConfigOrDie "Cfg.SetAxisMonHomeSwitchPolarity(2,0)"
ecmcConfigOrDie "Cfg.SetAxisHomeLatchCountOffset(2,0.0)"
ecmcConfigOrDie "Cfg.SetAxisHomePosition(2,0.0)"
ecmcConfigOrDie "Cfg.SetAxisHomePostMoveEnable(2, 0)"
ecmcConfigOrDie "Cfg.SetAxisHomePostMoveTargetPosition(2, 0)"
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_mr.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_mr.cmd
#==============================================================================
# ecmc_axis_mr.cmd
ecmcMotorRecordCreateAxis(MCU1, "2", "6", )
ecmcEpicsEnvSetCalc("ECMC_TEMP_SREV","if(abs(2000)>0){RESULT:=abs(2000);} else {RESULT:=1.0};","%d")
ecmcEpicsEnvSetCalc("ECMC_TEMP_UREV","if(abs(60)>0){RESULT:=abs(60);} else {RESULT:=1.0};","%lf")
ecmcFileExist(ecmcMotorRecord.template,1,1)
dbLoadRecords(ecmcMotorRecord.template, "PREFIX=IOC_TEST:, MOTOR_NAME=Axis2, MOTOR_PORT=MCU1, AXIS_NO=2, DESC=MCU1021 Upper Axis (2), EGU=mm, PREC=3, VELO=10.0, JVEL=5, JAR=0.0, ACCS=10, RDBD=0.1, DLLM=-130, DHLM=20, HOMEPROC=3,SREV=2000,UREV=60.000000, ")
epicsEnvSet("ECMC_AXISFIELDINIT", "")
ecmcFileExist(ecmcMotorRecordhome.template,1,1)
dbLoadRecords(ecmcMotorRecordhome.template, "PREFIX=IOC_TEST:, MOTOR_NAME=Axis2, MOTOR_PORT=MCU1, AXIS_NO=2,HOMEPROC=3, HOMEPOS=0.0, HVELTO=5, HVELFRM=4, HOMEACC=21, HOMEDEC=100")
epicsEnvUnset(ECMC_TEMP_SREV)
epicsEnvUnset(ECMC_TEMP_UREV)
epicsEnvUnset(ECMC_BLOCK_ACCL)
epicsEnvUnset(ECMC_BLOCK_ACCS)
ecmcFileExist("ecmcAxis.db",1,1)
dbLoadRecords("ecmcAxis.db","P=IOC_TEST:,AXIS_NAME=Axis2,AXIS_NO=2,PORT=MC_CPU1,ADDR=0,TIMEOUT=1,T_SMP_MS=10,TSE=-2")
ecmcFileExist("ecmcAxisType.db",1,1)
dbLoadRecords("ecmcAxisType.db","P=IOC_TEST:,AXIS_NAME=Axis2,AXIS_TYPE=1")
ecmcFileExist(/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_unset.cmd,1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_unset.cmd
#==============================================================================
# ecmc_axis_unset.cmd
epicsEnvUnset(ECMC_AXISCONFIG)
epicsEnvUnset(ECMC_AXISFIELDINIT)
epicsEnvUnset(ECMC_PREC)
epicsEnvUnset(ECMC_EGU)
epicsEnvUnset(ECMC_DESC)
epicsEnvUnset(ECMC_R)
epicsEnvUnset(ECMC_MOTOR_NAME)
epicsEnvUnset(ECMC_EC_AXIS_HEALTH)
epicsEnvUnset(ECMC_MOD_RANGE)
epicsEnvUnset(ECMC_MOD_TYPE)
epicsEnvUnset(ECMC_EMERG_DECEL)
epicsEnvUnset(ECMC_VELO)
epicsEnvUnset(ECMC_ACCL)
epicsEnvUnset(ECMC_ACCS_EGU_PER_S2)
epicsEnvUnset(ECMC_HOME_VEL_TO)
epicsEnvUnset(ECMC_HOME_VEL_FRM)
epicsEnvUnset(ECMC_CNTRL_KP)
epicsEnvUnset(ECMC_CNTRL_KI)
epicsEnvUnset(ECMC_CNTRL_KD)
epicsEnvUnset(ECMC_CNTRL_KFF)
epicsEnvUnset(ECMC_EC_ENC_ACTPOS)
epicsEnvUnset(ECMC_EC_ENC_LATCHPOS)
epicsEnvUnset(ECMC_EC_ENC_LATCH_CONTROL)
epicsEnvUnset(ECMC_EC_ENC_LATCH_STATUS)
epicsEnvUnset(ECMC_HOME_LATCH_COUNT_OFFSET)
epicsEnvUnset(ECMC_ENC_SCALE_DENOM)
epicsEnvUnset(ECMC_ENC_SCALE_NUM)
epicsEnvUnset(ECMC_ENC_TYPE)
epicsEnvUnset(ECMC_ENC_BITS)
epicsEnvUnset(ECMC_ENC_ABS_BITS)
epicmacLib: macro ECMC_EXE_CMD is undefined (expanding string ecmcEpicsEnvSetCalcTernary(ECMC_EXE_CMD, "'${ECMC_MODE=FULL}'='DAQ'","ecmcExit Error: ECMC started in DAQ mode. Motion not supported..","#-")${ECMC_EXE_CMD})
macLib: macro ECMC_EXE_CMD is undefined (expanding string ${ECMC_EXE_CMD})
2022/01/25 18:46:17.910 OK
2022/01/25 18:46:17.911 OK
sEnvUnset(ECMC_ENC_ABS_OFFSET)
epicsEnvUnset(ECMC_ENC_VEL_FILTER_SIZE)
epicsEnvUnset(ECMC_ENC_POS_FILTER_SIZE)
epicsEnvUnset(ECMC_ENC_POS_FILTER_ENABLE)
epicsEnvUnset(ECMC_EC_ENC_RESET)
epicsEnvUnset(ECMC_EC_ENC_ALARM_0)
epicsEnvUnset(ECMC_EC_ENC_ALARM_1)
epicsEnvUnset(ECMC_EC_ENC_ALARM_2)
epicsEnvUnset(ECMC_EC_ENC_WARNING)
epicsEnvUnset(ECMC_EC_DRV_CONTROL)
epicsEnvUnset(ECMC_EC_DRV_STATUS)
epicsEnvUnset(ECMC_EC_DRV_VELOCITY)
epicsEnvUnset(ECMC_EC_DRV_BRAKE)
epicsEnvUnset(ECMC_EC_DRV_REDUCE_TORQUE)
epicsEnvUnset(ECMC_EC_DRV_RESET)
epicsEnvUnset(ECMC_EC_DRV_ALARM_0)
epicsEnvUnset(ECMC_EC_DRV_ALARM_1)
epicsEnvUnset(ECMC_EC_DRV_ALARM_2)
epicsEnvUnset(ECMC_EC_DRV_WARNING)
epicsEnvUnset(ECMC_DRV_SCALE_DENOM)
epicsEnvUnset(ECMC_DRV_SCALE_NUM)
epicsEnvUnset(ECMC_DRV_BRAKE_OPEN_DLY_TIME)
epicsEnvUnset(ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME)
epicsEnvUnset(ECMC_SOFT_LOW_LIM)
epicsEnvUnset(ECMC_DXLM_ENABLE)
epicsEnvUnset(ECMC_SOFT_HIGH_LIM)
epicsEnvUnset(ECMC_DXLM_ENABLE)
epicsEnvUnset(ECMC_EC_MON_LOWLIM)
epicsEnvUnset(ECMC_EC_MON_HIGHLIM)
epicsEnvUnset(ECMC_EC_MON_HOME_SWITCH)
epicsEnvUnset(ECMC_EC_MON_EXT_INTERLOCK)
epicsEnvUnset(ECMC_MON_AT_TARGET_TOL)
epicsEnvUnset(ECMC_MON_AT_TARGET_TIME)
epicsEnvUnset(ECMC_MON_AT_TARGET_ENA)
epicsEnvUnset(ECMC_MON_LAG_MON_TOL)
epicsEnvUnset(ECMC_MON_LAG_MON_TIME)
epicsEnvUnset(ECMC_MON_LAG_MON_ENA)
epicsEnvUnset(ECMC_MON_VELO_MAX)
epicsEnvUnset(ECMC_MON_VELO_MAX_ENA)
epicsEnvUnset(ECMC_MON_VELO_MAX_DRV_TIME)
epicsEnvUnset(ECMC_MON_VELO_MAX_TRAJ_TIME)
epicsEnvUnset(ECMC_JOG_VEL)
epicsEnvUnset(ECMC_JAR)
epicsEnvUnset(ECMC_HOME_PROC)
epicsEnvUnset(ECMC_HOME_POS)
epicsEnvUnset(ECMC_HOME_ACC)
epicsEnvUnset(ECMC_HOME_DEC)
epicsEnvUnset(ECMC_DRV_TYPE)
epicsEnvUnset(ECMC_VELO)
epicsEnvUnset(ECMC_SOFT_LOW_LIM)
epicsEnvUnset(ECMC_SOFT_HIGH_LIM)
epicsEnvUnset(ECMC_HOME_POS_MOVE_ENA)
epicsEnvUnset(ECMC_HOME_POS_MOVE_TARG_POS)
epicsEnvUnset(ECMC_TRAJ_TYPE)
epicsEnvUnset(ECMC_JERK)
epicsEnvSet("ECMC_PREFIX" "IOC_TEST:")
# Set external setpoints
iocshLoad (/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/applyAxisSynchronization.cmd, CONFIG=./cfg/linear_2.sax)
#==============================================================================
# applyAxisSynchronization.cmd
epicsEnvUnset(ECMC_EXE_CMD)
iocshLoad ./cfg/linear_2.sax
############# Encoder
epicsEnvSet("ECMC_ENC_SOURCE", "0") # 0 Internal (from hardware), 1 from PLC
epicsEnvSet("ECMC_ENC_VELO_FILT_ENABLE", "1") # Enable velocity filter
epicsEnvSet("ECMC_ENC_VELO_FILT_SIZE", "20") # Encoder velocity Low pass filter size
############# Trajectory
epicsEnvSet("ECMC_TRAJ_SOURCE", "1") # 0 Internal (from hardware), 1 from PLC
epicsEnvSet("ECMC_TRAJ_VELO_FILT_ENABLE", "1") # Enable velocity filter
epicsEnvSet("ECMC_TRAJ_VELO_FILT_SIZE", "20") # Trajectory velocity Low pass filter size
############# Commands
epicsEnvSet("ECMC_CMD_FRM_OTHER_PLC_ENABLE", "1") # Allow commands from PLC
epicsEnvSet("ECMC_CMD_AXIS_PLC_ENABLE", "0") # Enable Axis PLC
# Each line below is appended to one single expression/source.
# Executed in sync with axis (before)
epicsEnvSet("ECMC_AXIS_EXPR_LINE_1", "var a:=1|")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_2", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_3", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_4", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_5", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_6", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_7", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_8", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_9", "")
epicsEnvSet("ECMC_AXIS_EXPR_LINE_10", "")
ecmcFileExist("/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync.cmd",1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync.cmd
#==============================================================================
# ecmc_axis_sync.cmd
ecmcConfigOrDie "Cfg.SetAxisAllowCommandsFromPLC(2,1)"
ecmcConfigOrDie "Cfg.SetAxisPLCEnable(2,0)"
e2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.911 OK
2022/01/25 18:46:17.912 OK
2022/01/25 18:46:17.912 OK
2022/01/25 18:46:17.912 OK
2022/01/25 18:46:17.912 OK
2022/01/25 18:46:17.912 OK
2022/01/25 18:46:17.912 OK
cmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)=var a:=1|"
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.AppendAxisPLCExpr(2)="
ecmcConfigOrDie "Cfg.SetAxisPLCEncVelFilterSize(2,20)"
ecmcConfigOrDie "Cfg.SetAxisPLCEncVelFilterEnable(2,1)"
ecmcConfigOrDie "Cfg.SetAxisEncSourceType(2,0)"
ecmcConfigOrDie "Cfg.SetAxisPLCTrajVelFilterSize(2,20)"
ecmcConfigOrDie "Cfg.SetAxisPLCTrajVelFilterEnable(2,1)"
ecmcConfigOrDie "Cfg.SetAxisTrajSourceType(2,1)"
ecmcFileExist(/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync_unset.cmd,1)
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/ecmc_axis_sync_unset.cmd
#==============================================================================
# ecmc_axis_sync_unset.cmd
epicsEnvUnset(ECMC_CMD_FRM_OTHER_PLC_ENABLE)
epicsEnvUnset(ECMC_CMD_AXIS_PLC_ENABLE)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_1)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_2)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_3)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_4)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_5)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_6)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_7)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_8)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_9)
epicsEnvUnset(ECMC_AXIS_EXPR_LINE_10)
epicsEnvUnset(ECMC_ENC_VELO_FILT_SIZE)
epicsEnvUnset(ECMC_ENC_VELO_FILT_ENABLE)
epicsEnvUnset(ECMC_ENC_SOURCE)
epicsEnvUnset(ECMC_TRAJ_VELO_FILT_SIZE)
epicsEnvUnset(ECMC_TRAJ_VELO_FILT_ENABLE)
epicsEnvUnset(ECMC_TRAJ_SOURCE)
##############################################################################
## Load plugin:
epicsEnvSet("PLUGIN_VER" ,"develop")
require ecmc_plugin_grbl develop
Module ecmc_plugin_grbl version develop found in /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/
Module ecmc_plugin_grbl depends on asyn 4.41.0
Module asyn version 4.41.0 already loaded
Module ecmc_plugin_grbl depends on ecmc ruckig
Module ecmc version ruckig already loaded
Loading library /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/lib/linux-arm/libecmc_plugin_grbl.so
Loaded ecmc_plugin_grbl version develop
Loading dbd file /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/dbd/ecmc_plugin_grbl.dbd
Calling function ecmc_plugin_grbl_registerRecordDeviceDriver
Loading module info records for ecmc_plugin_grbl
epicsEnvSet(ECMC_PLUGIN_FILNAME,"/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/lib/linux-arm/libecmc_plugin_grbl.so")
epicsEnvSet(ECMC_PLUGIN_CONFIG,"DBG_PRINT=0;X_AXIS=1;Y_AXIS=2;AUTO_ENABLE=1;") # Only one option implemented in this plugin
iocshLoad /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmccfg/ruckig/loadPlugin.cmd, "PLUGIN_ID=0,FILE=/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/lib/linux-arm/libecmc_plugin_grbl.so,CONFIG='DBG_PRINT=0;X_AXIS=1;Y_AXIS=2;AUTO_ENABLE=1;', REPORT=1"
#==============================================================================
# loadPlugin.cmd
ecmcConfigOrDie "Cfg.LoadPlugin(0,/home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/lib/linux-arm/libecmc_plugin_grbl.so,DBG_PRINT=0;X_AXIS=1;Y_AXIS=2;AUTO_ENABLE=1;)"
../ecmc_plugin_grbl/ecmcGrbl.cpp:doReadWorker:227
../ecmc_plugin_grbl/ecmcGrbl.cpp:doMainWorker:299
../grbl/grbl_serial.c:serial_init:70:
../grbl/grbl_eeprom.c:ecmc_init_file:53
../grbl/grbl_settings.c:settings_restore:132 settings_restore complete!!!..
../grbl/grbl_eeprom.c:memcpy_from_eeprom_with_checksum:215 EEPROM simulated by file..
../grbl/grbl_system.c:system_init:26:
../grbl/grbl_eeprom.c:memcpy_from_eeprom_with_checksum:215 EEPROM simulated by file..
../grbl/grbl_spindle_control.c:spindle_init:31 Not supported yet..
../grbl/grbl_coolant_control.c:coolant_init:25 Not supported yet..
../grbl/grbl_limits.c:limits_init2022/01/25 18:46:18.118 OK
2022/01/25 18:46:18.119 OK
:44 Not supported yet..
../grbl/grbl_probe.c:probe_init:31 Not supported yet..
Waiting for grbl init..../ecmc_plugin_grbl/ecmcGrbl.cpp:doWriteWorker:241
../grbl/grbl_system.c:system_check_safety_door_ajar:93:
../grbl/grbl_system.c:system_execute_startup:107:
../grbl/grbl_eeprom.c:memcpy_from_eeprom_with_checksum:215 EEPROM simulated by file..
../grbl/grbl_eeprom.c:memcpy_from_eeprom_with_checksum:215 EEPROM simulated by file..
GRBL READY FOR COMMANDS:
Grbl 1.1h ['$' for help]
.ecmcEpicsEnvSetCalcTernary("ECMC_PLUGIN_REPORT", "1>0","","#")
ecmcConfigOrDie "Cfg.ReportPlugin(0)"
Plugin info:
Index = 0
Name = ecmcPluginGrbl
Description = grbl plugin for use with ecmc.
Option description =
DBG_PRINT=<1/0> : Enables/disables printouts from plugin, default = disabled (=0).
X_AXIS=<axis id>: Ecmc Axis id for use as grbl X axis, default = disabled (=-1).
Y_AXIS=<axis id>: Ecmc Axis id for use as grbl Y axis, default = disabled (=-1).
Z_AXIS=<axis id>: Ecmc Axis id for use as grbl Z axis, default = disabled (=-1).
SPINDLE_AXIS=<axis id>: Ecmc Axis id for use as grbl spindle axis, default = disabled (=-1).
AUTO_ENABLE=<1/0>: Auto enable the linked ecmc axes autmatically before start, default = disabled (=0).
Filename = /home/pi/epics/base-7.0.5/require/3.4.0/siteMods/ecmc_plugin_grbl/develop/lib/linux-arm/libecmc_plugin_grbl.so
Config string = DBG_PRINT=0;X_AXIS=1;Y_AXIS=2;AUTO_ENABLE=1;
Version = 2
Interface version = 65536 (ecmc = 65536)
max plc funcs = 64
max plc func args = 10
max plc consts = 64
Construct func = @0xb51180b8
Enter realtime func = @0xb5118060
Exit realtime func = @0xb5118068
Realtime func = @0xb51180a8
Destruct func = @0xb5118080
dlhandle = @0xca6e30
Plc functions:
funcs[00]:
Name = "grbl_connect();"
Desc = double grbl_connect() : Connect to grbl interface (from config str).
Arg count = 0
func = @0xb5118070
Plc constants:
epicsEnvUnset(ECMC_PLUGIN_REPORT);
epicsEnvUnset(ECMC_PLUGIN_FILNAME)
epicsEnvUnset(ECMC_PLUGIN_CONFIG)
ecmcGrblAddCommand("G1X20Y20F180");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 1
ecmcGrblAddCommand("G2X0Y0R20");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 2
ecmcGrblAddCommand("G0X10Y10");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 3
ecmcGrblAddCommand("G1X0Y20");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 4
ecmcGrblAddCommand("G1X10Y0F360");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 5
ecmcGrblAddCommand("G4P1");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 6
ecmcGrblAddCommand("G1X50Y50F180");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 7
ecmcGrblAddCommand("G4P1");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 8
ecmcGrblAddCommand("G1X0Y0F360");
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:505:
../ecmc_plugin_grbl/ecmcGrbl.cpp:addCommand:509: Buffer size 9
#ecmcGrblAddCommand("G1X20Y20F180");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCommand("G2X0Y0R20");
#ecmcGrblAddCommand("G0X10Y10");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCommand("G1X10Y0F360");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCommand("G1X50Y50F180");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCommand("G1X0Y0F360");
#ecmcGrblAddCommand("G1X20Y20F180");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCommand("G2X0Y0R20");
#ecmcGrblAddCommand("G0X10Y10");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCommand("G1X10Y0F360");
#ecmcGrblAddCommand("G4P1");
#ecmcGrblAddCom2022/01/25 18:46:18.120 OK
2022/01/25 18:46:18.120 OK
2022/01/25 18:46:18.120 OK
2022/01/25 18:46:18.120 OK
2022/01/25 18:46:18.120 OK
2022/01/25 18:46:18.120 OK
2022/01/25 18:46:18.124 INFO: Locking memory