From d0532c2552d171e07dc509a4f534e7b4ad955127 Mon Sep 17 00:00:00 2001 From: Daniel Sissom Date: Tue, 25 Jun 2024 12:26:24 -0500 Subject: [PATCH] Added IOC files for running with 8 MD90 controllers. --- .../iocDsm/motor.substitutions.md90.multi | 33 ++++ iocs/dsmIOC/iocBoot/iocDsm/st.cmd.md90.multi | 178 ++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 iocs/dsmIOC/iocBoot/iocDsm/motor.substitutions.md90.multi create mode 100644 iocs/dsmIOC/iocBoot/iocDsm/st.cmd.md90.multi diff --git a/iocs/dsmIOC/iocBoot/iocDsm/motor.substitutions.md90.multi b/iocs/dsmIOC/iocBoot/iocDsm/motor.substitutions.md90.multi new file mode 100644 index 0000000..d8d483d --- /dev/null +++ b/iocs/dsmIOC/iocBoot/iocDsm/motor.substitutions.md90.multi @@ -0,0 +1,33 @@ +file "$(MOTOR)/db/basic_asyn_motor.db" +{ +pattern +{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, VMAX, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT} +{DSM:, 0, "m$(N)", "asynMotor", MD900, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 1, "m$(N)", "asynMotor", MD901, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 2, "m$(N)", "asynMotor", MD902, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 3, "m$(N)", "asynMotor", MD903, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 4, "m$(N)", "asynMotor", MD904, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 5, "m$(N)", "asynMotor", MD905, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 6, "m$(N)", "asynMotor", MD906, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +{DSM:, 7, "m$(N)", "asynMotor", MD907, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""} +} + +# P IOC prefix +# N Port number +# M Record name pattern +# DTYP Datatype +# PORT Port +# ADDR Address +# DESC Description +# EGU Engineering units +# DIR Direction +# VELO Velocity (EGU / s) (note: jog velocity set separately by JVEL) +# VBAS Minimum velocity (EGU / s) +# VMAX Maximum velocity (EGU / s) (note: not getting set here with basic_asyn_motor.db) +# ACCL Acceleration (time in seconds until VELO) +# BDST Backlash distance +# MRES Motor step size (EGU) +# PREC Display precision number of decimal places +# DHLM Dial high travel limit (EGU) +# DLLM Dial low travel limit (EGU) +# INIT Initialization string (seems to be unused/broken) diff --git a/iocs/dsmIOC/iocBoot/iocDsm/st.cmd.md90.multi b/iocs/dsmIOC/iocBoot/iocDsm/st.cmd.md90.multi new file mode 100644 index 0000000..c2550f6 --- /dev/null +++ b/iocs/dsmIOC/iocBoot/iocDsm/st.cmd.md90.multi @@ -0,0 +1,178 @@ +#errlogInit(5000) +< envPaths + +# Tell EPICS all about the record types, device-support modules, drivers, etc. +dbLoadDatabase("../../dbd/dsm.dbd") +dsm_registerRecordDeviceDriver(pdbbase) + +# Unfortunately, iocsh doesn't support looping... + +# Local serial port +drvAsynSerialPortConfigure("serial0", "/dev/ttyUSB0", 0, 0, 0) +drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB1", 0, 0, 0) +drvAsynSerialPortConfigure("serial2", "/dev/ttyUSB2", 0, 0, 0) +drvAsynSerialPortConfigure("serial3", "/dev/ttyUSB3", 0, 0, 0) +drvAsynSerialPortConfigure("serial4", "/dev/ttyUSB4", 0, 0, 0) +drvAsynSerialPortConfigure("serial5", "/dev/ttyUSB5", 0, 0, 0) +drvAsynSerialPortConfigure("serial6", "/dev/ttyUSB6", 0, 0, 0) +drvAsynSerialPortConfigure("serial7", "/dev/ttyUSB7", 0, 0, 0) + +asynSetOption("serial0", 0, "baud", "115200") +asynSetOption("serial1", 0, "baud", "115200") +asynSetOption("serial2", 0, "baud", "115200") +asynSetOption("serial3", 0, "baud", "115200") +asynSetOption("serial4", 0, "baud", "115200") +asynSetOption("serial5", 0, "baud", "115200") +asynSetOption("serial6", 0, "baud", "115200") +asynSetOption("serial7", 0, "baud", "115200") + +asynSetOption("serial0", 0, "bits", "8") +asynSetOption("serial1", 0, "bits", "8") +asynSetOption("serial2", 0, "bits", "8") +asynSetOption("serial3", 0, "bits", "8") +asynSetOption("serial4", 0, "bits", "8") +asynSetOption("serial5", 0, "bits", "8") +asynSetOption("serial6", 0, "bits", "8") +asynSetOption("serial7", 0, "bits", "8") + +asynSetOption("serial0", 0, "parity", "none") +asynSetOption("serial1", 0, "parity", "none") +asynSetOption("serial2", 0, "parity", "none") +asynSetOption("serial3", 0, "parity", "none") +asynSetOption("serial4", 0, "parity", "none") +asynSetOption("serial5", 0, "parity", "none") +asynSetOption("serial6", 0, "parity", "none") +asynSetOption("serial7", 0, "parity", "none") + +asynSetOption("serial0", 0, "stop", "1") +asynSetOption("serial1", 0, "stop", "1") +asynSetOption("serial2", 0, "stop", "1") +asynSetOption("serial3", 0, "stop", "1") +asynSetOption("serial4", 0, "stop", "1") +asynSetOption("serial5", 0, "stop", "1") +asynSetOption("serial6", 0, "stop", "1") +asynSetOption("serial7", 0, "stop", "1") + +asynOctetSetInputEos("serial0", 0, "\r") +asynOctetSetInputEos("serial1", 0, "\r") +asynOctetSetInputEos("serial2", 0, "\r") +asynOctetSetInputEos("serial3", 0, "\r") +asynOctetSetInputEos("serial4", 0, "\r") +asynOctetSetInputEos("serial5", 0, "\r") +asynOctetSetInputEos("serial6", 0, "\r") +asynOctetSetInputEos("serial7", 0, "\r") + +asynOctetSetOutputEos("serial0", 0, "\r") +asynOctetSetOutputEos("serial1", 0, "\r") +asynOctetSetOutputEos("serial2", 0, "\r") +asynOctetSetOutputEos("serial3", 0, "\r") +asynOctetSetOutputEos("serial4", 0, "\r") +asynOctetSetOutputEos("serial5", 0, "\r") +asynOctetSetOutputEos("serial6", 0, "\r") +asynOctetSetOutputEos("serial7", 0, "\r") + +asynSetTraceIOMask("serial0", 0, 2) +asynSetTraceIOMask("serial1", 0, 2) +asynSetTraceIOMask("serial2", 0, 2) +asynSetTraceIOMask("serial3", 0, 2) +asynSetTraceIOMask("serial4", 0, 2) +asynSetTraceIOMask("serial5", 0, 2) +asynSetTraceIOMask("serial6", 0, 2) +asynSetTraceIOMask("serial7", 0, 2) + +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial0", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial1", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial2", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial3", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial4", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial5", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial6", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +# Turn on the power supply and set the deadband +asynOctetConnect("initConnection", "serial7", 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') + +MD90CreateController("MD900", "serial0", 1, 100, 5000) +MD90CreateController("MD901", "serial1", 1, 100, 5000) +MD90CreateController("MD902", "serial2", 1, 100, 5000) +MD90CreateController("MD903", "serial3", 1, 100, 5000) +MD90CreateController("MD904", "serial4", 1, 100, 5000) +MD90CreateController("MD905", "serial5", 1, 100, 5000) +MD90CreateController("MD906", "serial6", 1, 100, 5000) +MD90CreateController("MD907", "serial7", 1, 100, 5000) + +### Motors +dbLoadTemplate "motor.substitutions.md90.multi" + +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial0,PORT=serial0,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial1,PORT=serial1,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial2,PORT=serial2,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial3,PORT=serial3,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial4,PORT=serial4,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial5,PORT=serial5,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial6,PORT=serial6,ADDR=0,OMAX=80,IMAX=80") +dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=DSM:,R=serial7,PORT=serial7,ADDR=0,OMAX=80,IMAX=80") + +iocInit + +# This IOC does not use save/restore, so set values of some PVs +dbpf("DSM:m0.RTRY", "0") +dbpf("DSM:m0.TWV", "0.1") +dbpf("DSM:m0.VMAX", "0.625") + +dbpf("DSM:m1.RTRY", "0") +dbpf("DSM:m1.TWV", "0.1") +dbpf("DSM:m1.VMAX", "0.625") + +dbpf("DSM:m2.RTRY", "0") +dbpf("DSM:m2.TWV", "0.1") +dbpf("DSM:m2.VMAX", "0.625") + +dbpf("DSM:m3.RTRY", "0") +dbpf("DSM:m3.TWV", "0.1") +dbpf("DSM:m3.VMAX", "0.625") + +dbpf("DSM:m4.RTRY", "0") +dbpf("DSM:m4.TWV", "0.1") +dbpf("DSM:m4.VMAX", "0.625") + +dbpf("DSM:m5.RTRY", "0") +dbpf("DSM:m5.TWV", "0.1") +dbpf("DSM:m5.VMAX", "0.625") + +dbpf("DSM:m6.RTRY", "0") +dbpf("DSM:m6.TWV", "0.1") +dbpf("DSM:m6.VMAX", "0.625") + +dbpf("DSM:m7.RTRY", "0") +dbpf("DSM:m7.TWV", "0.1") +dbpf("DSM:m7.VMAX", "0.625")