forked from epics_driver_modules/motorBase
Removed PhytronSrc; Added motorPhytron submodule
This commit is contained in:
@@ -64,3 +64,6 @@
|
||||
[submodule "modules/motorOmsAsyn"]
|
||||
path = modules/motorOmsAsyn
|
||||
url = https://github.com/epics-motor/motorOmsAsyn.git
|
||||
[submodule "modules/motorPhytron"]
|
||||
path = modules/motorPhytron
|
||||
url = https://github.com/epics-motor/motorPhytron.git
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
################################################################################
|
||||
# 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 }
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
#!../../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()
|
||||
@@ -23,6 +23,7 @@ SUBMODULES += motorNewFocus
|
||||
SUBMODULES += motorNPoint
|
||||
SUBMODULES += motorOmsAsyn
|
||||
SUBMODULES += motorOriel
|
||||
SUBMODULES += motorPhytron
|
||||
SUBMODULES += motorPiJena
|
||||
SUBMODULES += motorPi
|
||||
SUBMODULES += motorSmartMotor
|
||||
|
||||
Submodule
+1
Submodule modules/motorPhytron added at cb58e209b3
@@ -30,7 +30,6 @@ DB += asyn_motor.db
|
||||
DB += profileMoveController.template
|
||||
DB += profileMoveAxis.template
|
||||
DB += PI_Support.db PI_SupportCtrl.db
|
||||
DB += Phytron_motor.db Phytron_I1AM01.db Phytron_MCM01.db
|
||||
DB += asyn_auto_power.db
|
||||
DB += ScriptMotorReload.db
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,223 +0,0 @@
|
||||
################################################################################
|
||||
# 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")
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
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")
|
||||
}
|
||||
|
||||
@@ -33,9 +33,6 @@ ACRSrc_DEPEND_DIRS = MotorSrc
|
||||
DIRS += SmarActMCSSrc
|
||||
SmarActMCSSrc_DEPEND_DIRS = MotorSrc
|
||||
|
||||
DIRS += PhytronSrc
|
||||
PhytronSrc_DEPEND_DIRS = MotorSrc
|
||||
|
||||
DIRS += AMCISrc
|
||||
AMCISrc_DEPEND_DIRS = MotorSrc
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
TOP=../..
|
||||
|
||||
include $(TOP)/configure/CONFIG
|
||||
#----------------------------------------
|
||||
# Build the IOC application
|
||||
|
||||
LIBRARY_IOC += phytronAxisMotor
|
||||
|
||||
DBD += phytron.dbd
|
||||
|
||||
# The following are compiled and added to the support library
|
||||
phytronAxisMotor_SRCS += phytronAxisMotor.cpp
|
||||
|
||||
INC += phytronAxisMotor.h
|
||||
|
||||
phytronAxisMotor_LIBS += motor
|
||||
phytronAxisMotor_LIBS += asyn
|
||||
phytronAxisMotor_LIBS += $(EPICS_BASE_IOC_LIBS)
|
||||
|
||||
#===========================
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
|
||||
@@ -1,447 +0,0 @@
|
||||
********************************************************************************
|
||||
Phytron I1AM01 Stepper Motor Controller Asyn Driver Documentation
|
||||
|
||||
Authors: Tom Slejko, Bor Marolt, Cosylab d.d.
|
||||
tom.slejko@cosylab.com
|
||||
bor.marolt@cosylab.com
|
||||
|
||||
********************************************************************************
|
||||
Table of contents:
|
||||
- Controller and axis configuration
|
||||
- Example Application
|
||||
- New Applicaion
|
||||
- Database
|
||||
- Supported I1AM01 Features
|
||||
- Initialization records
|
||||
- Status
|
||||
- Homing
|
||||
- Reset
|
||||
- I1AM01 parameters
|
||||
- Supported MCM01 Features
|
||||
- Motor record
|
||||
- List of remaining I1AM01 parameters handled by the motor record,
|
||||
internally by controller, or not applicable
|
||||
- GUI
|
||||
|
||||
|
||||
Controller and axis configuration
|
||||
=================================
|
||||
Example application:
|
||||
--------------------
|
||||
Motor record includes an example Phytron application. Before using it do:
|
||||
|
||||
cd $(MOTOR_ROOT)/iocBoot/iocWithAsyn/
|
||||
|
||||
where $(MOTOR_ROOT) is the location of the motor record. Open st.cmd.phytron and
|
||||
modify controller's IP address. If using serial port instead of ethernet, read
|
||||
"New application" section, on how to configure the serial port. Remove or add
|
||||
calls to phytronCreateAxis according to the number of axes that are to be used
|
||||
(read "New application" section on how to use phytronCreateAxis).
|
||||
Once st.cmd is configured, run:
|
||||
|
||||
../../bin/linux-x86_64/WithAsyn st.cmd.phytron
|
||||
|
||||
New application:
|
||||
----------------
|
||||
This section describes how to properly configure epics application in order to
|
||||
use phytronAxisMotor driver.
|
||||
|
||||
The following dbd files and libraries must be added to the $(APP)/src/Makefile:
|
||||
test_DBD += asyn.dbd
|
||||
test_DBD += motorSupport.dbd
|
||||
test_DBD += drvAsynIPPort.dbd
|
||||
test_DBD += phytron.dbd
|
||||
|
||||
test_LIBS += asyn
|
||||
test_LIBS += motor
|
||||
test_LIBS += phytronAxisMotor
|
||||
|
||||
An example motor.substitutions.phytron and st.cmd.phytron files are located in
|
||||
the $(MOTOR_RECORD)/iocBoot/iocWithAsyn/ directory.
|
||||
|
||||
********************************************************************************
|
||||
WARNING: For the controller to work properly all three database files (
|
||||
Phytron_I1AM01.db, Phytron_MCM01.db and Phytron_motor.db) must be used.
|
||||
********************************************************************************
|
||||
|
||||
Start up script must perform the following:
|
||||
Before configuring the controller the user must create an asyn port by running
|
||||
drvAsynIPPortConfigure or drvAsynSerialPortConfigure in order to create a
|
||||
communication interface to Phytron's MCM Unit which controlls the I1AM01
|
||||
modules.
|
||||
|
||||
If serial port is used for communication with the controller, baud rate, number
|
||||
of data bits, parity, number of stop bits and End Of Line character must be set,
|
||||
e.g.:
|
||||
|
||||
drvAsynSerialPortConfigure ("testRemote","/dev/ttyUSB0")
|
||||
asynOctetSetInputEos("testRemote",0,"\3")
|
||||
asynSetOption ("testRemote", -1, "baud", "115200")
|
||||
asynSetOption ("testRemote", -1, "bits", "8")
|
||||
asynSetOption ("testRemote", -1, "parity", "none")
|
||||
asynSetOption ("testRemote", -1, "stop", "1")
|
||||
|
||||
If ethernet is used, the IP and port must be set, e.g.:
|
||||
drvAsynIPPortConfigure("testRemote","10.5.1.181:22222",0,0,1)
|
||||
|
||||
Phytron (MCM) controller port is configured (and connected to previously created
|
||||
asyn port) by running the following iocsh function:
|
||||
|
||||
phytronCreateController(const char *phytronPortName, const char *asynPortName,
|
||||
int movingPollPeriod, int idlePollPeriod, double timeout)
|
||||
- phytronPortName: Name of the particular MCM unit.
|
||||
- asynPortName: Name of the previously configured asyn port - interface to MCM
|
||||
- movingPollPeriod: The time between polls when any axis is moving in ms
|
||||
- idlePolPeriod: The time between polls when no axis is moving in ms
|
||||
- Timeout: Milliseconds before timeout for I/O requests
|
||||
|
||||
where poll reads the basic axis status, e.g. position of the motor and of the
|
||||
encoder, checks if axis is in movement, checks if motor is at the limit
|
||||
switch, ...
|
||||
|
||||
Once the phytron controller is configured, user can initialize axes by running
|
||||
|
||||
phytronCreateAxis(const char* phytronPortName, int module, int axis)
|
||||
- phytronPortName: Previously defined name of the MCM unit
|
||||
- module: index of the I1AM01 module connected to the MCM
|
||||
- axis: index of the axis on the I1AM01 module
|
||||
|
||||
Module index and axis index compose the axis asyn ADDR (ADDR macro) used in the
|
||||
motor.substitutions file.
|
||||
|
||||
PhytronCreateAxis must be called for each axis intended to be used.
|
||||
|
||||
********************************************************************************
|
||||
WARNING: For every axis, the user must specify it's address (ADDR macro) in the
|
||||
motor.substitutions file for Phytron_motor.db and PhytronI1AM01.db files.
|
||||
The address is composed of the I1AM01 module index and the axis index. If, for
|
||||
example, the startup script configures the following axis:
|
||||
|
||||
drvAsynIPPortConfigure("testRemote","10.5.1.181:22222",0,0,1)
|
||||
phytronCreateController ("phyMotionPort", "testRemote", 100, 100, 1000)
|
||||
phytronCreateAxis("phyMotionPort", 2, 1)
|
||||
|
||||
It's asyn address that must be specified in the substitutions file is 21,
|
||||
|
||||
PORT macro in the substitution file must match the phytronPortName, which is in
|
||||
the example above "phyMotionPort"
|
||||
********************************************************************************
|
||||
|
||||
Example st.cmd:
|
||||
---------------
|
||||
#!../../bin/linux-x86_64/test
|
||||
|
||||
## You may have to change test to something else
|
||||
## everywhere it appears in this file
|
||||
|
||||
< envPaths
|
||||
|
||||
## Register all support components
|
||||
dbLoadDatabase("../../dbd/test.dbd",0,0)
|
||||
test_registerRecordDeviceDriver(pdbbase)
|
||||
|
||||
drvAsynIPPortConfigure("testRemote","10.5.1.181:22222",0,0,1)
|
||||
|
||||
phytronCreateController ("phyMotionPort", "testRemote", 100, 100, 1000)
|
||||
|
||||
#phytronCreateAxis(phytronPort, module, axis)
|
||||
phytronCreateAxis("phyMotionPort", 1, 1)
|
||||
phytronCreateAxis("phyMotionPort", 2, 1)
|
||||
|
||||
|
||||
cd $(MOTOR)/iocBoot/iocWithAsyn/
|
||||
dbLoadTemplate "motor.substitutions.phytron"
|
||||
|
||||
iocInit()
|
||||
|
||||
Database:
|
||||
=========
|
||||
All three database files (Phytron_I1AM01.db, Phytron_MCM01.db, Phytron_motor.db)
|
||||
in $(MOTOR_ROOT)/motorApp/Db are expanded by motor.substitutions.phytron file in
|
||||
$(MOTOR_ROOT)/iocBoot/iocWithAsyn
|
||||
|
||||
********************************************************************************
|
||||
WARNING: For the controller to work properly all three database files (
|
||||
Phytron_I1AM01.db, Phytron_MCM01.db and Phytron_motor.db) must be used.
|
||||
********************************************************************************
|
||||
|
||||
===============================================
|
||||
I1AM01 Controller Features - Phytron_I1AM01.db:
|
||||
===============================================
|
||||
Initialization:
|
||||
---------------
|
||||
Database contains 2 initialization records $(P)$(M)-INIT-AXIS-1/2 which are used
|
||||
to initalize output (_SET) records. Initialization values are defined in the
|
||||
motor.substitutions file.
|
||||
|
||||
Status:
|
||||
-------
|
||||
Database contains several status records. Ai record $(P)$(M)-STATUS_ reads the
|
||||
status value from the I1AM01 module, 2 mbbiDirect records ($(P)$(M)-STATUS-1/2)
|
||||
are provided to set the status bits - 23 bi records are provided to parse these
|
||||
status bits. An additional calc record is provided ($(P)$(M)-AXIS-ERR) which
|
||||
sets it's value to 1 if any of the error bits are set (if only notification
|
||||
bits are set, e.g. axis-initialized, the value of $(P)$(M)-AXIS-ERR is 0).
|
||||
|
||||
Homing:
|
||||
-------
|
||||
RECORDS mbbo/mbbi: $(P)$(M)-HOMING_SET/_GET are used to set and readback the
|
||||
type of homing to be used. Homing is executed with the use of motor record's
|
||||
HOMF, HOMR fields. The following options are available for $(P)$(M)-HOMING_SET,
|
||||
please keep in mind that offsets defined by I1AM01 parameters P11 and P12 (see
|
||||
phylogic-en.pdf and see below for records corresponding to P11 and P12) affect
|
||||
the final position after the homing procedure:
|
||||
<- recordValue (Homing description); Phytron commands for HOMF and HOMR>
|
||||
|
||||
- Limit (Home on limit switches); HOMF - m.aR+, HOMR - m.aR-
|
||||
|
||||
- Center (Home on center switch); HOMF - m.aR+C, HOMR - m.aR-C
|
||||
COMMENT: If limit switch is reached, the motor will stop and start moving in the
|
||||
opposite direction until center switch is reached
|
||||
|
||||
- Encoder (Home on encoder zero pulse); HOMF - m.aR+I, HOMR - m.aR-I
|
||||
|
||||
- Limit-Encoder (Got to limit switch, than encoder zero pulse);
|
||||
HOMF - m.aR+^I, HOMR - m.aR-^I
|
||||
|
||||
- Center-Encoder (Go to the center switch than to encoder zero pulse)
|
||||
HOMF - m.a.R+C^I, HOMR - m.aR-C^I
|
||||
COMMENT: If limit switch is reached before center switch, the motor will stop
|
||||
and start moving in the opposite direction until center switch is reached
|
||||
|
||||
- Reference-Center (Driving on a reference signal to center)
|
||||
HOMF - m.aRC+, HOMR - m.aRC-
|
||||
COMMEN: If limit switch is reached, controller goes to axis error state
|
||||
|
||||
- Ref-Center-Encoder (Driving on a reference signal to center and then to
|
||||
encoder zero pulse)
|
||||
HOMF - m.aRC+^I, HOMR - m.aRC-^I
|
||||
|
||||
Reset:
|
||||
------
|
||||
Two records are provided. Record $(P)$(M)-RESET executs Phytron command: m.aC,
|
||||
where m is controller index and a is the axis index.
|
||||
|
||||
$(P)$(M)-RESET-STATUS resets the axis status by executing the Phytron command:
|
||||
SECm.a, where m is controller index and a is the axis index.
|
||||
|
||||
If user resets the MCM unit, $(P)$(M)-REINIT_ record is triggered. This record
|
||||
process the initialization records $(P)$(M)-INIT-AXIS-1/2 after a DELAY time
|
||||
defined by the macro DLY in the substitutions file.
|
||||
|
||||
|
||||
The following I1AM01 parameters are exposed as additional EPICS records:
|
||||
------------------------------------------------------------------------
|
||||
Param. index: feature;
|
||||
Record name(s):
|
||||
Comment:
|
||||
-------------------------------------
|
||||
P01: Type of movement;
|
||||
RECORDS mbbo/mbbi: $(P)$(M)-MOVE-TYP_SET/_GET;
|
||||
COMMENT: Software limits are always monitored by the motor record, so only 2
|
||||
types of movements are possible:
|
||||
- Rotational: HW limit/center switches are ignored
|
||||
- HW switches are monitored
|
||||
-------------------------------------
|
||||
P11: M0P offset for limit switch in direction towards LIMIT-;
|
||||
RECORDS ao/ai: $(P)$(M)-POS-OFFSET_SET/_GET
|
||||
-------------------------------------
|
||||
P12: M0P offset for limit switch in direction towards LIMIT+;
|
||||
RECORDS ao/ai: $(P)$(M)-NEG-OFFSET_SET/_GET
|
||||
-------------------------------------
|
||||
P13: Time lapse during initialization
|
||||
RECORDS ao/ai: $(P)$(M)-INIT-TIMEOUT_SET/_GET
|
||||
-------------------------------------
|
||||
P16: Time lapse after positioning
|
||||
RECORDS ao/ai: $(P)$(M)-POS-TIMEOUT_SET/_GET
|
||||
-------------------------------------
|
||||
P17: Defines when to use boost current
|
||||
RECORDS mbbo/mbbi: $(P)$(M)-BOOST_SET/_GET
|
||||
-------------------------------------
|
||||
P26: Encoder data transfer rate (ONLY FOR SSI)
|
||||
RECORDS mbbo/mbbi: $(P)$(M)-ENC-RATE_SET/_GET
|
||||
-------------------------------------
|
||||
P27: Limit switch type
|
||||
RECORDS mbbo/mbbi: $(P)$(M)-SWITCH-TYP_SET/_GET
|
||||
-------------------------------------
|
||||
P28: Power stage off/on
|
||||
RECORDS bo/bi: $(P)$(M)-PWR-STAGE-MODE_SET/_GET
|
||||
-------------------------------------
|
||||
P34: Encoder type
|
||||
RECORDS mbbo/mbbi: $(P)$(M)-ENC-TYP_SET/_GET
|
||||
-------------------------------------
|
||||
P35: Encoder resolution - for SSI and EnDat encoders
|
||||
RECORDS ao/ai: $(P)$(M)-ENC-RES_SET/_GET
|
||||
-------------------------------------
|
||||
P36: Encoder function: If 1, Encoder position is continuously compared to the
|
||||
motor position
|
||||
RECORDS: bo/bi: $(P)$(M)-ENC-FUNC_SET/_GET
|
||||
COMMENT: _SET is processed when $(P)$(M)-ENC-SFI_SET corresponding to parameter
|
||||
P37 is processed. If P37 > 0, then P36 is set to 1, else it is 0.
|
||||
-------------------------------------
|
||||
P37: If P36 is set to 1, controller will stop the motion when the difference
|
||||
between motor and encoder position is > P37.
|
||||
RECORDS: bo/bi: $(P)$(M)-ENC-SFI_SET/_GET
|
||||
COMMENT: If value is set to > 0, then P36 is set to 1. If P37=0, then P36=0
|
||||
-------------------------------------
|
||||
P38: Encoder direction of rotation: Positive/Negative
|
||||
RECORDS: bo/bi: $(P)$(M)-ENC-DIR_SET/_GET
|
||||
-------------------------------------
|
||||
P39: Encoder direction of rotation
|
||||
RECORDS: bo/bi: $(P)$(M)-ENC-DIR_SET/_GET
|
||||
-------------------------------------
|
||||
P40: Stop current in mA. Can be set in 10 mA increments
|
||||
RECORDS: ao/ai: $(P)$(M)-STOP-CURRENT_SET/_GET
|
||||
-------------------------------------
|
||||
P41: Run current in mA. Can be set in 10 mA increments
|
||||
RECORDS: ao/ai: $(P)$(M)-RUN-CURRENT_SET/_GET
|
||||
-------------------------------------
|
||||
P42: Boost current in mA. Can be set in 10 mA increments
|
||||
RECORDS: ao/ai: $(P)$(M)-BOOST-CURRENT_SET/_GET
|
||||
-------------------------------------
|
||||
P43: Current hold time in ms.
|
||||
RECORDS: ao/ai: $(P)$(M)-CURRENT-DELAY_SET/_GET
|
||||
-------------------------------------
|
||||
P49: Power stage temperature
|
||||
RECORDS: ai: $(P)$(M)-PS-TEMPERATURE
|
||||
-------------------------------------
|
||||
P53: Power stage monitoring
|
||||
RECORDS: bo/bi: $(P)$(M)-PS-MONITOR/_GET
|
||||
-------------------------------------
|
||||
P54: Motor temperature
|
||||
RECORDS: ai: $(P)$(M)-MOTOR-TEMP
|
||||
|
||||
|
||||
|
||||
============================================
|
||||
MC01 Controller Features - Phytron_MCM01.db:
|
||||
============================================
|
||||
This database file contains records for reading MCM01 status and to reset the
|
||||
MCM01 module.
|
||||
|
||||
Ai record $(P)-STATUS_ reads the status value from the MCM01 module, a
|
||||
mbbiDirect record is provided to set the status bits - 16 bi records are
|
||||
provided to parse these bits. An additional calc record is provided
|
||||
($(P)-CON-ERR) which sets it's value to 1 if any of the error bits are set (if
|
||||
only noticiation bits are set, e.g. terminal-activated, the value of
|
||||
$(P)-CON-ERR is 0)
|
||||
|
||||
Bo record $(P)-RESET resets the MCM01 controller, every time it is processed.
|
||||
$(P)-RESET_ alternates between 0 and 1, so the monitor is posted on every reset
|
||||
and the axis REINIT_ record can trigger the initialization procedures.
|
||||
|
||||
================================
|
||||
Motor Record - Phytron_motor.db:
|
||||
================================
|
||||
This database file is similar to basic_asyn_motor.db, the only difference is,
|
||||
that 2 additional fields are defined:
|
||||
- field(ERES,"$(ERES)") - encoder resolution
|
||||
- field(VMAX,"$(VMAX)") - maximum velocity
|
||||
|
||||
|
||||
===============================================================================
|
||||
List of remaining I1AM01 parameters handled by the motor record, internally by
|
||||
controller, or not applicable
|
||||
===============================================================================
|
||||
P02 (Units of movemnt) - Always set to step - unit conversion is done within the
|
||||
motor record.
|
||||
|
||||
P03 (Conversion factor for the thread) - Always set to 1 - unit conversion is
|
||||
done within the motor record.
|
||||
|
||||
P04 (Start/stop frequency) - Set by phytronAxis::move, before move is executed.
|
||||
|
||||
P07 (Emergency stop ramp) - Set by phytronAxis::stop, before stop is executed.
|
||||
|
||||
P08 (Initialization run frequency) - Set by phytronAxis::home, before homing is
|
||||
executed.
|
||||
|
||||
P09 (Ramp M0P) - Set by phytronAxis::home, before homing is executed.
|
||||
|
||||
P10 (Run frequency for leaving the limit switch) - Set by phytronAxis::home,
|
||||
before homing is executed
|
||||
|
||||
P14 (Run frequency during program operation) - Set by phytronAxis::move, before
|
||||
move is executed
|
||||
|
||||
P15 (Ramp for run frequency) - Set by phytronAxis::move, before move is executed
|
||||
|
||||
P18 (Used internally by controller)
|
||||
|
||||
P19 (Encoder deviation M0P counter)
|
||||
|
||||
P20 (Mechanical 0 counter) - read by phytronAxis::poll to determine motor
|
||||
position
|
||||
|
||||
P21 (Absolute counter)
|
||||
|
||||
P22 (Encoder counter) - read by phytronAxis::poll to determine encoder position
|
||||
|
||||
P23 and P24 - Software limit switches - these parameters are ignored, because
|
||||
motor record handles software limits
|
||||
|
||||
P25 (Compensation for play) - Ignored, because motor records handles backlash
|
||||
corrections
|
||||
|
||||
P29 (Not used (by controller))
|
||||
|
||||
P30 and P31 (For I4XM01 only)
|
||||
|
||||
P32 and P33 (Not used (by controller))
|
||||
|
||||
P44 (For I4XM01 only)
|
||||
|
||||
P46, P47, P48 (Not used (by controller))
|
||||
|
||||
P50 and P51 (For I4XM01 only)
|
||||
|
||||
P52 (Internally used for trigger position)
|
||||
|
||||
|
||||
GUI:
|
||||
====
|
||||
The follwoing CSS BOY GUI screens are located in motorApp/op/opi:
|
||||
|
||||
PhytronMain.opi
|
||||
---------------
|
||||
Motor record name is usually defined with 2 macros:
|
||||
record(motor, "$(P)$(M)")
|
||||
|
||||
The value of the macro $(IOC) of the PhytronMain.opi screen must match the value
|
||||
of the macro $(P) which is defined in motor.substitutions.
|
||||
|
||||
PhytronMain.opi has 2 action buttons to open screen PhytronI1AM01.opi for motor
|
||||
$(IOC):$(M), where the default values for $(M) are "m1" for the left button
|
||||
and "m2" for the right button. User must modify the values of macros $(IOC) and
|
||||
$(M) according to the macro values in motor.subsititutions.
|
||||
|
||||
PhytronMain.opi also contains a CONTROLLER STATUS line. The LED displays the
|
||||
value of record $(P)-CON-ERR (see section MC01 Controller Features). Action
|
||||
button "MORE" opens the screen PhytronMCM01Status.opi, action button "RESET"
|
||||
resets the MCM01 controller and action button "RESET CONTROLLER" resets
|
||||
controller status.
|
||||
|
||||
PhytronI1AM01.opi
|
||||
-----------------
|
||||
Status line contains a LED which displays the value of the record
|
||||
$(P)$(M)-AXIS-ERR, and an action button which displays the PhytronI1AM01.opi
|
||||
screen. Action buttons "RESET AXIS" and "RESET STATUS" are provided.
|
||||
|
||||
The remaining widgets are used to set and read back the values of supported
|
||||
I1AM01 parameters (see section I1AM01 Controller Features).
|
||||
|
||||
PhytronI1AM01Status.opi
|
||||
-----------------------
|
||||
Contains an LED for each of the 23 bi records parsing the $(P)$(M)-STATUS-1/2
|
||||
mbbiDirect records.
|
||||
|
||||
PhytronMCM01Status.opi
|
||||
----------------------
|
||||
Contains an LED for each of the 16 bi records parsing the $(P)-STATUS-BITS_
|
||||
mbbiDirect record
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
registrar(phytronRegister)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,172 +0,0 @@
|
||||
/*
|
||||
FILENAME... phytronAxisMotor.h
|
||||
USAGE... Motor record support for Phytron Axis controller.
|
||||
|
||||
Tom Slejko & Bor Marolt
|
||||
Cosylab d.d. 2014
|
||||
|
||||
*/
|
||||
|
||||
#include "asynMotorController.h"
|
||||
#include "asynMotorAxis.h"
|
||||
|
||||
|
||||
//Number of controller specific parameters
|
||||
#define NUM_PHYTRON_PARAMS 29
|
||||
|
||||
#define MAX_VELOCITY 40000 //steps/s
|
||||
#define MIN_VELOCITY 1 //steps/s
|
||||
|
||||
#define MAX_ACCELERATION 500000 // steps/s^2
|
||||
#define MIN_ACCELERATION 4000 // steps/s^2
|
||||
|
||||
//Controller parameters
|
||||
#define controllerStatusString "CONTROLLER_STATUS"
|
||||
#define controllerStatusResetString "CONTROLLER_STATUS_RESET"
|
||||
#define resetControllerString "CONTROLLER_RESET"
|
||||
|
||||
//Axis parameters
|
||||
#define axisStatusString "AXIS_STATUS"
|
||||
#define homingProcedureString "HOMING_PROCEDURE"
|
||||
#define axisModeString "AXIS_MODE"
|
||||
#define mopOffsetPosString "MOP_POS"
|
||||
#define mopOffsetNegString "MOP_NEG"
|
||||
#define stepResolutionString "STEP_RES"
|
||||
#define stopCurrentString "STOP_CURRENT"
|
||||
#define runCurrentString "RUN_CURRENT"
|
||||
#define boostCurrentString "BOOST_CURRENT"
|
||||
#define encoderTypeString "ENCODER_TYP"
|
||||
#define initRecoveryTimeString "INIT_TIME"
|
||||
#define positionRecoveryTimeString "POSITION_TIME"
|
||||
#define boostConditionString "BOOST"
|
||||
#define encoderRateString "ENC_RATE"
|
||||
#define switchTypString "SWITCH_TYP"
|
||||
#define pwrStageModeString "PWR_STAGE_MODE"
|
||||
#define encoderResolutionString "ENC_RESOLUTION"
|
||||
#define encoderFunctionString "ENC_FUNCTION"
|
||||
#define encoderSFIWidthString "ENC_SFI_WIDTH"
|
||||
#define encoderDirectionString "ENC_DIRECTION"
|
||||
#define powerStageTempString "PS_TEMPERATURE"
|
||||
#define powerStagetMonitorString "PS_MONITOR"
|
||||
#define motorTempString "MOTOR_TEMP"
|
||||
#define currentDelayTimeString "CURRENT_DELAY_TIME"
|
||||
#define axisResetString "AXIS_RESET"
|
||||
#define axisStatusResetString "AXIS_STATUS_RESET"
|
||||
|
||||
typedef enum {
|
||||
phytronSuccess,
|
||||
phytronTimeout,
|
||||
phytronOverflow,
|
||||
phytronError,
|
||||
phytronDisconnected,
|
||||
phytronDisabled,
|
||||
phytronInvalidReturn,
|
||||
phytronInvalidCommand
|
||||
} phytronStatus;
|
||||
|
||||
enum movementType{
|
||||
stdMove,
|
||||
homeMove,
|
||||
stopMove
|
||||
};
|
||||
|
||||
enum homingType{
|
||||
limit,
|
||||
center,
|
||||
encoder,
|
||||
limitEncoder,
|
||||
centerEncoder,
|
||||
referenceCenter,
|
||||
referenceCenterEncoder,
|
||||
};
|
||||
|
||||
|
||||
class phytronAxis : public asynMotorAxis
|
||||
{
|
||||
public:
|
||||
/* These are the methods we override from the base class */
|
||||
phytronAxis(class phytronController *pC, int axis);
|
||||
void report(FILE *fp, int level);
|
||||
asynStatus move(double position, int relative, double min_velocity, double max_velocity, double acceleration);
|
||||
asynStatus moveVelocity(double min_velocity, double max_velocity, double acceleration);
|
||||
asynStatus home(double min_velocity, double max_velocity, double acceleration, int forwards);
|
||||
asynStatus stop(double acceleration);
|
||||
asynStatus poll(bool *moving);
|
||||
asynStatus setPosition(double position);
|
||||
|
||||
asynStatus setEncoderRatio(double ratio);
|
||||
asynStatus setEncoderPosition(double position);
|
||||
|
||||
float axisModuleNo_; //Used by sprintf to form commands
|
||||
|
||||
private:
|
||||
phytronController *pC_; /**< Pointer to the asynMotorController to which this axis belongs.
|
||||
* Abbreviated because it is used very frequently */
|
||||
|
||||
phytronStatus setVelocity(double minVelocity, double maxVelocity, int moveType);
|
||||
phytronStatus setAcceleration(double acceleration, int movementType);
|
||||
|
||||
size_t response_len;
|
||||
|
||||
friend class phytronController;
|
||||
};
|
||||
|
||||
class phytronController : public asynMotorController {
|
||||
public:
|
||||
phytronController(const char *portName, const char *phytronPortName, double movingPollPeriod, double idlePollPeriod, double timeout);
|
||||
asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
|
||||
asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
|
||||
asynStatus readFloat64(asynUser *pasynUser, epicsFloat64 *value);
|
||||
|
||||
void report(FILE *fp, int level);
|
||||
phytronAxis* getAxis(asynUser *pasynUser);
|
||||
phytronAxis* getAxis(int axisNo);
|
||||
|
||||
phytronStatus sendPhytronCommand(const char *command, char *response_buffer, size_t response_max_len, size_t *nread);
|
||||
|
||||
void resetAxisEncoderRatio();
|
||||
|
||||
//casts phytronStatus to asynStatus
|
||||
asynStatus phyToAsyn(phytronStatus phyStatus);
|
||||
|
||||
char * controllerName_;
|
||||
std::vector<phytronAxis*> axes;
|
||||
|
||||
protected:
|
||||
//Additional parameters used by additional records
|
||||
int axisStatus_;
|
||||
int controllerStatus_;
|
||||
int homingProcedure_;
|
||||
int axisMode_;
|
||||
int mopOffsetPos_;
|
||||
int mopOffsetNeg_;
|
||||
int stepResolution_;
|
||||
int stopCurrent_;
|
||||
int runCurrent_;
|
||||
int boostCurrent_;
|
||||
int encoderType_;
|
||||
int initRecoveryTime_;
|
||||
int positionRecoveryTime_;
|
||||
int boost_;
|
||||
int encoderRate_;
|
||||
int switchTyp_;
|
||||
int pwrStageMode_;
|
||||
int encoderRes_;
|
||||
int encoderFunc_;
|
||||
int encoderSFIWidth_;
|
||||
int encoderDirection_;
|
||||
int powerStageTemp_;
|
||||
int powerStageMonitor_;
|
||||
int motorTemp_;
|
||||
int currentDelayTime_;
|
||||
int resetController_;
|
||||
int axisReset_;
|
||||
int axisStatusReset_;
|
||||
int controllerStatusReset_;
|
||||
|
||||
private:
|
||||
double timeout_;
|
||||
|
||||
|
||||
friend class phytronAxis;
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,441 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<display typeId="org.csstudio.opibuilder.Display" version="1.0.0">
|
||||
<auto_zoom_to_fit_all>false</auto_zoom_to_fit_all>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<IOC>PHYIOC</IOC>
|
||||
</macros>
|
||||
<wuid>2da4dada:138bb0b2666:-7ff6</wuid>
|
||||
<boy_version>3.2.16.20140409</boy_version>
|
||||
<scripts />
|
||||
<show_ruler>true</show_ruler>
|
||||
<height>700</height>
|
||||
<name>Display</name>
|
||||
<snap_to_geometry>true</snap_to_geometry>
|
||||
<show_grid>false</show_grid>
|
||||
<background_color>
|
||||
<color red="229" green="229" blue="229" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="192" green="192" blue="192" />
|
||||
</foreground_color>
|
||||
<widget_type>Display</widget_type>
|
||||
<show_close_button>true</show_close_button>
|
||||
<width>800</width>
|
||||
<rules />
|
||||
<show_edit_range>true</show_edit_range>
|
||||
<grid_space>6</grid_space>
|
||||
<auto_scale_widgets>
|
||||
<auto_scale_widgets>false</auto_scale_widgets>
|
||||
<min_width>-1</min_width>
|
||||
<min_height>-1</min_height>
|
||||
</auto_scale_widgets>
|
||||
<actions hook="false" hook_all="false" />
|
||||
<y>-1</y>
|
||||
<x>-1</x>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.ActionButton" version="2.0.0">
|
||||
<border_alarm_sensitive>false</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<wuid>-3ea02a50:1499f605597:-7f01</wuid>
|
||||
<scripts />
|
||||
<height>24</height>
|
||||
<style>0</style>
|
||||
<name>Action Button</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<pv_name></pv_name>
|
||||
<background_color>
|
||||
<color red="240" green="240" blue="240" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Action Button</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>$(IOC):m1</text>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>86</width>
|
||||
<border_style>0</border_style>
|
||||
<push_action_index>0</push_action_index>
|
||||
<image></image>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<toggle_button>false</toggle_button>
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<y>52</y>
|
||||
<actions hook="false" hook_all="false">
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>PhytronI1AM01.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<M>:m1</M>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description></description>
|
||||
</action>
|
||||
</actions>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>204</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.Label" version="1.0.0">
|
||||
<visible>true</visible>
|
||||
<vertical_alignment>1</vertical_alignment>
|
||||
<wuid>7f2e3e4d:149c2f8c125:-7f3d</wuid>
|
||||
<auto_size>false</auto_size>
|
||||
<scripts />
|
||||
<height>26</height>
|
||||
<name>Label</name>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<transparent>true</transparent>
|
||||
<show_scrollbar>false</show_scrollbar>
|
||||
<background_color>
|
||||
<color red="255" green="255" blue="255" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Label</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>MCM CONTROLLER STATUS:</text>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>175</width>
|
||||
<border_style>0</border_style>
|
||||
<rules />
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<horizontal_alignment>0</horizontal_alignment>
|
||||
<actions hook="false" hook_all="false" />
|
||||
<y>20</y>
|
||||
<wrap_words>true</wrap_words>
|
||||
<tooltip></tooltip>
|
||||
<x>30</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.ActionButton" version="2.0.0">
|
||||
<border_alarm_sensitive>false</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<wuid>7f2e3e4d:149c2f8c125:-7f39</wuid>
|
||||
<scripts />
|
||||
<height>23</height>
|
||||
<style>0</style>
|
||||
<name>Action Button_1</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<pv_name></pv_name>
|
||||
<background_color>
|
||||
<color red="240" green="240" blue="240" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Action Button</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>RESET CONTROLLER</text>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>135</width>
|
||||
<border_style>0</border_style>
|
||||
<push_action_index>0</push_action_index>
|
||||
<image></image>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<toggle_button>false</toggle_button>
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<y>21</y>
|
||||
<actions hook="false" hook_all="false">
|
||||
<action type="WRITE_PV">
|
||||
<pv_name>$(IOC)-RESET</pv_name>
|
||||
<value>1</value>
|
||||
<timeout>10</timeout>
|
||||
<confirm_message></confirm_message>
|
||||
<description></description>
|
||||
</action>
|
||||
</actions>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>411</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.ActionButton" version="2.0.0">
|
||||
<border_alarm_sensitive>false</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<wuid>7f2e3e4d:149c2f8c125:-7f36</wuid>
|
||||
<scripts />
|
||||
<height>25</height>
|
||||
<style>0</style>
|
||||
<name>Action Button_2</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<pv_name></pv_name>
|
||||
<background_color>
|
||||
<color red="240" green="240" blue="240" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Action Button</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>MORE</text>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>58</width>
|
||||
<border_style>0</border_style>
|
||||
<push_action_index>0</push_action_index>
|
||||
<image></image>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<toggle_button>false</toggle_button>
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<y>20</y>
|
||||
<actions hook="false" hook_all="false">
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>PhytronMCM01Status.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description></description>
|
||||
</action>
|
||||
</actions>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>232</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.LED" version="1.0.0">
|
||||
<border_alarm_sensitive>true</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<wuid>7f2e3e4d:149c2f8c125:-7bf9</wuid>
|
||||
<scripts />
|
||||
<square_led>false</square_led>
|
||||
<on_color>
|
||||
<color name="Major" red="255" green="0" blue="0" />
|
||||
</on_color>
|
||||
<height>26</height>
|
||||
<data_type>0</data_type>
|
||||
<name>LED</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<show_boolean_label>false</show_boolean_label>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>true</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<off_color>
|
||||
<color name="Off" red="60" green="100" blue="60" />
|
||||
</off_color>
|
||||
<pv_name>$(IOC)-CON-ERR</pv_name>
|
||||
<background_color>
|
||||
<color red="240" green="240" blue="240" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<off_label>OFF</off_label>
|
||||
<widget_type>LED</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>26</width>
|
||||
<border_style>0</border_style>
|
||||
<effect_3d>true</effect_3d>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<bit>0</bit>
|
||||
<border_width>1</border_width>
|
||||
<on_label>ON</on_label>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<actions hook="false" hook_all="false" />
|
||||
<y>20</y>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>204</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.ActionButton" version="2.0.0">
|
||||
<border_alarm_sensitive>false</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<wuid>4b85a4d3:149ccab176a:-7f7b</wuid>
|
||||
<scripts />
|
||||
<height>24</height>
|
||||
<style>0</style>
|
||||
<name>Action Button_3</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<pv_name></pv_name>
|
||||
<background_color>
|
||||
<color red="240" green="240" blue="240" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Action Button</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>$(IOC):m2</text>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>79</width>
|
||||
<border_style>0</border_style>
|
||||
<push_action_index>0</push_action_index>
|
||||
<image></image>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<toggle_button>false</toggle_button>
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<y>52</y>
|
||||
<actions hook="false" hook_all="false">
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>PhytronI1AM01.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<M>:m2</M>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description></description>
|
||||
</action>
|
||||
</actions>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>296</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.Label" version="1.0.0">
|
||||
<visible>true</visible>
|
||||
<vertical_alignment>1</vertical_alignment>
|
||||
<wuid>6f85ee60:149ebd1269c:-7630</wuid>
|
||||
<auto_size>false</auto_size>
|
||||
<scripts />
|
||||
<height>26</height>
|
||||
<name>Label_1</name>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<transparent>true</transparent>
|
||||
<show_scrollbar>false</show_scrollbar>
|
||||
<background_color>
|
||||
<color red="255" green="255" blue="255" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Label</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>I1AM01 CONTROLLERS:</text>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>160</width>
|
||||
<border_style>0</border_style>
|
||||
<rules />
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<horizontal_alignment>0</horizontal_alignment>
|
||||
<actions hook="false" hook_all="false" />
|
||||
<y>51</y>
|
||||
<wrap_words>true</wrap_words>
|
||||
<tooltip></tooltip>
|
||||
<x>30</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.ActionButton" version="2.0.0">
|
||||
<border_alarm_sensitive>false</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<wuid>6f85ee60:149ebd1269c:-75e0</wuid>
|
||||
<scripts />
|
||||
<height>25</height>
|
||||
<style>0</style>
|
||||
<name>Action Button_4</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<pv_name></pv_name>
|
||||
<background_color>
|
||||
<color red="240" green="240" blue="240" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Action Button</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>RESET STATUS</text>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Droid Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>106</width>
|
||||
<border_style>0</border_style>
|
||||
<push_action_index>0</push_action_index>
|
||||
<image></image>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<toggle_button>false</toggle_button>
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<y>20</y>
|
||||
<actions hook="false" hook_all="false">
|
||||
<action type="WRITE_PV">
|
||||
<pv_name>$(IOC)-RESET-STATUS</pv_name>
|
||||
<value>1</value>
|
||||
<timeout>10</timeout>
|
||||
<confirm_message></confirm_message>
|
||||
<description></description>
|
||||
</action>
|
||||
</actions>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>296</x>
|
||||
</widget>
|
||||
</display>
|
||||
@@ -29,7 +29,6 @@ ifdef BUSY
|
||||
COMMONLIBS := busy $(COMMONLIBS)
|
||||
endif
|
||||
COMMONDBDS += PI_GCS2Support.dbd
|
||||
COMMONDBDS += phytron.dbd
|
||||
ifdef LUA
|
||||
COMMONDBDS += ScriptMotorDriver.dbd
|
||||
endif
|
||||
@@ -66,7 +65,6 @@ COMMONLIBS += softMotor
|
||||
COMMONLIBS += motorSimSupport
|
||||
COMMONLIBS += ACRMotor
|
||||
COMMONLIBS += PI_GCS2Support
|
||||
COMMONLIBS += phytronAxisMotor
|
||||
COMMONLIBS += motor
|
||||
ifdef LUA
|
||||
COMMONLIBS += ScriptMotor
|
||||
|
||||
Reference in New Issue
Block a user