diff --git a/iocBoot/iocWithAsyn/motor.substitutions.phytron b/iocBoot/iocWithAsyn/motor.substitutions.phytron new file mode 100644 index 00000000..dc3443f5 --- /dev/null +++ b/iocBoot/iocWithAsyn/motor.substitutions.phytron @@ -0,0 +1,50 @@ +################################################################################ +# PORT - asynPort created for the Phytron controller +# ADDR - Address of the axis - right digit represents the index of the axis +# of a I1AM01 module, the remaining digit(s) on the lef represent the +# index of the I1AM01 module +################################################################################ + +file "../../db/Phytron_motor.db" +{ +pattern +{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, VMAX, ACCL, BDST, BVEL, BACC, MRES, ERES, PREC, DHLM, DLLM, INIT} +{PHYIOC:, 1, "m$(N)", "asynMotor", phyMotionPort, 11, "motor $(N)", Deg, Pos, 360, 180, 720, .5, 0, 180, .2, 1.8, 0.18, 5, 1440, -1440, ""} +{PHYIOC:, 2, "m$(N)", "asynMotor", phyMotionPort, 21, "motor $(N)", Deg, Pos, 360, 180, 720, .5, 0, 180, .2, 1.8, 0.18, 5, 1440, -1440, ""} + +} + +################################################################################ +# P - MUST MATCH Controller specific name in Phytron_MCM01.db substitution +# pattern (below) +# PORT - asynPort created for the Phytron controller +# ADDR - Address of the axis - right digit represents the index of the axis +# of a I1AM01 module, the remaining digit(s) on the lef represent the +# index of the I1AM01 module +# TIMEOUT - asyn timeout +# SCAN - Periodic scan rate of Power stage temperature and Motor temperature +# records +# INIT - If set to YES, ao records will be initialized with the values defined +# in the macros that follow INIT. If set to NO, records will not be +# initialized - this option is useful if auto save/restore is used +################################################################################ +file "../../db/Phytron_I1AM01.db" +{ +pattern +{P, N, M, PORT, ADDR, SCAN, TIMEOUT, INIT, HOMING, MODE, POS_OFFSET, NEG_OFFSET, INIT_TIME, POS_TIME, BOOST, SWITCH_TYP, PWR_STAGE, ENC_TYP, ENC_SFI, ENC_DIR, STOP_CURR, RUN_CURR, BOOST_CURR, CURRENT_DELAY, STEP_RES, PS_MON } +{PHYIOC, 1, ":m$(N)", phyMotionPort, 11, "1 second", 3, YES, 0, 1, 0, 0, 20, 20, 0, 0, 1, 1, 0, 1 20, 400, 500, 20, 0, 1} +{PHYIOC, 2, ":m$(N)", phyMotionPort, 21, "1 second", 3, YES, 0, 1, 0, 0, 20, 20, 0, 0, 1, 1, 0, 1 20, 400, 500, 20, 0, 1} +} + +################################################################################ +# P - Controller specific name +# PORT - asynPort created for the Phytron controller +# ADDR - Arbitrary value between 0 and 255 +# TIMEOUT - asyn timeout +################################################################################ +file "../../db/Phytron_MCM01.db" +{ +pattern +{P, DTYP, PORT, ADDR, TIMEOUT} +{PHYIOC, "asynMotor", phyMotionPort, 0, 10 } +} diff --git a/iocBoot/iocWithAsyn/st.cmd.phytron b/iocBoot/iocWithAsyn/st.cmd.phytron new file mode 100644 index 00000000..9e7079d4 --- /dev/null +++ b/iocBoot/iocWithAsyn/st.cmd.phytron @@ -0,0 +1,24 @@ +#!../../bin/linux-x86_64/phytronAxis + +## You may have to change phytronAxis to something else +## everywhere it appears in this file + +< envPaths + +## Register all support components +dbLoadDatabase("../../dbd/WithAsyn.dbd",0,0) +WithAsyn_registerRecordDeviceDriver(pdbbase) + +#drvAsynIPPortConfigure("testPort","localhost:8000",0,0,1) +drvAsynIPPortConfigure("testRemote","10.5.1.181:22222",0,0,1) + +#phytronCreateController (phytronPort, asynPort, movingPollPeriod, idlePollPeriod, timeout) +phytronCreateController ("phyMotionPort", "testRemote", 100, 100, 1000) + +#phytronCreateAxis(phytronPort, module, axis) +phytronCreateAxis("phyMotionPort", 1, 1) +phytronCreateAxis("phyMotionPort", 2, 1) + +dbLoadTemplate "motor.substitutions.phytron" + +iocInit() diff --git a/motorApp/Db/Makefile b/motorApp/Db/Makefile index d2d06c0f..f872ed32 100644 --- a/motorApp/Db/Makefile +++ b/motorApp/Db/Makefile @@ -43,6 +43,7 @@ DB += profileMoveAxis.template DB += profileMoveControllerXPS.template DB += profileMoveAxisXPS.template DB += PI_Support.db PI_SupportCtrl.db +DB += Phytron_motor.db Phytron_I1AM01.db Phytron_MCM01.db #---------------------------------------------------- # Declare template files which do not show up in DB diff --git a/motorApp/Db/Phytron_I1AM01.db b/motorApp/Db/Phytron_I1AM01.db new file mode 100644 index 00000000..01e1f166 --- /dev/null +++ b/motorApp/Db/Phytron_I1AM01.db @@ -0,0 +1,1092 @@ +################################################################################ +# This database contains records corresponding to additional parameters (not +# handled by the motor record) of the I1AM01 motion controller. +# +# Output records, used to set the parameter values have a suffix _SET, readback +# records, used to read the parameters have a suffix _GET. +# +# Initialization, status and reset records have no suffixes. +################################################################################ + +################################################################################ +# Reset Axis +################################################################################ +record(bo, "$(P)$(M)-RESET") +{ + field(DESC, "Reset axis") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))AXIS_RESET") +} + +################################################################################ +# Reset Axis Status +################################################################################ +record(bo, "$(P)$(M)-RESET-STATUS") +{ + field(DESC, "Reset axis status") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))AXIS_STATUS_RESET") +} + + +################################################################################ +# Initialization of _SET records +# REINIT_ is triggered every time MCM01 module is reset +################################################################################ +record(seq, "$(P)$(M)-INIT-AXIS-1") +{ + field(DESC, "Axis initialization") + field(LNK1, "$(P)$(M)-HOMING_SET PP") + field(DOL1, "$(HOMING)") + field(LNK2, "$(P)$(M)-MOVE-TYP_SET PP") + field(DOL2, "$(MODE)") + field(LNK3, "$(P)$(M)-POS-OFFSET_SET PP") + field(DOL3, "$(POS_OFFSET)") + field(LNK4, "$(P)$(M)-NEG-OFFSET_SET PP") + field(DOL4, "$(NEG_OFFSET)") + field(LNK5, "$(P)$(M)-INIT-TIMEOUT_SET PP") + field(DOL5, "$(INIT_TIME)") + field(LNK6, "$(P)$(M)-POS-TIMEOUT_SET PP") + field(DOL6, "$(POS_TIME)") + field(LNK7, "$(P)$(M)-BOOST_SET PP") + field(DOL7, "$(BOOST)") + field(LNK8, "$(P)$(M)-SWITCH-TYP_SET PP") + field(DOL8, "$(SWITCH_TYP)") + field(LNK9, "$(P)$(M)-PWR-STAGE-MODE_SET PP") + field(DOL9, "$(PWR_STAGE)") + field(SELM, "All") + field(PINI, "$(INIT)") + field(FLNK, "$(P)$(M)-INIT-AXIS-2") +} + +record(seq, "$(P)$(M)-INIT-AXIS-2") +{ + field(DESC, "Axis initialization") + field(LNK1, "$(P)$(M)-ENC-TYP_SET PP") + field(DOL1, "$(ENC_TYP)") + field(LNK2, "$(P)$(M)-ENC-SFI_SET PP") + field(DOL2, "$(ENC_SFI)") + field(LNK3, "$(P)$(M)-STOP-CURRENT_SET PP") + field(DOL3, "$(STOP_CURR)") + field(LNK4, "$(P)$(M)-RUN-CURRENT_SET PP") + field(DOL4, "$(RUN_CURR)") + field(LNK5, "$(P)$(M)-BOOST-CURRENT_SET PP") + field(DOL5, "$(BOOST_CURR)") + field(LNK6, "$(P)$(M)-CURRENT-DELAY_SET PP") + field(DOL6, "$(CURRENT_DELAY)") + field(LNK7, "$(P)$(M)-STEP-RES_SET PP") + field(DOL7, "$(STEP_RES)") + field(LNK8, "$(P)$(M)-PS-MONITOR_SET PP") + field(DOL8, "$(PS_MON)") + field(LNK9, "$(P)$(M)-ENC-DIR_SET PP") + field(DOL9, "$(ENC_DIR)") + field(SELM, "All") +} + +record(seq, "$(P)$(M)-REINIT_") +{ + field(DESC, "Reinit after reset") + field(SCAN, "Passive") + field(DOL1, "$(P)-RESET_ CPP") + field(LNK1, "$(P)$(M)-INIT-AXIS-1.PROC") + field(SELM, "All") +} + +################################################################################ +# STATUS_ record reads axis status from the device, the two mbbiDirect records +# are used to parse the status bits. STATUS_ uses I/O Intr SCAN, because the +# status value is read in phytronAxis::poll +# SHFT field is used, therefore DTYP of mbbiDirect must be set to Raw Soft Channel. +################################################################################ +record(ai, "$(P)$(M)-STATUS_") +{ + field(DESC, "Axis status") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))AXIS_STATUS") + field(SCAN, "I/O Intr") + field(FLNK, "$(P)$(M)-STATUS-1") +} + +record(mbbiDirect, "$(P)$(M)-STATUS-1") +{ + field(DESC, "Axis status bits") + field(DTYP, "Raw Soft Channel") + field(INP, "$(P)$(M)-STATUS_") + field(FLNK, "$(P)$(M)-STATUS-2") +} + +record(mbbiDirect, "$(P)$(M)-STATUS-2") +{ + field(DESC, "Axis status bits") + field(DTYP, "Raw Soft Channel") + field(INP, "$(P)$(M)-STATUS_") + field(SHFT, "16") + field(FLNK, "$(P)$(M)-AXIS-BUSY") +} + +################################################################################ +# Axis status records. See DESC field +################################################################################ +record(bi, "$(P)$(M)-AXIS-BUSY") +{ + field(DESC, "Axis busy") + field(INP, "$(P)$(M)-STATUS-1.B0") + field(ZNAM, "NOT BUSY") + field(ONAM, "BUSY") + field(FLNK, "$(P)$(M)-COMMAND") +} + +record(bi, "$(P)$(M)-COMMAND") +{ + field(DESC, "Command invalid") + field(INP, "$(P)$(M)-STATUS-1.B1") + field(ZNAM, "VALID") + field(ONAM, "INVALID") + field(FLNK, "$(P)$(M)-WAIT-SYNC") +} + +record(bi, "$(P)$(M)-WAIT-SYNC") +{ + field(DESC, "Waiting for synchronization") + field(INP, "$(P)$(M)-STATUS-1.B2") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-INITIALIZED") +} + +record(bi, "$(P)$(M)-INITIALIZED") +{ + field(DESC, "Axis initialized") + field(INP, "$(P)$(M)-STATUS-1.B3") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-LS-POS") +} + +record(bi, "$(P)$(M)-LS-POS") +{ + field(DESC, "Positive limit switch") + field(INP, "$(P)$(M)-STATUS-1.B4") + field(ZNAM, "NOT ACTIVE") + field(ONAM, "ACTIVE") + field(FLNK, "$(P)$(M)-LS-NEG") +} + +record(bi, "$(P)$(M)-LS-NEG") +{ + field(DESC, "Negative limit switch") + field(INP, "$(P)$(M)-STATUS-1.B5") + field(ZNAM, "NOT ACTIVE") + field(ONAM, "ACTIVE") + field(FLNK, "$(P)$(M)-LS-CNT") +} + +record(bi, "$(P)$(M)-LS-CNT") +{ + field(DESC, "Center switch") + field(INP, "$(P)$(M)-STATUS-1.B6") + field(ZNAM, "NOT ACTIVE") + field(ONAM, "ACTIVE") + field(FLNK, "$(P)$(M)-SWL-POS") +} + +record(bi, "$(P)$(M)-SWL-POS") +{ + field(DESC, "Positive software limit") + field(INP, "$(P)$(M)-STATUS-1.B7") + field(ZNAM, "NOT ACTIVE") + field(ONAM, "ACTIVE") + field(FLNK, "$(P)$(M)-SWL-NEG") +} + +record(bi, "$(P)$(M)-SWL-NEG") +{ + field(DESC, "Negative software limit") + field(INP, "$(P)$(M)-STATUS-1.B8") + field(ZNAM, "NOT ACTIVE") + field(ONAM, "ACTIVE") + field(FLNK, "$(P)$(M)-INT-ERR") +} + +record(bi, "$(P)$(M)-INT-ERR") +{ + field(DESC, "Axis internal error") + field(INP, "$(P)$(M)-STATUS-1.BB") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-LS-ERR") +} + +record(bi, "$(P)$(M)-LS-ERR") +{ + field(DESC, "Axis Limit switch error") + field(INP, "$(P)$(M)-STATUS-1.BC") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-PS-ERR") +} + +record(bi, "$(P)$(M)-PS-ERR") +{ + field(DESC, "Power stage error") + field(INP, "$(P)$(M)-STATUS-1.BD") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-SFI-ERR") +} + +record(bi, "$(P)$(M)-SFI-ERR") +{ + field(DESC, "Axis SFI error") + field(INP, "$(P)$(M)-STATUS-1.BE") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-ENDAT-ERR") +} + +record(bi, "$(P)$(M)-ENDAT-ERR") +{ + field(DESC, "Axis ENDAT error") + field(INP, "$(P)$(M)-STATUS-1.BF") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-RUNNING") +} + +record(bi, "$(P)$(M)-RUNNING") +{ + field(DESC, "Axis is running") + field(INP, "$(P)$(M)-STATUS-2.B0") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-RECOVERY") +} + +record(bi, "$(P)$(M)-RECOVERY") +{ + field(DESC, "Axis is in recovery") + field(INP, "$(P)$(M)-STATUS-2.B1") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-STP-DLY") +} + +record(bi, "$(P)$(M)-STP-DLY") +{ + field(DESC, "Axis in stop current delay") + field(INP, "$(P)$(M)-STATUS-2.B2") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-POSITIONED") +} + +record(bi, "$(P)$(M)-POSITIONED") +{ + field(DESC, "Axis in position") + field(INP, "$(P)$(M)-STATUS-2.B3") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-APS-READY") +} + +record(bi, "$(P)$(M)-APS-READY") +{ + field(DESC, "Axis aps ready") + field(INP, "$(P)$(M)-STATUS-2.B4") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-POSITIONING") +} + +record(bi, "$(P)$(M)-POSITIONING") +{ + field(DESC, "Axis in positioning mode") + field(INP, "$(P)$(M)-STATUS-2.B5") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-FREE-RUN") +} + +record(bi, "$(P)$(M)-FREE-RUN") +{ + field(DESC, "Axis in free running") + field(INP, "$(P)$(M)-STATUS-2.B6") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-MULTI-F") +} + +record(bi, "$(P)$(M)-MULTI-F") +{ + field(DESC, "Axis multi F run") + field(INP, "$(P)$(M)-STATUS-2.B7") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-SYNC-ALLOWED") +} + +record(bi, "$(P)$(M)-SYNC-ALLOWED") +{ + field(DESC, "Axis multi F run") + field(INP, "$(P)$(M)-STATUS-2.B8") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)$(M)-AXIS-ERR") +} + +record(calc, "$(P)$(M)-AXIS-ERR") +{ + field(DESC, "Any axis err") + field(INPA, "$(P)$(M)-COMMAND") + field(INPB, "$(P)$(M)-LS-POS") + field(INPC, "$(P)$(M)-LS-NEG") + field(INPD, "$(P)$(M)-LS-CNT") + field(INPE, "$(P)$(M)-SWL-POS") + field(INPF, "$(P)$(M)-SWL-NEG") + field(INPG, "$(P)$(M)-INT-ERR") + field(INPH, "$(P)$(M)-LS-ERR") + field(INPI, "$(P)$(M)-PS-ERR") + field(INPJ, "$(P)$(M)-SFI-ERR") + field(INPK, "$(P)$(M)-ENDAT-ERR") + field(CALC, "A||B||C||D||E||F||G||H||I||J||K") + +} + +################################################################################ +# Homing procedure type +# KEEP IN MIND PARAMETERS THAT HOMING FINISHES BY MOVING FOR AND ADDITIONAL +# OFFSET, DEFINED IN PARAMETERS P11 AND P12 +################################################################################ +record(mbbo, "$(P)$(M)-HOMING_SET") +{ + field(DESC, "Homing Type") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))HOMING_PROCEDURE") + field(ZRST, "Limit") #HOMF (R+), HOMR (R-) + field(ZRVL, "0") + field(ONST, "Center") #HOMF (R+C)-Offset P11, HOMR (R-C)+Offset P12 + field(ONVL, "1") + field(TWST, "Encoder") #HOMF (R+I), HOMR (R+I), Offsets + field(TWVL, "2") + field(THST, "Limit-Encoder") #HOMF (R+^I), HOMR (R-^I), Offsets + field(THVL, "3") + field(FRST, "Center-Encoder") #HOMF (R+C^I), HOMR (R-C^I), Offsets + field(FRVL, "4") + field(FVST, "Reference-Center") #HOMF RC+, HOMR RC-, Offsets + field(FVVL, "5") + field(SXST, "Ref-Center-Encoder") #HOMF RC+^I, HOMR RC-^I, Offsets + field(SXVL, "6") + field(FLNK, "$(P)$(M)-HOMING_GET") +} + +record(mbbi, "$(P)$(M)-HOMING_GET") +{ + field(DESC, "Homing Type") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))HOMING_PROCEDURE") + field(ZRST, "Limit") #HOMF (R+), HOMR (R-) + field(ZRVL, "0") + field(ONST, "Center") #HOMF (R+C)-Offset P11, HOMR (R-C)+Offset P12 + field(ONVL, "1") + field(TWST, "Encoder") #HOMF (R+I), HOMR (R+I), Offsets + field(TWVL, "2") + field(THST, "Limit-Encoder") #HOMF (R+^I), HOMR (R-^I), Offsets + field(THVL, "3") + field(FRST, "Center-Encoder") #HOMF (R+C^I), HOMR (R-C^I), Offsets + field(FRVL, "4") + field(FVST, "Reference-Center") #HOMF RC+, HOMR RC-, Offsets + field(FVVL, "5") + field(SXST, "Ref-Center-Encoder") #HOMF RC+^I, HOMR RC-^I, Offsets + field(SXVL, "6") + field(PINI, "YES") +} + +################################################################################ +# P01: Controller provides the following modes of movement, however software +# limits are always monitored by the motor record, so only modes 0 and 1 are +# exposed to the user +# 0: Rotational movement +# 1: Hardware limit switches are monitored +# 2: Software limit switch are monitored +# 3: Hardware and software limit switches are monitored +################################################################################ +record(mbbo, "$(P)$(M)-MOVE-TYP_SET") +{ + field(DESC, "Move type") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))AXIS_MODE") + field(ZRST, "Rotational") + field(ZRVL, "0") + field(ONST, "HW switch") + field(ONVL, "1") + field(FLNK, "$(P)$(M)-MOVE-TYP_GET") +} + +record(mbbi, "$(P)$(M)-MOVE-TYP_GET") +{ + field(DESC, "Move type") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))AXIS_MODE") + field(ZRST, "Rotational") + field(ZRVL, "0") + field(ONST, "HW switch") + field(ONVL, "1") + field(PINI, "YES") +} + +############################################################################### +# P11: Mechanical zero point offset for limit switch direction + (away from +# LIMIT+ switch, towards LIMIT- switch) +################################################################################ +record(ao, "$(P)$(M)-POS-OFFSET_SET") +{ + field(DESC, "Positive offset") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))MOP_POS") + field(FLNK, "$(P)$(M)-POS-OFFSET_GET") +} + +record(ai, "$(P)$(M)-POS-OFFSET_GET") +{ + field(DESC, "Positive offset") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))MOP_POS") + field(PINI, "YES") +} + +################################################################################ +# P12: Mechanical zero point offset for limit switch direction - (away from +# LIMIT- switch, towards LIMIT+ switch) +################################################################################ +record(ao, "$(P)$(M)-NEG-OFFSET_SET") +{ + field(DESC, "P12:Negative offset") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))MOP_NEG") + field(FLNK, "$(P)$(M)-NEG-OFFSET_GET") +} + +record(ai, "$(P)$(M)-NEG-OFFSET_GET") +{ + field(DESC, "Negative offset") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))MOP_NEG") + field(PINI, "YES") +} + +################################################################################ +# P13: Time lapse during initialization in miliseconds +################################################################################ +record(ao, "$(P)$(M)-INIT-TIMEOUT_SET") +{ + field(DESC, "Init time lapse") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))INIT_TIME") + field(EGU, "ms") + field(FLNK, "$(P)$(M)-INIT-TIMEOUT_GET") +} + +record(ai, "$(P)$(M)-INIT-TIMEOUT_GET") +{ + field(DESC, "Init time lapse") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))INIT_TIME") + field(EGU, "ms") + field(PINI, "YES") +} + +################################################################################ +# P16: Time lapse after positioning +################################################################################ +record(ao, "$(P)$(M)-POS-TIMEOUT_SET") +{ + field(DESC, "Position time lapse") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))POSITION_TIME") + field(EGU, "ms") + field(FLNK, "$(P)$(M)-POS-TIMEOUT_GET") +} + +record(ai, "$(P)$(M)-POS-TIMEOUT_GET") +{ + field(DESC, "Position time lapse") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))POSITION_TIME") + field(EGU, "ms") + field(PINI, "YES") +} + +################################################################################ +# P17: Defines when to use boost current (P42) +################################################################################ +record(mbbo, "$(P)$(M)-BOOST_SET") +{ + field(DESC, "Boost") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))BOOST") + field(ZRVL, "0") + field(ZRST, "OFF") + field(ONVL, "1") + field(ONST, "ON MOTOR RUN") + field(TWVL, "2") + field(TWST, "ON ACCELERATION") + field(FLNK, "$(P)$(M)-BOOST_GET") +} + +record(mbbi, "$(P)$(M)-BOOST_GET") +{ + field(DESC, "Boost") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))BOOST") + field(ZRVL, "0") + field(ZRST, "OFF") + field(ONVL, "1") + field(ONST, "ON MOTOR RUN") + field(TWVL, "2") + field(TWST, "ON ACCELERATION") + field(PINI, "YES") +} + +################################################################################ +# P26: Encoder data transfer rate (ONLY FOR SSI) +################################################################################ +record(mbbo, "$(P)$(M)-ENC-RATE_SET") +{ + field(DESC, "Encoder rate") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_RATE") + field(ZRVL, "1") + field(ZRST, "100 kHz") + field(ONVL, "2") + field(ONST, "200 kHz") + field(TWVL, "3") + field(TWST, "300 kHz") + field(THVL, "4") + field(THST, "400 kHz") + field(FRVL, "5") + field(FRST, "500 kHz") + field(FVVL, "6") + field(FVST, "600 kHz") + field(SXVL, "7") + field(SXST, "700 kHz") + field(SVVL, "8") + field(SVST, "800 kHz") + field(EIVL, "9") + field(EIST, "900 kHz") + field(NIVL, "10") + field(NIST, "1000 kHz") + field(FLNK, "$(P)$(M)-ENC-RATE_GET") +} + +record(mbbi, "$(P)$(M)-ENC-RATE_GET") +{ + field(DESC, "Encoder rate") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_RATE") + field(ZRVL, "1") + field(ZRST, "100 kHz") + field(ONVL, "2") + field(ONST, "200 kHz") + field(TWVL, "3") + field(TWST, "300 kHz") + field(THVL, "4") + field(THST, "400 kHz") + field(FRVL, "5") + field(FRST, "500 kHz") + field(FVVL, "6") + field(FVST, "600 kHz") + field(SXVL, "7") + field(SXST, "700 kHz") + field(SVVL, "8") + field(SVST, "800 kHz") + field(EIVL, "9") + field(EIST, "900 kHz") + field(NIVL, "10") + field(NIST, "1000 kHz") + field(PINI, "YES") +} + +################################################################################ +# P27: Limit switch type +# NCC: Normally closed contact +# NOC: Normally open contact +# STRING FIELDS ARE OF THE FORM: LIMIT-/CENTER/LIMIT+ +################################################################################ +record(mbbo, "$(P)$(M)-SWITCH-TYP_SET") +{ + field(DESC, "Switch type") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))SWITCH_TYP") + field(ZRVL, "0") + field(ZRST, "NCC/NCC/NCC") + field(ONVL, "0") + field(ONST, "NCC/NCC/NOC") + field(TWVL, "2") + field(TWST, "NOC/NCC/NCC") + field(THVL, "3") + field(THST, "NOC/NCC/NOC") + field(FRVL, "4") + field(FRST, "NCC/NOC/NCC") + field(FVVL, "5") + field(FVST, "NCC/NOC/NOC") + field(SXVL, "6") + field(SXST, "NOC/NOC/NCC") + field(SVVL, "7") + field(SVST, "NOC/NOC/NOC") + field(FLNK, "$(P)$(M)-SWITCH-TYP_GET") +} + +record(mbbi, "$(P)$(M)-SWITCH-TYP_GET") +{ + field(DESC, "Switch type") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))SWITCH_TYP") + field(ZRVL, "0") + field(ZRST, "NCC/NCC/NCC") + field(ONVL, "0") + field(ONST, "NCC/NCC/NOC") + field(TWVL, "2") + field(TWST, "NOC/NCC/NCC") + field(THVL, "3") + field(THST, "NOC/NCC/NOC") + field(FRVL, "4") + field(FRST, "NCC/NOC/NCC") + field(FVVL, "5") + field(FVST, "NCC/NOC/NOC") + field(SXVL, "6") + field(SXST, "NOC/NOC/NCC") + field(SVVL, "7") + field(SVST, "NOC/NOC/NOC") + field(PINI, "YES") +} + +################################################################################ +# P28: AXIS Options +# 0 - Power stage is deactivated +# 1 - Power stage is activated +################################################################################ +record(bo, "$(P)$(M)-PWR-STAGE-MODE_SET") +{ + field(DESC, "Power stage ON/OFF") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))PWR_STAGE_MODE") + field(ZNAM, "Deactivate") + field(ONAM, "Activate") + field(FLNK, "$(P)$(M)-PWR-STAGE-MODE_GET") +} + +record(bi, "$(P)$(M)-PWR-STAGE-MODE_GET") +{ + field(DESC, "Power stage ON/OFF") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))PWR_STAGE_MODE") + field(ZNAM, "Deactivate") + field(ONAM, "Activate") + field(PINI, "YES") +} + +################################################################################ +# P34: Encoder type: +# 0: No encoder +# 1: Incremental 5.0V +# 2: Incremental 5.5V +# 3: SSI Binary code 5.0V +# 4: SSI Binary code 5.5V +# 5: SSI Gray code 5.0V +# 6: SSI Gray code 5.5V +# 7: EnDat 5.0V +# 8: EnDat 5.5V +################################################################################ +record(mbbo, "$(P)$(M)-ENC-TYP_SET") +{ + field(DESC, "Encoder type") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENCODER_TYP") + field(ZRST, "No encoder") + field(ZRVL, "0") + field(ONST, "Incremental 5.0V") + field(ONVL, "1") + field(TWST, "Incremental 5.5V") + field(TWVL, "2") + field(THST, "SSI Binary 5.0V") + field(THVL, "3") + field(FRST, "SSI Binary 5.5V") + field(FRVL, "4") + field(FVST, "SSI Gray 5.0V") + field(FVVL, "5") + field(SXST, "SSI Gray 5.5V") + field(SXVL, "6") + field(SVST, "EnDat 5.0V") + field(SVVL, "7") + field(EIST, "EnDat 5.5V") + field(EIVL, "8") + field(FLNK, "$(P)$(M)-ENC-TYP_GET") +} + +record(mbbi, "$(P)$(M)-ENC-TYP_GET") +{ + field(DESC, "Encoder type") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENCODER_TYP") + field(ZRST, "No encoder") + field(ZRVL, "0") + field(ONST, "Incremental 5.0V") + field(ONVL, "1") + field(TWST, "Incremental 5.5V") + field(TWVL, "2") + field(THST, "SSI Binary 5.0V") + field(THVL, "3") + field(FRST, "SSI Binary 5.5V") + field(FRVL, "4") + field(FVST, "SSI Gray 5.0V") + field(FVVL, "5") + field(SXST, "SSI Gray 5.5V") + field(SXVL, "6") + field(SVST, "EnDat 5.0V") + field(SVVL, "7") + field(EIST, "EnDat 5.5V") + field(EIVL, "8") + field(PINI, "YES") +} + +################################################################################ +# P35: SSI and EnDat encoder resolution in bits. From 0b to 48b. +# 0b - the controller uses the resolution which is read from the connected instrument +################################################################################ +record(ao, "$(P)$(M)-ENC-RES_SET") +{ + field(DESC, "Encoder resolution") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_RESOLUTION") + field(EGU, "b") + field(HOPR, "48") + field(LOPR, "0") + field(FLNK, "$(P)$(M)-ENC-RES_GET") +} + +record(ai, "$(P)$(M)-ENC-RES_GET") +{ + field(DESC, "Encoder resolution") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_RESOLUTION") + field(EGU, "b") + field(HOPR, "48") + field(LOPR, "0") + field(PINI, "YES") +} + +################################################################################ +# P36: Encoder function +# 0: counter +# 1: counter + SFI +# If P37 > 0, P36 is 1 else 0 +################################################################################ +record(bo, "$(P)$(M)-ENC-FUNC_SET") +{ + field(DESC, "SFI ON/OFF") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_FUNCTION") + field(ZNAM, "Counter") + field(ONAM, "Counter+SFI") + field(OMSL, "closed_loop") + field(DOL, "$(P)$(M)-ENC-SFI_GET") + field(FLNK, "$(P)$(M)-ENC-FUNC_GET") +} + +record(bi, "$(P)$(M)-ENC-FUNC_GET") +{ + field(DESC, "SFI ON/OFF") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_FUNCTION") + field(ZNAM, "Counter") + field(ONAM, "Counter+SFI") + field(PINI, "YES") +} + +################################################################################ +# P37: Encoder tolerance for SFI +################################################################################ +record(ao, "$(P)$(M)-ENC-SFI_SET") +{ + field(DESC, "SFI tolerrance") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_SFI_WIDTH") + field(FLNK, "$(P)$(M)-ENC-SFI_GET") +} + +record(ai, "$(P)$(M)-ENC-SFI_GET") +{ + field(DESC, "SFI tolerrance") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_SFI_WIDTH") + field(PINI, "YES") + field(FLNK, "$(P)$(M)-ENC-FUNC_SET") +} + +################################################################################ +# P38: Encoder direction of rotation +################################################################################ +record(bo, "$(P)$(M)-ENC-DIR_SET") +{ + field(DESC, "Encoder direction") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_DIRECTION") + field(ZNAM, "Positive") + field(ONAM, "Negative") + field(FLNK, "$(P)$(M)-ENC-DIR_GET") +} + +record(bi, "$(P)$(M)-ENC-DIR_GET") +{ + field(DESC, "Encoder direction") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))ENC_DIRECTION") + field(ZNAM, "Positive") + field(ONAM, "Negative") +} + +################################################################################ +# P40: Stop current in mA. Can be set in 10 mA increments +################################################################################ +record(ao, "$(P)$(M)-STOP-CURRENT_SET") +{ + field(DESC, "Stop current") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))STOP_CURRENT") + field(EGU, "mA") + field(HOPR, "2500") + field(LOPR, "0") + field(HIGH, "2200") + field(HIHI, "2400") + field(HSV, "MINOR") + field(HHSV, "MAJOR") + field(FLNK, "$(P)$(M)-STOP-CURRENT_GET") + +} + +record(ai, "$(P)$(M)-STOP-CURRENT_GET") +{ + field(DESC, "Stop current") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))STOP_CURRENT") + field(EGU, "mA") + field(HOPR, "2500") + field(LOPR, "0") + field(HIGH, "2200") + field(HIHI, "2400") + field(HSV, "MINOR") + field(HHSV, "MAJOR") + field(PINI, "YES") + +} + +################################################################################ +# P41: Run current in mA. Can be set in 10 mA increments +################################################################################ +record(ao, "$(P)$(M)-RUN-CURRENT_SET") +{ + field(DESC, "Run current") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))RUN_CURRENT") + field(EGU, "mA") + field(HOPR, "2500") + field(LOPR, "0") + field(HIGH, "2200") + field(HIHI, "2400") + field(HSV, "MINOR") + field(HHSV, "MAJOR") + field(FLNK, "$(P)$(M)-RUN-CURRENT_GET") + +} + +record(ai, "$(P)$(M)-RUN-CURRENT_GET") +{ + field(DESC, "Run current") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))RUN_CURRENT") + field(EGU, "mA") + field(HOPR, "2500") + field(LOPR, "0") + field(HIGH, "2200") + field(HIHI, "2400") + field(HSV, "MINOR") + field(HHSV, "MAJOR") + field(PINI, "YES") + +} + +################################################################################ +# P42: Boost current in mA. Can be set in 10 mA increments +################################################################################ +record(ao, "$(P)$(M)-BOOST-CURRENT_SET") +{ + field(DESC, "Boost current") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))BOOST_CURRENT") + field(EGU, "mA") + field(HOPR, "2500") + field(LOPR, "0") + field(HIGH, "2200") + field(HIHI, "2400") + field(HSV, "MINOR") + field(HHSV, "MAJOR") + field(FLNK, "$(P)$(M)-BOOST-CURRENT_GET") + +} + +record(ai, "$(P)$(M)-BOOST-CURRENT_GET") +{ + field(DESC, "Boost current") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))BOOST_CURRENT") + field(EGU, "mA") + field(HOPR, "2500") + field(LOPR, "0") + field(HIGH, "2200") + field(HIHI, "2400") + field(HSV, "MINOR") + field(HHSV, "MAJOR") + field(PINI, "YES") +} + +################################################################################ +# P43: Current hold time in msec +################################################################################ +record(ao, "$(P)$(M)-CURRENT-DELAY_SET") +{ + field(DESC, "Current hold time") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))CURRENT_DELAY_TIME") + field(EGU, "msec") + field(FLNK, "$(P)$(M)-CURRENT-DELAY_GET") + +} + +record(ai, "$(P)$(M)-CURRENT-DELAY_GET") +{ + field(DESC, "Current hold time") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))CURRENT_DELAY_TIME") + field(EGU, "mA") + field(PINI, "YES") +} + + +################################################################################ +# P45: Step resolution +################################################################################ +record(mbbo, "$(P)$(M)-STEP-RES_SET") +{ + field(DESC, "Step resolution") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))STEP_RES") + field(ZRST, "1") + field(ZRVL, "0") + field(ONST, "1/2") + field(ONVL, "1") + field(TWST, "1/2.5") + field(TWVL, "2") + field(THST, "1/4") + field(THVL, "3") + field(FRST, "1/5") + field(FRVL, "4") + field(FVST, "1/8") + field(FVVL, "5") + field(SXST, "1/10") + field(SXVL, "6") + field(SVST, "1/16") + field(SVVL, "7") + field(EIST, "1/20") + field(EIVL, "8") + field(NIST, "1/32") + field(NIVL, "9") + field(TEST, "1/64") + field(TEVL, "10") + field(ELST, "1/128") + field(ELVL, "11") + field(FLNK, "$(P)$(M)-STEP-RES_GET") +} + +record(mbbi, "$(P)$(M)-STEP-RES_GET") +{ + field(DESC, "Step resolution") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))STEP_RES") + field(ZRST, "1") + field(ZRVL, "0") + field(ONST, "1/2") + field(ONVL, "1") + field(TWST, "1/2.5") + field(TWVL, "2") + field(THST, "1/4") + field(THVL, "3") + field(FRST, "1/5") + field(FRVL, "4") + field(FVST, "1/8") + field(FVVL, "5") + field(SXST, "1/10") + field(SXVL, "6") + field(SVST, "1/16") + field(SVVL, "7") + field(EIST, "1/20") + field(EIVL, "8") + field(NIST, "1/32") + field(NIVL, "9") + field(TEST, "1/64") + field(TEVL, "10") + field(ELST, "1/128") + field(ELVL, "11") + field(PINI, "YES") +} + +################################################################################ +# P49: Power stage temperature +################################################################################ +record(ai, "$(P)$(M)-PS-TEMPERATURE") +{ + field(DESC, "Power stage temp") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))PS_TEMPERATURE") + field(EGU, "°C") + field(SCAN, "$(SCAN)") + field(PREC, 1) + field(PINI, "YES") +} + +################################################################################ +# P53: Power stage monitoring +################################################################################ +record(bo, "$(P)$(M)-PS-MONITOR_SET") +{ + field(DESC, "Power stage monitor") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))PS_MONITOR") + field(ZNAM, "OFF") + field(ONAM, "ON") + field(FLNK, "$(P)$(M)-PS-MONITOR_GET") +} + +record(bi, "$(P)$(M)-PS-MONITOR_GET") +{ + field(DESC, "Power stage monitor") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))PS_MONITOR") + field(ZNAM, "OFF") + field(ONAM, "ON") + field(PINI, "YES") +} + +################################################################################ +# P54: Motor temperature in 0.1 °C +################################################################################ +record(ai, "$(P)$(M)-MOTOR-TEMP") +{ + field(DESC, "Motor temperature") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))MOTOR_TEMP") + field(SCAN, "$(SCAN)") + field(EGU, "°C") + field(PREC, 1) + field(FLNK, "$(P)$(M)-MOTOR-TEMP") +} + diff --git a/motorApp/Db/Phytron_MCM01.db b/motorApp/Db/Phytron_MCM01.db new file mode 100644 index 00000000..d53ad2ec --- /dev/null +++ b/motorApp/Db/Phytron_MCM01.db @@ -0,0 +1,223 @@ +################################################################################ +# This database contains records used to monitor status and reset the MCM01 +# controller. +################################################################################ + +################################################################################ +#ai record reads controller status from the device, mbbiDirect is used to parse +# the status bits +################################################################################ +record(ai, "$(P)-STATUS_") +{ + field(DESC, "Status") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT), $(ADDR), $(TIMEOUT))CONTROLLER_STATUS") + field(SCAN, "1 second") + field(FLNK, "$(P)-STATUS-BITS_") +} + +record(mbbiDirect, "$(P)-STATUS-BITS_") +{ + field(DESC, "Status bits") + field(DTYP, "Raw Soft Channel") + field(INP, "$(P)-STATUS_") + field(FLNK, "$(P)-PROGRAM") +} + +################################################################################ +#Controller status records. See DESC fields +################################################################################ +record(bi, "$(P)-PROGRAM") +{ + field(DESC, "Program in local mode") + field(INP, "$(P)-STATUS-BITS_.B0") + field(ZNAM, "DONE") + field(ONAM, "RUNNING") + field(FLNK, "$(P)-SW-REMOTE") +} + +record(bi, "$(P)-SW-REMOTE") +{ + field(DESC, "Software remote") + field(INP, "$(P)-STATUS-BITS_.B1") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-LIMIT-SWITCH") +} + +record(bi, "$(P)-LIMIT-SWITCH") +{ + field(DESC, "Axis limit switch") + field(INP, "$(P)-STATUS-BITS_.B2") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-PS-AXIS-ERR") +} + +record(bi, "$(P)-PS-AXIS-ERR") +{ + field(DESC, "Power stage axis error") + field(INP, "$(P)-STATUS-BITS_.B3") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-PROG-ERR") +} + +record(bi, "$(P)-PROG-ERR") +{ + field(DESC, "Programming error") + field(INP, "$(P)-STATUS-BITS_.B4") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-TERM-ACT") +} + +record(bi, "$(P)-TERM-ACT") +{ + field(DESC, "Terminal activated") + field(INP, "$(P)-STATUS-BITS_.B5") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-INP-SCAN") +} + +record(bi, "$(P)-INP-SCAN") +{ + field(DESC, "Input scan running") + field(INP, "$(P)-STATUS-BITS_.B6") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-REMOTE") +} + +record(bi, "$(P)-REMOTE") +{ + field(DESC, "Remote") + field(INP, "$(P)-STATUS-BITS_.B7") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-AXIS-MODULE") +} + +record(bi, "$(P)-AXIS-MODULE") +{ + field(DESC, "Axis module availability") + field(INP, "$(P)-STATUS-BITS_.B8") + field(ZNAM, "AVAILABLE") + field(ONAM, "NOT AVAILABLE") + field(FLNK, "$(P)-AXIS") +} + +record(bi, "$(P)-AXIS") +{ + field(DESC, "Axis availability") + field(INP, "$(P)-STATUS-BITS_.B9") + field(ZNAM, "AVAILABLE") + field(ONAM, "NOT AVAILABLE") + field(FLNK, "$(P)-IO-MODULE") +} + +record(bi, "$(P)-IO-MODULE") +{ + field(DESC, "I/O module availability") + field(INP, "$(P)-STATUS-BITS_.BA") + field(ZNAM, "AVAILABLE") + field(ONAM, "NOT AVAILABLE") + field(FLNK, "$(P)-IO") +} + +record(bi, "$(P)-IO") +{ + field(DESC, "I/O availability") + field(INP, "$(P)-STATUS-BITS_.BB") + field(ZNAM, "AVAILABLE") + field(ONAM, "NOT AVAILABLE") + field(FLNK, "$(P)-INT-BUS-ERR") +} + +record(bi, "$(P)-INT-BUS-ERR") +{ + field(DESC, "Internal data transf. err.") + field(INP, "$(P)-STATUS-BITS_.BC") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-INT-MOD-ERR") +} + +record(bi, "$(P)-INT-MOD-ERR") +{ + field(DESC, "Internal bus module err.") + field(INP, "$(P)-STATUS-BITS_.BD") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-AIOM-MODULE") +} + +record(bi, "$(P)-AIOM-MODULE") +{ + field(DESC, "AIOM module availability") + field(INP, "$(P)-STATUS-BITS_.BE") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-AIOM-CHANNEL") +} + +record(bi, "$(P)-AIOM-CHANNEL") +{ + field(DESC, "AIOM channel availability") + field(INP, "$(P)-STATUS-BITS_.BF") + field(ZNAM, "NO") + field(ONAM, "YES") + field(FLNK, "$(P)-CON-ERR") +} + +record(calc, "$(P)-CON-ERR") +{ + field(INPA, "$(P)-LIMIT-SWITCH") + field(INPB, "$(P)-PS-AXIS-ERR") + field(INPC, "$(P)-PROG-ERR") + field(INPD, "$(P)-INT-BUS-ERR") + field(INPE, "$(P)-INT-MOD-ERR") + field(INPF, "$(P)-AXIS-MODULE") + field(INPG, "$(P)-AXIS") + field(INPH, "$(P)-IO-MODULE") + field(INPI, "$(P)-IO") + field(INPJ, "$(P)-AIOM-MODULE") + field(INPK, "$(P)-AIOM-CHANNEL") + field(CALC, "A||B||C||D||E||F||G||H||I||J") +} + +################################################################################ +# Reset controller +# RESET_ changes value between 0 and 1, so the monitor is posted and the +# REINIT_ record in Phytron_I1AM01.db is processed +################################################################################ +record(bo, "$(P)-RESET") +{ + field(DESC, "Reset controller") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))CONTROLLER_RESET") + field(ONAM, "RESET") + field(ZNAM, "RESET") + field(FLNK, "$(P)-RESET_") +} + +record(calc, "$(P)-RESET_") +{ + field(DESC, "Reset monitor") + field(INPA, "$(P)-RESET_") + field(CALC, "(A=0)?1:0") +} + +################################################################################ +#Reset controller status +################################################################################ +record(bo, "$(P)-RESET-STATUS") +{ + field(DESC, "Reset cont. status") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT), $(ADDR), $(TIMEOUT))CONTROLLER_STATUS_RESET") + field(ONAM, "RESET") + field(ZNAM, "RESET") +} + diff --git a/motorApp/Db/Phytron_motor.db b/motorApp/Db/Phytron_motor.db new file mode 100644 index 00000000..83f85aa6 --- /dev/null +++ b/motorApp/Db/Phytron_motor.db @@ -0,0 +1,23 @@ +record(motor,"$(P)$(M)") +{ + field(DESC,"$(DESC)") + field(DTYP,"$(DTYP)") + field(DIR,"$(DIR)") + field(VELO,"$(VELO)") + field(VBAS,"$(VBAS)") + field(VMAX,"$(VMAX)") + field(ACCL,"$(ACCL)") + field(BDST,"$(BDST)") + field(BVEL,"$(BVEL)") + field(BACC,"$(BACC)") + field(OUT,"@asyn($(PORT),$(ADDR))") + field(MRES,"$(MRES)") + field(ERES,"$(ERES)") + field(PREC,"$(PREC)") + field(EGU,"$(EGU)") + field(DHLM,"$(DHLM)") + field(DLLM,"$(DLLM)") + field(INIT,"$(INIT)") + field(TWV,"1") +} + diff --git a/motorApp/Makefile b/motorApp/Makefile index da36a256..9f89a653 100644 --- a/motorApp/Makefile +++ b/motorApp/Makefile @@ -99,6 +99,9 @@ NPointSrc_DEPEND_DIRS = MotorSrc DIRS += MicronixSrc MicronixSrc_DEPEND_DIRS = MotorSrc +DIRS += PhytronSrc +PhytronSrc_DEPEND_DIRS = MotorSrc + endif # Install the edl files diff --git a/motorExApp/WithAsyn/Makefile b/motorExApp/WithAsyn/Makefile index 1b999a9c..70ebb7d6 100644 --- a/motorExApp/WithAsyn/Makefile +++ b/motorExApp/WithAsyn/Makefile @@ -37,8 +37,12 @@ COMMONDBDS += ACRMotorSupport.dbd COMMONDBDS += asyn.dbd COMMONDBDS += drvAsynSerialPort.dbd COMMONDBDS += drvAsynIPPort.dbd -COMMONDBDS += busySupport.dbd +ifdef BUSY + COMMONDBDS += busySupport.dbd + COMMONLIBS := busy $(COMMONLIBS) +endif COMMONDBDS += PI_GCS2Support.dbd +COMMONDBDS += phytron.dbd DBD += WithAsyn.dbd WithAsyn_DBD += $(COMMONDBDS) @@ -75,10 +79,9 @@ COMMONLIBS += SmartMotor COMMONLIBS += KohzuMotor COMMONLIBS += ACRMotor COMMONLIBS += PI_GCS2Support +COMMONLIBS += phytronAxisMotor COMMONLIBS += motor -WithAsyn_LIBS += busy - # Needed for Newport SNL programs WithAsyn_LIBS += $(COMMONLIBS) WithAsyn_LIBS += asyn