MercuryIPS configuration¶
The MercuryiPS is a intelligent superconducting magnet power supply with on-board temperature sensor for diagnostic monitoring of the magnet temperature.
The MercuryiPS
controller class (bliss.controllers.powersupply.mercutyips
) provides:
1 SoftAxis (pseudo-axes):
- Output field setpoint (T) using a ramp rate
6 Counters:
-
Set_point_field (tag: set_point_field)
-
Power_supply_field (tag: power_supply_field)
-
Sweep_rate_field (tag: ramp_rate)
-
Nitrogen_level (tag: nitrogen_level)
-
Helium_level (tag: helium_level)
-
Magnet_field (tag: magnet_field)
Configuration example (yml)¶
- class: MercuryiPSController
module: powersupply.mercuryips
plugin: generic
name: ipsox8tid12 # ulmag7tps
tcp:
url: ipsox8tid12.esrf.fr:7020 # ipsoxulmag7tid12.esrf.fr:7020
counters:
- name : set_point_field
tag: set_point_field
- name : power_supply_field
tag: power_supply_field
- name : sweep_rate_field
tag: ramp_rate
- name: nitrogen_level
tag: nitrogen_level
- name : helium_level
tag: helium_level
- name: magnet_field
tag: magnet_field
field_axis:
- name: field
tolerance: 0.001
steps_per_unit: 1
max_field: 8
ramp_rate: 3
heater:
- switching_time: 16
Presentation of the MercuryiPS controller¶
Display information about the controller by typing its name in the shell:
MERCURY [1]: ipsox8tid12
Gathering information from {'url': 'ipsox8tid12.esrf.fr:7020'}:
Out [1]: Manufacturer = OXFORD INSTRUMENTS
Instrument type = MERCURY IPS
Serial number = 160650100
Firmware version = 2.5.05.000
Status : <reserved>
Activity : clamp
Set point field : 0.0
Power supply field : 0.0
Ramp rate : 3.0
Nitrogen level : 4.4501
Helium level : 37.0
Magnet field : 0.0001
Heater : OFF
Persistent mode : ON
Display the soft axis position:
MERCURY [2]: wm(field)
field[T]
-------- ----------
User
High 8.000
Current 0.000
Low -8.000
Offset 0.000
Dial
High 8.000
Current 0.000
Low -8.000
Set the output field to a target value (setpoint) with:
MERCURY [3]: mv(field,0.1)
Moving field from 0.000 to 0.100
The device will ramp the field point up to the setpoint value at a given ramp rate (T/mn).
The .ramp_rate
property sets or reads the ramping speed value.
MERCURY [4]: ipsox8tid12.ramp_rate = 2
MERCURY [5]: ipsox8tid12.ramp_rate
Out [5]: 2.0
The .persistent_mode
property sets and reads the persistent mode corresponding to the supra conducting mode.
MERCURY [6]: ipsox8tid12.persistent_mode='on'
MERCURY [7]: ipsox8tid12.persistent_mode
Out [7]: 'ON'
The .activity
property reads the state output and also allows to clamp
it when it is unused.
MERCURY [8]: ipsox8tid12.activity
Out [8]: 'hold'
MERCURY [11]: ipsox8tid12.activity='clamp'
MERCURY [12]: ipsox8tid12.activity
Out [12]: 'clamp'
Scanning with the MercuryiPS controller¶
The object is exported in the session using the counter_name
and axis_name
defined in the YML configuration file.
MERCURY [13]: ipsox8tid12.counters
Out [13]: Namespace containing:
.set_point_field
.power_supply_field
.sweep_rate_field
.nitrogen_level
.helium_level
.magnet_field
Between two points of the scan, the output voltage will be ramped using the actual ramprate
.
During a scan, the MercuryiPS controller will count on all counters.
MERCURY [14]: ascan(field,0,0.4,4,1,ipsox8tid12)
WARNING: scan data are currently saved under /tmp, where files are volatile.
Wed Nov 30 10:52:11 2022: Scan(number=2, name=ascan, path=/tmp/scans/mercury/data.h5)
| timer | axis | ipsox8tid12 | ipsox8tid12 | ipsox8tid12 | ipsox8tid12 |ipsox8tid12 |ipsox8tid12
# | dt[s] | field[T] |set_point_field|power_supply_field|sweep_rate_field|nitrogen_level|helium_level|magnet_field
------------|------------|------------|---------------|------------------|----------------|--------------|------------|------------
0 | 0.00000 | 0.00000 | 0.00000 | 0.00000 | 3.00000 | 4.22600 | 37.0000 | 0.00000
1 | 23.6121 | 0.100000 | 0.100000 | 0.100000 | 3.00000 | 4.24200 | 37.0000 | 0.100000
2 | 46.9967 | 0.200200 | 0.200000 | 0.200200 | 3.00000 | 4.43410 | 37.0000 | 0.200200
3 | 71.0541 | 0.299900 | 0.300000 | 0.299900 | 3.00000 | 4.45010 | 37.0000 | 0.299900
4 | 94.9727 | 0.399900 | 0.400000 | 0.399900 | 3.00000 | 4.33810 | 37.0000 | 0.399900
Took 0:01:37.768289[s]
Out [15]: Scan(number=2, name=ascan, path=/tmp/scans/mercury/data.h5)
Run a standard hysteresis single way loop (simple scan):¶
hyster(start_pos, end_pos, nb_pts, tint, power_suplly_obj='ipsox8tid12', motor_name='field')
hyster
scan uses counters which do not belong to the power supply, so they need defining in the bliss session script:
from bliss import setup_globals
def hyster(start_pos, end_pos, nb_pts, tint, power_suplly_obj= 'ipsox8tid12', motor_name='field'):
""" Do a hysteresis measurement """
power_supply = getattr(setup_globals, power_suplly_obj)
ascan = getattr(setup_globals, "ascan")
motor = getattr(setup_globals, motor_name)
power_supply.persistent_mode = 'off'
ascan(motor, start_pos, end_pos, nb_pts, tint)
power_supply.persistent_mode = 'on'