layout | title | nav_order |
---|---|---|
default |
Oxford CryoStream 800 |
5 |
Table of Contents
- Pete Jemian
- David Vine
- James O'Hea (for the cs700 support that precedes this)
file | description |
---|---|
documentation/Oxford_CS800.md | this file |
iocsh/Oxford_CS800_status.iocsh | IOC startup commands for status server |
iocsh/Oxford_CS800.iocsh | IOC startup commands for each controller |
ipApp/Db/Oxford_CS800_settings.req | autosave request file |
ipApp/Db/Oxford_CS800_status_settings.req | autosave request file |
ipApp/Db/Oxford_CS800_status.db | PV database for status server |
ipApp/Db/Oxford_CS800.db | PV database for each controller |
ipApp/Db/Oxford_CS800.proto | stream protocol |
ipApp/op/adl/Oxford_CS800_admin.adl | MEDM screen |
ipApp/op/adl/Oxford_CS800_hourplot.adl | MEDM screen |
ipApp/op/adl/Oxford_CS800_program.adl | MEDM screen |
ipApp/op/adl/Oxford_CS800_sensors.adl | MEDM screen |
ipApp/op/adl/Oxford_CS800_status_full.adl | MEDM screen |
ipApp/op/adl/Oxford_CS800_status.adl | MEDM screen |
ipApp/op/adl/Oxford_CS800.adl | MEDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800_admin.ui | caQtDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800_hourplot.ui | caQtDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800_program.ui | caQtDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800_sensors.ui | caQtDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800_status_full.ui | caQtDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800_status.ui | caQtDM screen |
ipApp/op/ui/autoconvert/Oxford_CS800.ui | caQtDM screen |
ipApp/op/ui/Oxford_CS800_hourplot.ui | caQtDM screen |
ipApp/op/ui/Oxford_CS800.ui | caQtDM screen |
ipApp/src/Oxford_CS800.st | sequence program for each controller |
- product: https://www.oxcryo.com/product/cryostream-800
- brochure: https://www.oxcryo.com/sites/default/files/2018-08/cryostream_800_brochure_af.pdf
- manual: https://www.sfu.ca/~mpaetzel/manuals/Cryo/Cryostream_800_series.pdf
Each CS800 controller broadcasts its status data by UDP to network port 30304.
One piece of information in that data packet is the unique controller number
of the CS800 as set at the factory. All broadcasts are collected by a single
asyn record, configured from the Oxford_CS800_status.db
database. Because
asyn
will bind to these sockets during the IOC startup, they are
not available for any other applications to use on the workstation running
the IOC.
The status of a controller is selected from the common status asyn record input. (This is provided by an EPICS sequence program.) Commands are sent to the controller's IP address at port 30305 by UDP. (This is provided by an EPICS database and stream protocol.) Since this UDP port cannot be opened by multiple processes on a single workstation, only one IOC on a workstation can run the controller databases.
NOTE: A request has
been made to the asyn repository to support the
SO_REUSEPORT
socket option
that allows multiple controllers to be run from the same IOC (and host). If
you received a message that UDP&
is not supported when starting the IOC,
you need the patch which provides the SO_REUSEPORT
socket option.
SUGGESTION: Run the common status database and all controller databases from the same IOC.
Instructions for EPICS base release 3.15 or later.
For the common status broadcasts, these macros apply:
MACRO | EXAMPLE | DEFINITION |
---|---|---|
PREFIX | xxx: | IOC prefix |
R | CS: | CS800 shared asyn status database prefix |
STATUS_IP | 192.168.0.176 | IP number of this IOC |
For each CS800 controller, these macros apply:
MACRO | EXAMPLE | DEFINITION |
---|---|---|
PREFIX | xxx: | IOC prefix |
R | CS0: | CS800 controller database prefix |
CID | 411 | Controller Number (use 0 if unknown and only 1 CS800) |
COMMAND_IP | 192.168.0.144 | IP number of CS800 controller |
CS800_STATUS | xxx:CS:status_packets | asyn PV with status packet data |
Note: If you only have one CS800 controller on the network, you can specify CID=0 and the software will automatically find the status data. For two or more CS800 controllers, you must specify the controller number of each.
Add these lines to the IOC's st.cmd
file before the call to iocInit
:
# assume the IOC prefix has been set
epicsEnvSet("PREFIX", "xxx:")
# prepare to receive status broadcasts
# use IOC's IP number for STATUS_IP
iocshLoad("$(IP)/iocsh/Oxford_CS800_status.iocsh", "PREFIX=$(PREFIX), R=CS:, STATUS_IP=192.168.0.176")
# CS800_STATUS is defined in previous command
# for each CS800 (here, we support two controllers: CS0 & CS1)
# CS0: #411 at 192.168.0.144
iocshLoad("$(IP)/iocsh/Oxford_CS800.iocsh", "PREFIX=$(PREFIX), R=CS0:, CID=411, COMMAND_IP=192.168.0.144, CS800_STATUS=$(CS800_STATUS)")
# CS1: #369 at 192.168.0.113
iocshLoad("$(IP)/iocsh/Oxford_CS800.iocsh", "PREFIX=$(PREFIX), R=CS1:, CID=369, COMMAND_IP=192.168.0.113, CS800_STATUS=$(CS800_STATUS)")
By convention, to enable automatic discovery of autosave requests,
the autosave request file is in the same directory with
the PV database file. Both files share the same filename,
up to the final part of the name (_settings.req
and
.db
, respectively).
Thus, no additional configuration is needed here.
Oxford_CS800.adl CS=xxx:CS0:
Oxford_CS800.ui CS=xxx:CS0:
Example screens are shown using the controller at APS 19-ID and the caQtDM application.
main : Oxford_CS800.ui
hour plot of temperature : Oxford_CS800_hourplot.ui
sensors, heaters, and flow : Oxford_CS800_sensors.ui
note: Gas flow signal from controller is incorrect (raw value of 0xfffe)
ramp, plateau, cool : Oxford_CS800_program.ui
Commands to change the setpoint programmatically.
status : Oxford_CS800_status.ui
all status values monitored : Oxford_CS800_status_full.ui
note: some signals from controller are incorrect (raw value of 0xfffe)
administrative : Oxford_CS800_admin.ui
CAUTION: Controls on this screen can turn off or restart the controller. This screen can only be reached from the status or full status screens.