88 lines
3.9 KiB
Plaintext
88 lines
3.9 KiB
Plaintext
##############################################################################
|
|
## Example: Demo of ecmc SocketCAN plugin
|
|
## https://github.com/anderssandstrom/e3-ecmc_plugin_socketcan
|
|
##
|
|
## The plugin exposes:
|
|
##
|
|
|
|
## Initiation:
|
|
epicsEnvSet("IOC" ,"$(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" ,"$(SCRIPTEXEC="iocshLoad")")
|
|
|
|
require ecmccfg 6.3.2
|
|
|
|
# run module startup.cmd (only needed at ESS PSI auto call at require)
|
|
$(ECMCCFG_INIT)$(SCRIPTEXEC) ${ecmccfg_DIR}startup.cmd, "IOC=$(IOC),ECMC_VER=6.3.2,MASTER_ID=-1"
|
|
|
|
##############################################################################
|
|
## Configure hardware:
|
|
# No EtherCAT hardware (in this example)..
|
|
|
|
##############################################################################
|
|
## Load plugin:
|
|
require ecmc_plugin_socketcan master # do not require then loaded twice..
|
|
|
|
epicsEnvSet(ECMC_PLUGIN_FILNAME,"/home/dev/epics/base-7.0.4/require/${E3_REQUIRE_VERSION}/siteMods/ecmc_plugin_socketcan/master/lib/${EPICS_HOST_ARCH=linux-x86_64}/libecmc_plugin_socketcan.so")
|
|
epicsEnvSet(ECMC_PLUGIN_CONFIG,"IF=can0;DBG_PRINT=1;") # Only one option implemented in this plugin
|
|
${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=0,FILE=${ECMC_PLUGIN_FILNAME},CONFIG='${ECMC_PLUGIN_CONFIG}', REPORT=1"
|
|
epicsEnvUnset(ECMC_PLUGIN_FILNAME)
|
|
epicsEnvUnset(ECMC_PLUGIN_CONFIG)
|
|
|
|
##############################################################################
|
|
## PLC 0
|
|
$(SCRIPTEXEC) $(ecmccfg_DIR)loadPLCFile.cmd, "PLC_ID=0, SAMPLE_RATE_MS=1000,FILE=./plc/can.plc")
|
|
|
|
##############################################################################
|
|
############# Configure CAN plugin:
|
|
# Commands:
|
|
# ecmcCANOpenAddMaster -h
|
|
# Use ecmcCANOpenAddMaster(<name>, <node id>,....)
|
|
# <name> : Name of master device.
|
|
# <node id> : CANOpen node id of master.
|
|
# <LSS sample time ms> : Sample time for LSS.
|
|
# <Sync sample time ms> : Sample time for SYNC.
|
|
# <Heartbeat sample time ms> : Sample time for Heartbeat.
|
|
#
|
|
ecmcCANOpenAddMaster("ecmcCANOpenMaster",0,1000,1000,1000)
|
|
|
|
# ecmcCANOpenAddDevice -h
|
|
# Use ecmcCANOpenAddDevice(<name>, <node id>)
|
|
# <name> : Name of device.
|
|
# <node id> : CANOpen node id of device.
|
|
#
|
|
ecmcCANOpenAddDevice("pmu905",3)
|
|
|
|
# ecmcCANOpenAddPDO -h
|
|
# Use "ecmcCANOpenAddPDO(<name>, <node id>
|
|
# <name> : Name of master device.
|
|
# <node id> : CANOpen node id of device/master.
|
|
# <cob id> : CANOpen cob id of PDO.
|
|
# <dir> : Direction 1=write and 2=read.
|
|
# <ODSize> : Size of PDO (max 8 bytes).
|
|
# <readTimeoutMs> : Readtimeout in ms.
|
|
# <writeCycleMs> : Cycle time for write (if <= 0 then only write on change).
|
|
ecmcCANOpenAddPDO("status",3,2,8,10000,0) # READ
|
|
|
|
# ecmcCANOpenAddSDO -h
|
|
# Use ecmcCANOpenAddSDO(<name>, <node id>,.....)
|
|
# <name> : Name of master device.
|
|
# <node id> : CANOpen node id of device/master.
|
|
# <cob id tx> : CANOpen cob id of Tx of slave SDO.
|
|
# <cob id rx> : CANOpen cob id of Rx of slave SDO.
|
|
# <dir> : Direction 1=write and 2=read.
|
|
# <ODIndex> : OD index of SDO.
|
|
# <ODSubIndex> : OD sub index of SDO.
|
|
# <ODSize> : OS Size.
|
|
# <readTimeoutMs> : Readtimeout in ms.
|
|
#
|
|
ecmcCANOpenAddSDO("analogValues",3,0x583,0x603,2,0x2640,0x0,56,7000) # READ
|
|
ecmcCANOpenAddSDO("basicConfig",3,0x583,0x603,1,0x2690,0x1,7,0) # WRITE
|
|
|
|
##############################################################################
|
|
############# Go to realtime:
|
|
|
|
ecmcConfigOrDie "Cfg.SetAppMode(1)"
|
|
iocInit
|
|
dbl > pvs.log
|