-
Notifications
You must be signed in to change notification settings - Fork 0
Ticket8614 mercury ips magnet supply #9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 50 commits
Commits
Show all changes
61 commits
Select commit
Hold shift + click to select a range
467a854
Initial dev changes to OxInstIPS_SCPI.protocol
iangillingham-stfc 1dcb2ed
Further SCPI migration
iangillingham-stfc 5d73d90
Corrections to SCPI protocol on connection to real instrument
iangillingham-stfc 6f9d113
Tests IOCS config changed to specify use of SCPI protocol
iangillingham-stfc 8fa489d
Further corrections to SCPI protocol on connection to real instrument
iangillingham-stfc c9a7adf
Added voltage_limit to device_scpi.py
iangillingham-stfc cc0799d
Added system_test files after moving out of generic support/DeviceEmu…
iangillingham-stfc 4922bc5
.gitignore: added __pycache__ and .idea directories
iangillingham-stfc 2438716
tests/ips.py reverted to original as scpi tests are now in ips_scpi.py
iangillingham-stfc 94ffca5
refactor: Split tests into common and specific to legacy and SCPI
iangillingham-stfc f82db58
Added ips_scpi.py for specific SCPI protocol tests
iangillingham-stfc 255777c
Added to and made changes with lewis emulator and tests. Originally p…
iangillingham-stfc cde4713
SCPI protocol: Some 'out' commands had associated 'in' to read back t…
iangillingham-stfc 19bd866
stream_interface_scpi.py: Removed some no longer needed diagnostic lo…
iangillingham-stfc 13d36a9
ips_common.py tests: Removed some no longer needed diagnostic logging…
iangillingham-stfc d339f2c
ips_scpi.py tests: Commented out the ioc_launcher_class attribute for…
iangillingham-stfc 5955855
Deleted modes_scpi.py
iangillingham-stfc 03ae20e
Added StreamDevice protocol functions for SCPI getSysAlarms, readSysA…
iangillingham-stfc 6cab1e4
Added lewis emulator device support for the level meter board and mag…
iangillingham-stfc 9cea6da
Added lewis emulator support for reading system alarms (STAT:SYS:ALRM)
iangillingham-stfc c5f2035
Added lewis emulator support for temperature board status and level m…
iangillingham-stfc 744a5da
Added tests for magnet temperature sensor board and level meter board…
iangillingham-stfc 1e52a2a
Commenced adding Level Sensor board support
iangillingham-stfc d73ecfb
Added loads of stuff to the SCPI protocol file.
iangillingham-stfc 21b908d
Added loads of device attributes to the lewis device.py file.
iangillingham-stfc f699099
Added LevelMeterHeliumReadRate Enum class to encapsulate He level rea…
iangillingham-stfc f3c247b
Added tests for helium and nitrogen levels attributes.
iangillingham-stfc d4b0ea0
Added lewis emulation features for helium and nitrogen levels attribu…
iangillingham-stfc 3c96b6b
Removed commented out code.
iangillingham-stfc 4e3f028
Ruff formatted: Added type annotations and general formatting.
iangillingham-stfc 7829d0b
Ruff formatted: Added type annotations and general formatting.
iangillingham-stfc 035241a
Fixed a couple of long lines.
iangillingham-stfc 24867b7
aSub record framework added to handle system error processing.
iangillingham-stfc 78a5432
Added pressure and levels daughter board support
iangillingham-stfc 923e6d3
Modified src/Makefile to build for both the test IOC and support modu…
iangillingham-stfc b3cbf3b
device.py: Added Temperature and pressure values along with system al…
iangillingham-stfc d6c6b7e
OxInstIPS_SCPI.protocol: SYS:ALRM now read in one string then passed …
iangillingham-stfc 707e698
modes.py: Pressure board class added and case corrected for some alar…
iangillingham-stfc 735cc37
RELEASE cosmetic mods
iangillingham-stfc b17feea
alarms.c: aSub function starting to receive alarm data and preliminar…
iangillingham-stfc 5a3ed7d
Switch alarms code from C to C++ and renamed to alarms.cpp
iangillingham-stfc 3da1d99
alarms.c renamed to alarms.cpp
iangillingham-stfc fff7596
Refactor: Used C++ STL to remove complexity of arrays of pointers to …
iangillingham-stfc db24ffb
Refactor: Augmented code documentation. Corrected the order of some m…
iangillingham-stfc 4d2eb07
fix: Corrected system alarm messages source for pressure board.
iangillingham-stfc b5c9447
Added tests for system alarm handling and removed He/N filling status…
iangillingham-stfc 9f8475a
Type checking sorted for pyright.
iangillingham-stfc b3bc2fa
Corrected for ruff checks.
iangillingham-stfc 29d6c15
Added support for discovered alarm status 'Magnet Safety'
iangillingham-stfc 1784122
alarms.cpp: Removed diagnostic log messages and additional documentat…
iangillingham-stfc 3485c96
Ruff formatted (again)
iangillingham-stfc f7e4543
OxinstIPS_SCPI.protocol: Removed no longer relevant commentary regard…
iangillingham-stfc ca1b808
alarms.cpp: PR review changes
iangillingham-stfc fe3233b
Removed commented out code from interfaces/__init__.py
iangillingham-stfc 6f6869c
stream_interface_scpi.py: Removed redundent code in set_activity()
iangillingham-stfc 9132e72
stream_interface_scpi.py: Removed redundent function get_trip_current()
iangillingham-stfc 3db02a3
stream_interface_scpi.py: Removed commentded out code in get_pressure()
iangillingham-stfc 14a174a
More Ruff formatting that somehow got missed
iangillingham-stfc c48246c
ips.py: Commented out ioc_launcher_class: ProcServLauncher to improve…
iangillingham-stfc a5c5b76
Remove unused parameters
Tom-Willemsen 3590a5e
Fix run_tests.bat & remove commented-out code
Tom-Willemsen File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -16,3 +16,5 @@ relPaths.sh | |
| /doc/ | ||
| *_info_positions.req | ||
| *_info_settings.req | ||
| __pycache__/ | ||
| .idea | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,327 @@ | ||
| # File OxInstIPS_SCPI.protocol | ||
| # | ||
| # Stream Device protocol file for the Oxford Instruments Modular IPS | ||
| # superconducting magnet power supplies. | ||
| # This protocol supports the SCPI commands for the IPS, replacing the legacy command set. | ||
| # | ||
| # The full protocol is described in the IPS Operators Handbook. | ||
| # | ||
| # The commands are case-sensitive. | ||
| # Keywords are a maximum of four characters long. Keywords longer than four characters | ||
| # generate an invalid command response. | ||
| # Keywords are separated by a colon: (ASCII 0x3Ah). | ||
| # The maximum line length is 1024 bytes (characters), including line terminators. | ||
| # All command lines are terminated by the new line character \n (ASCII 0x0Ah). | ||
| # | ||
| Terminator = "\n"; | ||
|
|
||
| # The lagacy timeout values cribbed from OxInstCryojet module - had occasional | ||
| # problems with the default settings with one record timing out and | ||
| # another record seeing the reply - see if longer time out will fix it. | ||
| # Also see if this is still applicable to the SCPI protocol. | ||
| # | ||
| readtimeout = 500; | ||
| replytimeout = 5000; | ||
| locktimeout = 20000; | ||
| PollPeriod = 500; | ||
| ExtraInput = Ignore; | ||
|
|
||
| # Device board/slot names | ||
| magnet_temperature_sensor = "MB1.T1"; | ||
| level_meter = "DB1.L1"; | ||
| magnet_supply = "GRPZ"; | ||
| temperature_sensor_10T = "DB8.T1"; | ||
| pressure_sensor_10T = "DB5.P1"; | ||
|
|
||
| ######################################################################################### | ||
| # --------- | ||
| # *IDN? | ||
| # --------- | ||
| # IDN:OXFORD INSTRUMENTS:MERCURY dd:ss:ff | ||
| # Where: | ||
| # dd is the basic instrument type (iPS , iPS, Cryojet etc.) | ||
| # ss is the serial number of the main board | ||
| # ff is the firmware version of the instrument | ||
| # Get the unit version information - returns unit type and firmware information. | ||
| # Manual says letter commands always reply with themselves at the start, but | ||
| # found out this one does not. Manual also shows a copyright symbol, which is not an | ||
| # ASCII symbol and might cause problems for EPICS. In practice found (c) instead. | ||
| # The %s format grabs the string upto the first space, the %c grabs the rest. It | ||
| # was too long to fit into one EPICS string record value. | ||
| getVersion { out "*IDN?"; | ||
| in "IDN:OXFORD INSTRUMENTS:%(\$1MODEL.VAL)[ a-zA-Z0-9]:%*[ a-zA-Z0-9]:%(\$1VERSION.VAL)s";} | ||
|
|
||
| ######################################################################################### | ||
|
|
||
| # Get measured power supply voltage in volts | ||
| # The return string is of the form: STAT:DEV:GRPZ:PSU:SIG:VOLT:-0.0002V | ||
| getSupplyVoltage { out "READ:DEV:" $magnet_supply ":PSU:SIG:VOLT"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:VOLT:%f%*s";} | ||
|
|
||
| # Get demand current (output current) in amps. We are only interested in the Z axis magnet group. | ||
| # The return string is of the form: STAT:DEV:GRPZ:PSU:CSET:<value>:A | ||
| getDemandCurrent { out "READ:DEV:" $magnet_supply ":PSU:SIG:CSET"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:CSET:%f%*s";} | ||
|
|
||
| # Get measured magnet curren in amps - ER=no. | ||
| # The return string is of the form: STAT:DEV:GRPZ:PSU:SIG:CURR:-0.0001A | ||
| getMeasuredMagnetCurrent { out "READ:DEV:" $magnet_supply ":PSU:SIG:CURR"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:CURR:%f%*s";} | ||
|
|
||
| # Get set point (target current) in amps ER=yes. | ||
| getSetpointCurrent { out "READ:DEV:" $magnet_supply ":PSU:SIG:CSET"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:CSET:%f%*s";} | ||
|
|
||
| # Get current sweep rate in amps per minute ER=yes. | ||
| getCurrentSweepRate { out "READ:DEV:" $magnet_supply ":PSU:SIG:RCST"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:RCST:%f%*s";} | ||
|
|
||
| # Get demand field (output field) in tesla ER=yes. | ||
| getDemandField { out "READ:DEV:" $magnet_supply ":PSU:SIG:FLD"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:FLD:%f%*s";} | ||
|
|
||
| # Get set point (target field) in tesla ER=yes. | ||
| getSetpointField { out "READ:DEV:" $magnet_supply ":PSU:SIG:FSET"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:FSET:%f%*s";} | ||
|
|
||
| # Get field sweep rate in tesla per minute ER=yes. | ||
| # Returns status like: STAT:DEV:GRPZ:PSU:SIG:RFST:0.3850T/m | ||
| getFieldSweepRate { out "READ:DEV:" $magnet_supply ":PSU:SIG:RFST"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:RFST:%f%*s";} | ||
|
|
||
| # Get software voltage limit in volts ER=no. | ||
| # The documentation states that a float is returned, but in reality, a string may be returned instead, such as 'N/A' | ||
| getSoftwareVoltageLimit { out "READ:DEV:" $magnet_supply ":PSU:VLIM"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:VLIM:%f%*s"; @mismatch{in "%*s";} wait 100;} | ||
|
|
||
| # Get persistent magnet current in amps ER=yes. | ||
| getPersistentMagnetCurrent { out "READ:DEV:" $magnet_supply ":PSU:SIG:PCUR"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:PCUR:%f%*s";} | ||
|
|
||
| # Get persistent magnetic field in tesla ER=yes. | ||
| getPersistentMagnetField { out "READ:DEV:" $magnet_supply ":PSU:SIG:PFLD"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:PFLD:%f%*s";} | ||
|
|
||
| # Get switch heater current in milliamp ER=no. | ||
| getHeaterCurrent { out "READ:DEV:" $magnet_supply ":PSU:SHTC"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SHTC:%f%*s";} | ||
|
|
||
| # Get safe current limit, most negative in amps ER=no. | ||
| getNegCurrentLimit { out "READ:DEV:" $magnet_supply ":PSU:CLIM"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:CLIM:%f%*s";} | ||
|
|
||
| # Get safe current limit, most positive in amps ER=no. | ||
| # no units appended to the value, so assume amps. | ||
| getPosCurrentLimit { out "READ:DEV:" $magnet_supply ":PSU:CLIM"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:CLIM:%f";} | ||
|
|
||
| # Get lead resistance (PTC/NTC) Ohms. | ||
| # unit appended 'R' | ||
| getLeadResistance { out "READ:DEV:" $magnet_temperature_sensor ":TEMP:SIG:RES"; | ||
| in "STAT:DEV:" $magnet_temperature_sensor ":TEMP:SIG:RES:%f%*s";} | ||
|
|
||
| # Get magnet inductance in henry ER=no. | ||
| # no units appended | ||
| getMagnetInductance { out "READ:DEV:" $magnet_supply ":PSU:IND"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:IND:%f";} | ||
|
|
||
| # Get Activity status (analogous to the legacy A command) | ||
| getActivity { out "READ:DEV:" $magnet_supply ":PSU:ACTN"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:ACTN:%#{HOLD=0|RTOS=1|RTOZ=2|CLMP=4}";} | ||
|
|
||
| getHeaterStatus { out "READ:DEV:" $magnet_supply ":PSU:SIG:SWHT"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:SIG:SWHT:%{OFF|ON}";} | ||
|
|
||
| # *** Need to know what is returned on no alarms present, as it is not documented. *** | ||
| # *** Found empirically that it returns an empty string (afterSTAT:SYS:ALRM:) | ||
| # when no alarms are present. *** | ||
| # Note: For the input we must use %#s (not just %s) as there may be a tab character delimiter | ||
| getSysAlarms { out "READ:SYS:ALRM"; | ||
| in "STAT:SYS:ALRM:%#s";} | ||
|
|
||
|
|
||
| # --------------- The following work around limitation of getting legacy status from SCPI protocol ------------- | ||
| # Get PSU Status status DWORD | ||
| getMagnetSupplyStatus { out "READ:DEV:" $magnet_supply ":PSU:STAT"; | ||
| in "STAT:DEV:" $magnet_supply ":PSU:STAT:%x";} | ||
|
|
||
| # -------------------------------------------------------------------------------------------------------------- | ||
|
|
||
|
|
||
| # --------- | ||
| # SYS:LOCK Command | ||
| # --------- | ||
| # Set Control mode - grab control of the unit from local users. | ||
| # OFF | SOFT | ON | ||
| # With a real device, this command always replies: STAT:SET:SYS:LOCK:OFF:DENIED | ||
| # where 'OFF' may be 'OFF', 'ON' or 'SOFT'. | ||
| # It's also not possible to read the LOCK status. So this feature might be totally useless. | ||
| setControl { out "SET:SYS:LOCK:%{OFF|SOFT|ON}"; in "READ:SYS:LOCK:%*s";} | ||
|
|
||
| # --------- | ||
| # DEV:<UID>:PSU:ACTN | ||
| # --------- | ||
| # Set the activity - i.e. Make it do something. | ||
| # HOLD -> Hold | ||
| # RTOS -> To Set Point | ||
| # RTOZ -> To Zero | ||
| # CLMP -> Clamp | ||
| setActivity { out "SET:DEV:" $magnet_supply ":PSU:ACTN:%#{HOLD=0|RTOS=1|RTOZ=2|CLMP=4}"; | ||
| in "STAT:SET:DEV:" $magnet_supply ":PSU:ACTN:%*s";} | ||
|
|
||
| # --------- | ||
| # SWHT Command | ||
| # --------- | ||
| # | ||
| # Set the status of the heater. | ||
| # 0 = heater off (close switch) | ||
| # 1 = heater on (open switch) [Checks that magnet curr == psu curr before having any effect, so safer] | ||
| # Returns status of this form: STAT:SET:DEV:GRPZ:PSU:SIG:SWHT:OFF:VALID | ||
| # DO NOT USE SWHN command!! | ||
| # | ||
| setHeaterStatus { out "SET:DEV:" $magnet_supply ":PSU:SIG:SWHT:%#{OFF=0|ON=1}"; | ||
| in "STAT:SET:DEV:" $magnet_supply ":PSU:SIG:SWHT:%*s"; | ||
| @init {getHeaterStatus;} } | ||
|
|
||
| # Set the setpoint (target) current. | ||
| # Returns status like: STAT:SET:DEV:GRPZ:PSU:SIG:CSET:0.0004:VALID | ||
| setSetpointCurrent { out "SET:DEV:" $magnet_supply ":PSU:SIG:CSET:%#.4f"; | ||
| in "STAT:SET:DEV:" $magnet_supply ":PSU:SIG:CSET:%*f:%*s"; | ||
| @init {getSetpointCurrent;} } | ||
|
|
||
| # Set the setpoint (target) field. | ||
| # Returns status like: STAT:SET:DEV:GRPZ:PSU:SIG:FSET:0.00:VALID | ||
| setSetpointField { out "SET:DEV:" $magnet_supply ":PSU:SIG:FSET:%#.5f"; | ||
| in "STAT:SET:DEV:" $magnet_supply ":PSU:SIG:FSET:%*f%*s"; | ||
| @init {getSetpointField;} } | ||
|
|
||
| # Set current sweep rate. | ||
| # Rate at which current will be ramped or swept to target, either the setpoint or zero. | ||
| # Returns status like: STAT:DEV:GRPZ:PSU:SIG:RCST:5.5:VALID | ||
| setCurrentSweepRate { out "SET:DEV:" $magnet_supply ":PSU:SIG:RCST:%#.3f"; | ||
| in "STAT:SET:DEV:" $magnet_supply ":PSU:SIG:RCST:%*f%*s"; | ||
| @init {getCurrentSweepRate;} } | ||
|
|
||
| # Set field sweep rate. | ||
| # Rate at which field will be ramped or swept to target, either the setpoint or zero. | ||
| # Returns status like: STAT:SET:DEV:GRPZ:PSU:SIG:RFST:0.3850:VALID | ||
| setFieldSweepRate { out "SET:DEV:" $magnet_supply ":PSU:SIG:RFST:%#.4f"; | ||
| in "STAT:SET:DEV:" $magnet_supply ":PSU:SIG:RFST:%*f%*s"; | ||
| @init {getFieldSweepRate;} } | ||
|
|
||
| # ------------------------------------------------------- | ||
| # LEVELS BOARD COMMANDS | ||
| # ------------------------------------------------------- | ||
| getLevelNitFreqZero { out "READ:DEV:" $level_meter ":LVL:NIT:FREQ:ZERO"; | ||
| in "STAT:DEV:" $level_meter ":LVL:NIT:FREQ:ZERO:%f";} | ||
|
|
||
| setLevelNitFreqZero { out "SET:DEV:" $level_meter ":LVL:NIT:FREQ:ZERO:%d"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:NIT:FREQ:ZERO:%*d%*s"; | ||
| @init {getLevelNitFreqZero;} } | ||
|
|
||
| getLevelNitFreqFull { out "READ:DEV:" $level_meter ":LVL:NIT:FREQ:FULL"; | ||
| in "STAT:DEV:" $level_meter ":LVL:NIT:FREQ:FULL:%f";} | ||
|
|
||
| setLevelNitFreqFull { out "SET:DEV:" $level_meter ":LVL:NIT:FREQ:FULL:%d"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:NIT:FREQ:FULL:%*d%*s"; | ||
| @init {getLevelNitFreqFull;}} | ||
|
|
||
| getLevelHeEmptyRes { out "READ:DEV:" $level_meter ":LVL:HEL:RES:ZERO"; | ||
| in "STAT:DEV:" $level_meter ":LVL:HEL:RES:ZERO:%f";} | ||
|
|
||
| setLevelHeEmptyRes { out "SET:DEV:" $level_meter ":LVL:HEL:RES:ZERO:%f"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:HEL:RES:ZERO:%*f%*s"; | ||
| @init {getLevelHeEmptyRes;}} | ||
|
|
||
| getLevelHeFullRes { out "READ:DEV:" $level_meter ":LVL:HEL:RES:FULL"; | ||
| in "STAT:DEV:" $level_meter ":LVL:HEL:RES:FULL:%f";} | ||
|
|
||
| setLevelHeFullRes { out "SET:DEV:" $level_meter ":LVL:HEL:RES:FULL:%f"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:HEL:RES:FULL:%*f%*s"; | ||
| @init {getLevelHeFullRes;}} | ||
|
|
||
|
|
||
| getLevelHeFillStartThreshold { out "READ:DEV:" $level_meter ":LVL:HEL:LOW"; | ||
| in "STAT:DEV:" $level_meter ":LVL:HEL:LOW:%d";} | ||
|
|
||
| setLevelHeFillStartThreshold { out "SET:DEV:" $level_meter ":LVL:HEL:LOW:%d"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:HEL:LOW:%*d%*s"; | ||
| @init {getLevelHeFillStartThreshold;}} | ||
|
|
||
| getLevelHeFillStopThreshold { out "READ:DEV:" $level_meter ":LVL:HEL:HIGH"; | ||
| in "STAT:DEV:" $level_meter ":LVL:HEL:HIGH:%d";} | ||
|
|
||
| setLevelHeFillStopThreshold { out "SET:DEV:" $level_meter ":LVL:HEL:HIGH:%d"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:HEL:HIGH:%*d%*s"; | ||
| @init {getLevelHeFillStopThreshold;}} | ||
|
|
||
| # The documentation is wrong!: | ||
| # READ:DEV:DB1.L1:LVL:HEL:RFL actually returns which relay output is used to turn the | ||
| # autofill on or off (or indeed can be used to set which relay is used), not the current status. | ||
| # If this is implemented in future, it will need to be modified. | ||
| #getLevelHeRefilling { out "READ:DEV:" $level_meter ":LVL:HEL:RFL"; | ||
| # in "STAT:DEV:" $level_meter ":LVL:HEL:RFL:%{OFF|ON}";} | ||
|
|
||
| getLevelHeReadingRate { out "READ:DEV:" $level_meter ":LVL:HEL:PULS:SLOW"; | ||
| in "STAT:DEV:" $level_meter ":LVL:HEL:PULS:SLOW:%{OFF|ON}";} | ||
|
|
||
| setLevelHeReadingRate { out "SET:DEV:" $level_meter ":LVL:HEL:PULS:SLOW:%{OFF|ON}"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:HEL:PULS:SLOW:%*s"; | ||
| @init {getLevelHeReadingRate;}} | ||
|
|
||
|
|
||
| getLevelNitReadInterval { out "READ:DEV:" $level_meter ":LVL:NIT:PPS"; | ||
| in "STAT:DEV:" $level_meter ":LVL:NIT:PPS:%d"; | ||
| @init {getLevelHeFillStopThreshold;}} | ||
|
|
||
| setLevelNitReadInterval { out "SET:DEV:" $level_meter ":LVL:NIT:PPS:%d"; | ||
| in "STAT:DEV:" $level_meter ":LVL:NIT:PPS:%*d%*s"; | ||
| @init {getLevelNitReadInterval;}} | ||
|
|
||
|
|
||
| getLevelNitFillStartThreshold { out "READ:DEV:" $level_meter ":LVL:NIT:LOW"; | ||
| in "STAT:DEV:" $level_meter ":LVL:NIT:LOW:%d";} | ||
|
|
||
| setLevelNitFillStartThreshold { out "SET:DEV:" $level_meter ":LVL:NIT:LOW:%d"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:NIT:LOW:%*d%*s"; | ||
| @init {getLevelNitFillStartThreshold;}} | ||
|
|
||
| getLevelNitFillStopThreshold { out "READ:DEV:" $level_meter ":LVL:NIT:HIGH"; | ||
| in "STAT:DEV:" $level_meter ":LVL:NIT:HIGH:%d";} | ||
|
|
||
| setLevelNitFillStopThreshold { out "SET:DEV:" $level_meter ":LVL:NIT:HIGH:%d"; | ||
| in "STAT:SET:DEV:" $level_meter ":LVL:NIT:HIGH:%*d%*s"; | ||
| @init {getLevelNitFillStopThreshold;}}; | ||
|
|
||
| # The documentation is wrong!: | ||
| # READ:DEV:DB1.L1:LVL:NIT:RFL actually returns which relay output is used to turn the | ||
| # autofill on or off (or indeed can be used to set which relay is used), not the current status. | ||
| # If this is implemented in future, it will need to be modified. | ||
| #getLevelNitRefilling { out "READ:DEV:" $level_meter ":LVL:NIT:RFL"; | ||
| # in "STAT:DEV:" $level_meter ":LVL:NIT:RFL:%{OFF|ON}";} | ||
|
|
||
| getLevelNitrogenLevel { out "READ:DEV:" $level_meter ":LVL:SIG:NIT:LEV"; | ||
| in "STAT:DEV:" $level_meter ":LVL:SIG:NIT:LEV:%f";} | ||
|
|
||
| getLevelHeliumLevel { out "READ:DEV:" $level_meter ":LVL:SIG:HEL:LEV"; | ||
| in "STAT:DEV:" $level_meter ":LVL:SIG:HEL:LEV:%f";} | ||
|
|
||
| # ------------------------------------------------------- | ||
| # TEMPERATURE BOARD COMMANDS | ||
| # ------------------------------------------------------- | ||
| getMagnetTemperature { out "READ:DEV:" $magnet_temperature_sensor ":TEMP:SIG:TEMP"; | ||
| in "STAT:DEV:" $magnet_temperature_sensor ":TEMP:SIG:TEMP:%f%*s";} | ||
|
|
||
| getLambdaPlateTemperature { out "READ:DEV:" $temperature_sensor_10T ":TEMP:SIG:TEMP"; | ||
| in "STAT:DEV:" $temperature_sensor_10T ":TEMP:SIG:TEMP:%f%*s";} | ||
|
|
||
|
|
||
| # ------------------------------------------------------- | ||
| # PRESSURE BOARD COMMANDS | ||
| # ------------------------------------------------------- | ||
| getPressure { out "READ:DEV:" $pressure_sensor_10T ":PRES:SIG:PRES"; | ||
| in "STAT:DEV:" $pressure_sensor_10T ":PRES:SIG:PRES:%f%*s";} | ||
|
|
||
|
|
||
|
|
||
|
|
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.