46 self.log.debug(f
"I was configured! See? {self.config=}")
47 fsm = properties.TextVector(name=
'fsm')
48 fsm.add_element(DefText(name=
'state', _value=StateCodes.INITIALIZED.name))
49 self.add_property(fsm)
51 sv = properties.SwitchVector(
53 rule=constants.SwitchRule.ONE_OF_MANY,
54 perm=constants.PropertyPerm.READ_WRITE,
56 sv.add_element(DefSwitch(name=
"idle", _value=constants.SwitchState.ON))
57 sv.add_element(DefSwitch(name=
"fpm", _value=constants.SwitchState.OFF))
58 sv.add_element(DefSwitch(name=
"psf", _value=constants.SwitchState.OFF))
61 nv = properties.NumberVector(name=
'measurement')
62 nv.add_element(DefNumber(
63 name=
'counter', label=
'Loop counter', format=
'%i',
64 min=0, max=2**32-1, step=1, _value=0
66 nv.add_element(DefNumber(
67 name=
'x', label=
'X shift', format=
'%3.3f',
68 min=-150.0, max=150.0, step=0.01, _value=0
70 nv.add_element(DefNumber(
71 name=
'y', label=
'Y shift', format=
'%3.3f',
72 min=-150.0, max=150.0, step=0.01, _value=0
76 nv = properties.NumberVector(name=
'ref_x')
77 nv.add_element(DefNumber(
78 name=
'current', label=
'X ref', format=
'%3.3f',
79 min=-150.0, max=150.0, step=0.01, _value=0
81 nv.add_element(DefNumber(
82 name=
'target', label=
'X ref', format=
'%3.3f',
83 min=-150.0, max=150.0, step=0.01, _value=0
87 nv = properties.NumberVector(name=
'ref_y')
88 nv.add_element(DefNumber(
89 name=
'current', label=
'Y ref', format=
'%3.3f',
90 min=-150.0, max=150.0, step=0.01, _value=0
92 nv.add_element(DefNumber(
93 name=
'target', label=
'Y ref', format=
'%3.3f',
94 min=-150.0, max=150.0, step=0.01, _value=0
98 nv = properties.NumberVector(name=
'n_avg')
99 nv.add_element(DefNumber(
100 name=
'current', label=
'Number of frames', format=
'%i',
101 min=1, max=150, step=1, _value=1
103 nv.add_element(DefNumber(
104 name=
'target', label=
'Number of frames', format=
'%i',
105 min=1, max=150, step=1, _value=1
109 self.client.get_properties(
'fwfpm')
112 self.log.info(
"Found camera: {:s}".format(self.
config.camera.shmim))
113 self.
camera = XCam(self.
config.camera.shmim, pixel_size=6.0/21.0, use_hcipy=
True)
120 self.properties[
'fsm'][
'state'] = StateCodes.READY.name
121 self.update_property(self.properties[
'fsm'])
131 target_list = [
'idle',
'psf',
'fpm']
132 for key
in target_list:
133 if existing_property[key] == constants.SwitchState.ON:
136 if current_state
not in new_message:
138 for key
in target_list:
139 existing_property[key] = constants.SwitchState.OFF
140 if key
in new_message:
141 existing_property[key] = new_message[key]
145 self.properties[
'fsm'][
'state'] = StateCodes.READY.name
148 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
150 self.
_state = States.CLOSED_LOOP
151 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
153 self.update_property(existing_property)
154 self.update_property(self.properties[
'fsm'])
157 if 'toggle' in new_message
and new_message[
'toggle']
is constants.SwitchState.ON:
158 print(
"switch to closed-loop")
159 existing_property[
'toggle'] = constants.SwitchState.ON
160 self.
_state = States.CLOSED_LOOP
161 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
163 if 'toggle' in new_message
and new_message[
'toggle']
is constants.SwitchState.OFF:
164 print(
"switch to IDLE")
165 existing_property[
'toggle'] = constants.SwitchState.OFF
167 self.properties[
'fsm'][
'state'] = StateCodes.READY.name
169 self.update_property(existing_property)
170 self.update_property(self.properties[
'fsm'])