1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| #!../../bin/linux-loong64/ecmcIoc
< envPaths
cd "${TOP}"
## Register all support components
dbLoadDatabase "dbd/ecmcIoc.dbd"
ecmcIoc_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadRecords("db/xxx.db","user=${USER}")
# ecmccfg路径配置
epicsEnvSet "ecmccfg_DIR", "${ECMC}/scripts/"
epicsEnvSet "ecmccfg_DB", "${ECMC}/db/"
epicsEnvSet "ECMC_CONFIG_ROOT", "${ecmccfg_DIR}"
epicsEnvSet "ECMC_CONFIG_DB", "${ecmccfg_DB}"
epicsEnvSet "SCRIPTEXEC", "iocshLoad"
#- 初始化
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}initAll.cmd", "SM_MOTOR_PORT=MCU1,SM_ASYN_PORT=MC_CPU1,SM_PREFIX=${IOC}:"
# EtherCAT主站号
epicsEnvSet "MASTER_ID", 0
# 扫描频率,默认 1000
epicsEnvSet "EC_RATE", 100
# 工作模式,默认 FULL,可选 FULL/DAQ/NO_MR
epicsEnvSet "ECMC_MODE", "DAQ"
epicsEnvSet "ECMC_PVA", "NO"
epicsEnvSet "ECMC_EC_TOOL_PATH", "/usr/bin/ethercat"
#-
#-------------------------------------------------------------------------------
# Set EtherCAT frequency (defaults to 1000)
ecmcConfigOrDie "Cfg.SetSampleRate(${EC_RATE=1000})"
#-
#- Set current EtherCAT sample rate
#- Note: Not the same as ECMC_SAMPLE_RATE_MS which is for record update
epicsEnvSet "ECMC_EC_SAMPLE_RATE", ${EC_RATE=1000}
ecmcEpicsEnvSetCalc("ECMC_EC_SAMPLE_RATE_MS", 1000/${ECMC_EC_SAMPLE_RATE=1000})
# Update records in 10ms (100Hz) for FULL MODE and in EC_RATE for DAQ mode
ecmcEpicsEnvSetCalcTernary(ECMC_SAMPLE_RATE_MS, "'${ECMC_MODE=FULL}'=='DAQ'","${ECMC_EC_SAMPLE_RATE_MS}","10")
epicsEnvSet(ECMC_SAMPLE_RATE_MS_ORIGINAL, ${ECMC_SAMPLE_RATE_MS})
#- define naming convention script
epicsEnvSet "ECMC_P_SCRIPT", "${NAMING=mXsXXX}"
#- Set master
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}addMaster.cmd", "MASTER_ID=${MASTER_ID=0}"
epicsEnvSet "ECMC_EC_MASTER_ID", ${MASTER_ID=0}
#- Add slaves
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}addSlave.cmd", "SLAVE_ID=0, HW_DESC=EK1100"
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}addSlave.cmd", "SLAVE_ID=1, HW_DESC=EL4024"
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}addSlave.cmd", "SLAVE_ID=2, HW_DESC=EL2624"
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}addSlave.cmd", "SLAVE_ID=3, HW_DESC=EL3742, NELM=10"
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}addSlave.cmd", "SLAVE_ID=4, HW_DESC=EK1110"
#- Apply hardware configuration
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}applyConfig.cmd"
#- Load PLCs
#${SCRIPTEXEC} "${ecmccfg_DIR}loadPLCFile.cmd", "FILE=${TOP}/iocBoot/${IOC}/test1.plc, ECMC_TMP_FILE=/tmp/PLC1.plc, DESC=test, SAMPLE_RATE_MS=125"
#- Configure diagnostics:
ecmcConfigOrDie "Cfg.EcSetDiagnostics(1)"
ecmcConfigOrDie "Cfg.EcEnablePrintouts(0)"
ecmcConfigOrDie "Cfg.EcSetDomainFailedCyclesLimit(100)"
#- Activate
${SCRIPTEXEC} "${ECMC_CONFIG_ROOT}setAppMode.cmd"
#Set Affinity of ecmc_rt (core 1)
epicsThreadSetAffinity ecmc_rt 1
cd "${TOP}/iocBoot/${IOC}"
iocInit
## Start any sequence programs
#seq sncxxx,"user=${USER}"
#seq procServControl, "P=${IOC}"
|