8.5 KiB
A SECoP Syntax for Demonstration
I feel it is very hard to explain in a talk what we are talking about when discussing the concepts of SECoP. Would it not be easier with an example syntax and an example SEC node? That is why I created a simple syntax, which is on one hand easily understandable by humans and on the other hand fulfills the requirements for a real syntax.
An Example of an SEC Node with the Demo Syntax
We have 2 main devices: sample temperature and magnetic field.
> ts
ts=9.887
> mf
mf=5.1
We have some additional devices, coil temperature of upper and lower coil.
> tc1
tc1=2.23
> tc2
tc2=2.311
When we use the term "device" here, we do not mean a device in the sense of a cryomagnet or a furnace. For SECoP, roughly any physical quantity which may be of interest to the experimentalist, is its own device.
We can use wildcards to see the values of all devices at once.
> *
ts=9.887
mf=5.1
tc1=2.23
tc2=2.311
label='Cryomagnet MX15; at 9.887 K; Persistent at 5.1 Tesla'
The "> " is not part of the syntax, it is just indicating the request. A request is always one line. A reply might contain several lines and always ends with an empty line.
The last device here is a text displayed on the SE computer. It may not be very useful, but it demonstrates that a device value may also be a text.
A device has parameters. The main parameter is its value. The value parameter is just omitted in the path. We can list the the parameters and its values with the following command:
> mf:*
mf=5.13
mf:status=0
mf:target=14.9
mf:ramp=0.4
mf:set_point=5.13
mf:persistent_mode=0
mf:switch_heater=1
If we want to change the field we have to set its target value:
> mf:target=12
mf:target=12.0
> mf:*
mf=5.13
mf:status=1
mf:target=12.0
mf:ramp=0.4
mf:set_point=5.13
mf:persistent_mode=0
mf:switch_heater=1
The status is indicating the state of the device. 0 means idle, 1 means busy (running to the target).
A parameter has properties. The 'value' property is implicit, its just omitted in the path:
> mf:status:*
mf:status=0
mf:status:value_names=0:idle,1:busy,2:error
mf:status:type=int
mf:status:t=2016-08-23 14:55:45.254348
Please notice the property "value_names" indicating the meaning of the status values.
> mf:target:*
mf:target=12.0
mf:target:writable=1
mf:target:unit=T
mf:target:type=float
mf:target:t=2016-08-23 14:55:44.658749
The last property 't' is the timestamp. If the client want to record timestamps, it can enable it for all device or parameter readings:
> :reply_items=t
:reply_items=t
> *
ts=9.867;t=2016-08-23 14:55:44.655862
mf=5.13;t=2016-08-23 14:55:44.656032
tc1=2.23;t=2016-08-23 14:55:44.656112
tc2=2.311;t=2016-08-23 14:55:44.656147
label='Cryomagnet MX15; at 9.867 K; Ramping at 5.13 Tesla';t=2016-08-23 14:55:44.656183
There is also a list command showing the devices (and parameters) without values. I am not sure if we really need that, as we can just use a wildcard read command and throw away the values.
> !*
ts
mf
tc1
tc2
label
> !ts:*
ts
ts:status
ts:target
ts:ramp
ts:use_ramp
ts:set_point
ts:heater_power
ts:raw_sensor
The property "meaning" indicates the meaning of the most important devices. We can list all the devices which have a "meaning" property
> *::meaning
ts::meaning=temperature
mf::meaning=magnetic_field
Markus: We have more things to tell here.
As a last example: the ultimate command to get everything:
> *:*:*
ts=9.887
ts::meaning=temperature
ts::unit=K
ts::description='VTI sensor (15 Tesla magnet)\ncalibration: X28611'
ts::type=float
ts::t=2016-08-23 14:55:44.655862
ts:status=0
ts:status:type=int
ts:status:t=2016-08-23 14:55:44.655946
ts:target=10.0
ts:target:writable=1
ts:target:unit=K
ts:target:type=float
ts:target:t=2016-08-23 14:55:44.655959
ts:ramp=0.0
ts:ramp:writable=1
ts:ramp:unit=K/min
ts:ramp:type=float
ts:ramp:t=2016-08-23 14:55:44.655972
ts:use_ramp=0
ts:use_ramp:type=int
ts:use_ramp:t=2016-08-23 14:55:44.655984
ts:set_point=10.0
ts:set_point:unit=K
ts:set_point:type=float
ts:set_point:t=2016-08-23 14:55:44.655995
ts:heater_power=0.154
ts:heater_power:unit=W
ts:heater_power:type=float
ts:heater_power:t=2016-08-23 14:55:44.656006
ts:raw_sensor=1876.3
ts:raw_sensor:unit=Ohm
ts:raw_sensor:type=float
ts:raw_sensor:t=2016-08-23 14:55:44.656018
mf=5.13
mf::meaning=magnetic_field
mf::unit=T
mf::description=magnetic field (15 Tesla magnet)
mf::type=float
mf::t=2016-08-23 14:55:44.656032
mf:status=0
mf:status:type=int
mf:status:t=2016-08-23 14:55:44.656044
mf:target=12.0
mf:target:writable=1
mf:target:unit=T
mf:target:type=float
mf:target:t=2016-08-23 14:55:44.658749
mf:ramp=0.4
mf:ramp:writable=1
mf:ramp:unit=T/min
mf:ramp:type=float
mf:ramp:t=2016-08-23 14:55:44.656066
mf:set_point=5.13
mf:set_point:unit=T
mf:set_point:type=float
mf:set_point:t=2016-08-23 14:55:44.656077
mf:persistent_mode=0
mf:persistent_mode:type=int
mf:persistent_mode:t=2016-08-23 14:55:44.656088
mf:switch_heater=1
mf:switch_heater:type=int
mf:switch_heater:t=2016-08-23 14:55:44.656099
tc1=2.23
tc1::unit=K
tc1::description='top coil (15 Tesla magnet)\ncalibration: X30906'
tc1::type=float
tc1::t=2016-08-23 14:55:44.656112
tc1:status=0
tc1:status:type=int
tc1:status:t=2016-08-23 14:55:44.656123
tc1:raw_sensor=5434.0
tc1:raw_sensor:unit=Ohm
tc1:raw_sensor:type=float
tc1:raw_sensor:t=2016-08-23 14:55:44.656134
tc2=2.311
tc2::unit=K
tc2::description='bottom coil (15 Tesla magnet)\ncalibration: C103'
tc2::type=float
tc2::t=2016-08-23 14:55:44.656147
tc2:status=0
tc2:status:type=int
tc2:status:t=2016-08-23 14:55:44.656159
tc2:raw_sensor=4834.5
tc2:raw_sensor:unit=Ohm
tc2:raw_sensor:type=float
tc2:raw_sensor:t=2016-08-23 14:55:44.656169
label='Cryomagnet MX15; Ramping'
label::writable=1
label::type=string
label::t=2016-08-23 14:55:44.656183
.:reply_items=t
.:reply_items:writable=1
.:reply_items:type=string
.:reply_items:t=2016-08-23 14:55:44.659617
.:compact_output=0
.:compact_output:writable=1
.:compact_output:type=int
.:compact_output:t=2016-08-23 14:55:44.656219
The last device '.' is a dummy device to hold the parameters of a client connection. Changing these parameters must not affect other client connections. The experimental parameter compact_output is for compressing the result of wildcard requests: unchanged device and parameter names are omitted.
> :compact_output=1
.:compact_output=1
> *:*:*
ts=9.887
::meaning=temperature
::unit=K
::description='VTI sensor (15 Tesla magnet)\ncalibration: X28611'
::type=float
::t=2016-08-23 15:04:55.180514
:status=0
::type=int
::t=2016-08-23 15:04:55.180587
:target=10.0
::writable=1
::unit=K
::type=float
::t=2016-08-23 15:04:55.180594
:ramp=0.0
::writable=1
::unit=K/min
::type=float
::t=2016-08-23 15:04:55.180599
:use_ramp=0
::type=int
::t=2016-08-23 15:04:55.180604
:set_point=10.0
::unit=K
::type=float
::t=2016-08-23 15:04:55.180609
:heater_power=0.154
::unit=W
::type=float
::t=2016-08-23 15:04:55.180615
:raw_sensor=1876.3
::unit=Ohm
::type=float
::t=2016-08-23 15:04:55.180620
mf=5.13
::meaning=magnetic_field
::unit=T
::description=magnetic field (15 Tesla magnet)
::type=float
::t=2016-08-23 15:04:55.180626
:status=0
::type=int
::t=2016-08-23 15:04:55.180632
:target=14.9
::writable=1
::unit=T
::type=float
::t=2016-08-23 15:04:55.180637
:ramp=0.4
::writable=1
::unit=T/min
::type=float
::t=2016-08-23 15:04:55.180642
:set_point=5.13
::unit=T
...