scan gets stuck for timeout on metadata
I got a timeout when scan try to collect metadata on transfocator (reason: wago was disconnected). To me, if metadata cannot be fully collected, that should not block the scan. All the data of the scan was there and correct, but scan was stuck at the end. There should be somehow a try..except around metadata and let scan ending with a warning. Error message was:
EH3 [26]: last_error
Out [26]: Traceback (most recent call last):
File "/users/blissadm/local/bliss.git/bliss/scanning/scan_meta.py", line 95, in to_dict
values = values(scan)
File "/users/blissadm/local/bliss.git/bliss/controllers/transfocator.py", line 226, in <lambda> lambda _: {self.name: {**self.status_dict(), "@NX_class": "NXcollection"}}, File "/users/blissadm/local/bliss.git/bliss/controllers/transfocator.py", line 319, in status_dict value = self.pos_read() File "/users/blissadm/local/bliss.git/bliss/controllers/transfocator.py", line 258, in pos_read state = list(grouped(self.wago.get("stat"), 2)) File "/users/blissadm/local/bliss.git/bliss/controllers/wago/wago.py", line 1253, in get self.update_read_table() File "/users/blissadm/local/bliss.git/bliss/controllers/wago/wago.py", line 1233, in update_read_table digi_in_reading = self.client_read_coils(0, total_digi_in) File "/users/blissadm/local/bliss.git/bliss/controllers/wago/wago.py", line 1887, in client_read_coils return self.client.read_coils(*args, **kwargs) File "/users/blissadm/local/bliss.git/bliss/comm/modbus.py", line 318, in rfunc return fu(self, *args, **kwargs) File "/users/blissadm/local/bliss.git/bliss/comm/modbus.py", line 494, in read_coils 0x01, address, nb_coils, struct_format, timeout_errmsg, timeout File "/users/blissadm/local/bliss.git/bliss/comm/modbus.py", line 579, in _read read_values = trans.get() File "/users/blissadm/local/bliss.git/bliss/comm/modbus.py", line 376, in get return self._queue.get() File "src/gevent/queue.py", line 329, in gevent._queue.Queue.get File "src/gevent/queue.py", line 344, in gevent._queue.Queue.get File "src/gevent/queue.py", line 321, in gevent._queue.Queue.__get_or_peek File "src/gevent/_waiter.py", line 151, in gevent.__waiter.Waiter.get File "src/gevent/_greenlet_primitives.py", line 60, in gevent.__greenlet_primitives.SwitchOutGreenletWithLoop.switch File "src/gevent/_greenlet_primitives.py", line 60, in gevent.__greenlet_primitives.SwitchOutGreenletWithLoop.switch File "src/gevent/_greenlet_primitives.py", line 64, in gevent.__greenlet_primitives.SwitchOutGreenletWithLoop.switch File "src/gevent/__greenlet_primitives.pxd", line 35, in gevent.__greenlet_primitives._greenlet_switch bliss.comm.modbus.ModbusTimeout: timeout on read_coils tcp (160.103.35.141, 502) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/users/blissadm/local/bliss.git/bliss/common/cleanup.py", line 252, in capture yield File "/users/blissadm/local/bliss.git/bliss/scanning/scan.py", line 1452, in run self._update_scan_info_with_user_scan_meta() File "/users/blissadm/local/bliss.git/bliss/scanning/scan.py", line 1280, in _update_scan_info_with_user_scan_meta deep_update(self._scan_info, self.user_scan_meta.to_dict(self)) File "/users/blissadm/local/bliss.git/bliss/scanning/scan_meta.py", line 102, in to_dict raise RuntimeError(err_msg) from e RuntimeError: Invalid field 'tfoh1' in category 'INSTRUMENT' of user scan metadata (timeout on read_coils tcp (160.103.35.141, 502))
Edited by Matias Guijarro