zaber-motion 7.13.0__py3-none-win32.whl → 7.15.0__py3-none-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. zaber_motion/__init__.py +103 -103
  2. zaber_motion/ascii/__init__.py +73 -73
  3. zaber_motion/ascii/all_axes.py +352 -352
  4. zaber_motion/ascii/axis.py +1673 -1673
  5. zaber_motion/ascii/axis_group.py +391 -391
  6. zaber_motion/ascii/axis_settings.py +752 -752
  7. zaber_motion/ascii/connection.py +1174 -1174
  8. zaber_motion/ascii/device.py +908 -908
  9. zaber_motion/ascii/device_io.py +1170 -1170
  10. zaber_motion/ascii/device_settings.py +735 -735
  11. zaber_motion/ascii/lockstep.py +1184 -1184
  12. zaber_motion/ascii/oscilloscope.py +635 -635
  13. zaber_motion/ascii/oscilloscope_data.py +240 -240
  14. zaber_motion/ascii/pvt.py +105 -105
  15. zaber_motion/ascii/pvt_buffer.py +146 -146
  16. zaber_motion/ascii/pvt_io.py +630 -630
  17. zaber_motion/ascii/pvt_sequence.py +1530 -1530
  18. zaber_motion/ascii/servo_tuner.py +637 -637
  19. zaber_motion/ascii/setting_constants.py +1755 -1755
  20. zaber_motion/ascii/storage.py +905 -905
  21. zaber_motion/ascii/stream.py +2182 -2182
  22. zaber_motion/ascii/stream_buffer.py +101 -101
  23. zaber_motion/ascii/stream_io.py +700 -700
  24. zaber_motion/ascii/streams.py +105 -105
  25. zaber_motion/ascii/transport.py +202 -202
  26. zaber_motion/ascii/trigger.py +886 -886
  27. zaber_motion/ascii/triggers.py +241 -241
  28. zaber_motion/ascii/warning_flags.py +178 -178
  29. zaber_motion/ascii/warnings.py +152 -152
  30. zaber_motion/async_utils.py +46 -46
  31. zaber_motion/binary/__init__.py +14 -14
  32. zaber_motion/binary/connection.py +648 -648
  33. zaber_motion/binary/device.py +924 -924
  34. zaber_motion/binary/device_settings.py +121 -121
  35. zaber_motion/bindings.py +50 -50
  36. zaber_motion/call.py +198 -198
  37. zaber_motion/convert_exception.py +138 -138
  38. zaber_motion/dto/__init__.py +11 -11
  39. zaber_motion/dto/ascii/__init__.py +46 -46
  40. zaber_motion/dto/ascii/alert_event.py +110 -110
  41. zaber_motion/dto/ascii/axis_identity.py +134 -134
  42. zaber_motion/dto/ascii/axis_type.py +14 -14
  43. zaber_motion/dto/ascii/can_set_state_axis_response.py +69 -69
  44. zaber_motion/dto/ascii/can_set_state_device_response.py +75 -75
  45. zaber_motion/dto/ascii/conversion_factor.py +81 -81
  46. zaber_motion/dto/ascii/device_identity.py +136 -136
  47. zaber_motion/dto/ascii/device_io_info.py +108 -108
  48. zaber_motion/dto/ascii/digital_output_action.py +13 -13
  49. zaber_motion/dto/ascii/get_axis_setting.py +64 -64
  50. zaber_motion/dto/ascii/get_axis_setting_result.py +81 -81
  51. zaber_motion/dto/ascii/get_setting.py +88 -88
  52. zaber_motion/dto/ascii/get_setting_result.py +87 -87
  53. zaber_motion/dto/ascii/io_port_label.py +84 -84
  54. zaber_motion/dto/ascii/io_port_type.py +14 -14
  55. zaber_motion/dto/ascii/lockstep_axes.py +108 -108
  56. zaber_motion/dto/ascii/measurement_sequence.py +73 -73
  57. zaber_motion/dto/ascii/message_type.py +14 -14
  58. zaber_motion/dto/ascii/optional_measurement_sequence.py +71 -71
  59. zaber_motion/dto/ascii/oscilloscope_capture_properties.py +116 -116
  60. zaber_motion/dto/ascii/oscilloscope_data_source.py +11 -11
  61. zaber_motion/dto/ascii/paramset_info.py +92 -92
  62. zaber_motion/dto/ascii/pid_tuning.py +125 -125
  63. zaber_motion/dto/ascii/pvt_axis_definition.py +70 -70
  64. zaber_motion/dto/ascii/pvt_axis_type.py +11 -11
  65. zaber_motion/dto/ascii/pvt_csv_data.py +75 -75
  66. zaber_motion/dto/ascii/pvt_mode.py +12 -12
  67. zaber_motion/dto/ascii/pvt_sequence_data.py +99 -99
  68. zaber_motion/dto/ascii/response.py +137 -137
  69. zaber_motion/dto/ascii/servo_tuning_param.py +66 -66
  70. zaber_motion/dto/ascii/servo_tuning_paramset.py +21 -21
  71. zaber_motion/dto/ascii/set_state_axis_response.py +75 -75
  72. zaber_motion/dto/ascii/set_state_device_response.py +80 -80
  73. zaber_motion/dto/ascii/simple_tuning.py +118 -118
  74. zaber_motion/dto/ascii/simple_tuning_param_definition.py +100 -100
  75. zaber_motion/dto/ascii/stream_axis_definition.py +70 -70
  76. zaber_motion/dto/ascii/stream_axis_type.py +11 -11
  77. zaber_motion/dto/ascii/stream_mode.py +13 -13
  78. zaber_motion/dto/ascii/trigger_action.py +12 -12
  79. zaber_motion/dto/ascii/trigger_condition.py +15 -15
  80. zaber_motion/dto/ascii/trigger_enabled_state.py +68 -68
  81. zaber_motion/dto/ascii/trigger_operation.py +12 -12
  82. zaber_motion/dto/ascii/trigger_state.py +114 -114
  83. zaber_motion/dto/ascii/unknown_response_event.py +137 -137
  84. zaber_motion/dto/axis_address.py +74 -74
  85. zaber_motion/dto/binary/__init__.py +11 -11
  86. zaber_motion/dto/binary/binary_settings.py +74 -74
  87. zaber_motion/dto/binary/command_code.py +106 -106
  88. zaber_motion/dto/binary/device_identity.py +156 -156
  89. zaber_motion/dto/binary/device_type.py +12 -12
  90. zaber_motion/dto/binary/error_code.py +101 -101
  91. zaber_motion/dto/binary/message.py +91 -91
  92. zaber_motion/dto/binary/reply_code.py +16 -16
  93. zaber_motion/dto/binary/reply_only_event.py +91 -91
  94. zaber_motion/dto/binary/unknown_response_event.py +91 -91
  95. zaber_motion/dto/channel_address.py +74 -74
  96. zaber_motion/dto/device_db_source.py +66 -66
  97. zaber_motion/dto/device_db_source_type.py +11 -11
  98. zaber_motion/dto/exceptions/__init__.py +24 -24
  99. zaber_motion/dto/exceptions/binary_command_failed_exception_data.py +57 -57
  100. zaber_motion/dto/exceptions/command_failed_exception_data.py +151 -151
  101. zaber_motion/dto/exceptions/command_too_long_exception_data.py +98 -98
  102. zaber_motion/dto/exceptions/device_address_conflict_exception_data.py +63 -63
  103. zaber_motion/dto/exceptions/device_db_failed_exception_data.py +74 -74
  104. zaber_motion/dto/exceptions/device_db_inner_error.py +85 -85
  105. zaber_motion/dto/exceptions/g_code_execution_exception_data.py +75 -75
  106. zaber_motion/dto/exceptions/g_code_syntax_exception_data.py +75 -75
  107. zaber_motion/dto/exceptions/invalid_packet_exception_data.py +63 -63
  108. zaber_motion/dto/exceptions/invalid_pvt_point.py +69 -69
  109. zaber_motion/dto/exceptions/invalid_response_exception_data.py +51 -51
  110. zaber_motion/dto/exceptions/movement_failed_exception_data.py +104 -104
  111. zaber_motion/dto/exceptions/movement_interrupted_exception_data.py +104 -104
  112. zaber_motion/dto/exceptions/operation_failed_exception_data.py +104 -104
  113. zaber_motion/dto/exceptions/pvt_execution_exception_data.py +86 -86
  114. zaber_motion/dto/exceptions/pvt_movement_failed_exception_data.py +69 -69
  115. zaber_motion/dto/exceptions/pvt_movement_interrupted_exception_data.py +69 -69
  116. zaber_motion/dto/exceptions/set_device_state_exception_data.py +176 -176
  117. zaber_motion/dto/exceptions/set_peripheral_state_exception_data.py +121 -121
  118. zaber_motion/dto/exceptions/stream_execution_exception_data.py +63 -63
  119. zaber_motion/dto/exceptions/stream_movement_failed_exception_data.py +69 -69
  120. zaber_motion/dto/exceptions/stream_movement_interrupted_exception_data.py +69 -69
  121. zaber_motion/dto/firmware_version.py +91 -91
  122. zaber_motion/dto/gcode/__init__.py +9 -9
  123. zaber_motion/dto/gcode/axis_definition.py +74 -74
  124. zaber_motion/dto/gcode/axis_mapping.py +69 -69
  125. zaber_motion/dto/gcode/axis_transformation.py +79 -79
  126. zaber_motion/dto/gcode/device_definition.py +99 -99
  127. zaber_motion/dto/gcode/translate_message.py +87 -87
  128. zaber_motion/dto/gcode/translate_result.py +79 -79
  129. zaber_motion/dto/gcode/translator_config.py +84 -84
  130. zaber_motion/dto/log_output_mode.py +13 -13
  131. zaber_motion/dto/measurement.py +67 -67
  132. zaber_motion/dto/microscopy/__init__.py +6 -6
  133. zaber_motion/dto/microscopy/autofocus_status.py +57 -57
  134. zaber_motion/dto/microscopy/microscope_config.py +159 -159
  135. zaber_motion/dto/microscopy/third_party_components.py +55 -55
  136. zaber_motion/dto/microscopy/wdi_autofocus_provider_status.py +57 -57
  137. zaber_motion/dto/named_parameter.py +64 -64
  138. zaber_motion/dto/product/__init__.py +5 -5
  139. zaber_motion/dto/product/process_controller_mode.py +13 -13
  140. zaber_motion/dto/product/process_controller_source.py +72 -72
  141. zaber_motion/dto/product/process_controller_source_sensor.py +11 -11
  142. zaber_motion/dto/requests/__init__.py +256 -254
  143. zaber_motion/dto/requests/alert_event_wrapper.py +82 -82
  144. zaber_motion/dto/requests/autofocus_focus_request.py +131 -131
  145. zaber_motion/dto/requests/autofocus_get_objective_params_request.py +121 -121
  146. zaber_motion/dto/requests/autofocus_get_objective_params_response.py +56 -56
  147. zaber_motion/dto/requests/autofocus_get_status_response.py +50 -50
  148. zaber_motion/dto/requests/autofocus_set_objective_params_request.py +141 -141
  149. zaber_motion/dto/requests/axes_empty_request.py +95 -95
  150. zaber_motion/dto/requests/axes_get_setting_request.py +121 -121
  151. zaber_motion/dto/requests/axes_move_request.py +114 -114
  152. zaber_motion/dto/requests/axis_empty_request.py +79 -79
  153. zaber_motion/dto/requests/axis_move_type.py +12 -12
  154. zaber_motion/dto/requests/axis_to_string_request.py +88 -88
  155. zaber_motion/dto/requests/binary_device_detect_request.py +56 -56
  156. zaber_motion/dto/requests/binary_device_detect_response.py +57 -57
  157. zaber_motion/dto/requests/binary_device_get_setting_request.py +89 -89
  158. zaber_motion/dto/requests/binary_device_home_request.py +88 -88
  159. zaber_motion/dto/requests/binary_device_move_request.py +111 -111
  160. zaber_motion/dto/requests/binary_device_set_setting_request.py +100 -100
  161. zaber_motion/dto/requests/binary_device_stop_request.py +88 -88
  162. zaber_motion/dto/requests/binary_generic_with_units_request.py +122 -122
  163. zaber_motion/dto/requests/binary_message_collection.py +56 -56
  164. zaber_motion/dto/requests/binary_reply_only_event_wrapper.py +82 -82
  165. zaber_motion/dto/requests/bool_response.py +43 -43
  166. zaber_motion/dto/requests/can_set_state_axis_response.py +60 -60
  167. zaber_motion/dto/requests/can_set_state_request.py +100 -100
  168. zaber_motion/dto/requests/channel_on.py +96 -84
  169. zaber_motion/dto/requests/channel_set_intensity.py +90 -90
  170. zaber_motion/dto/requests/check_version_request.py +54 -54
  171. zaber_motion/dto/requests/custom_interface_close_request.py +60 -60
  172. zaber_motion/dto/requests/custom_interface_open_response.py +51 -51
  173. zaber_motion/dto/requests/custom_interface_read_request.py +51 -51
  174. zaber_motion/dto/requests/custom_interface_write_request.py +60 -60
  175. zaber_motion/dto/requests/device_cancel_all_outputs_schedule_request.py +80 -80
  176. zaber_motion/dto/requests/device_cancel_output_schedule_request.py +84 -84
  177. zaber_motion/dto/requests/device_convert_setting_request.py +116 -116
  178. zaber_motion/dto/requests/device_detect_request.py +68 -68
  179. zaber_motion/dto/requests/device_detect_response.py +57 -57
  180. zaber_motion/dto/requests/device_empty_request.py +65 -65
  181. zaber_motion/dto/requests/device_get_all_analog_io_request.py +74 -74
  182. zaber_motion/dto/requests/device_get_all_analog_io_response.py +54 -54
  183. zaber_motion/dto/requests/device_get_all_digital_io_request.py +74 -74
  184. zaber_motion/dto/requests/device_get_all_digital_io_response.py +46 -46
  185. zaber_motion/dto/requests/device_get_analog_io_request.py +88 -88
  186. zaber_motion/dto/requests/device_get_digital_io_request.py +88 -88
  187. zaber_motion/dto/requests/device_get_setting_request.py +100 -100
  188. zaber_motion/dto/requests/device_get_storage_request.py +93 -93
  189. zaber_motion/dto/requests/device_get_warnings_request.py +84 -84
  190. zaber_motion/dto/requests/device_get_warnings_response.py +51 -51
  191. zaber_motion/dto/requests/device_home_request.py +84 -84
  192. zaber_motion/dto/requests/device_identify_request.py +77 -77
  193. zaber_motion/dto/requests/device_move_request.py +177 -177
  194. zaber_motion/dto/requests/device_move_sin_request.py +140 -140
  195. zaber_motion/dto/requests/device_multi_get_setting_request.py +118 -118
  196. zaber_motion/dto/requests/device_on_all_request.py +56 -56
  197. zaber_motion/dto/requests/device_on_all_response.py +57 -57
  198. zaber_motion/dto/requests/device_restore_request.py +84 -84
  199. zaber_motion/dto/requests/device_set_all_analog_outputs_request.py +82 -82
  200. zaber_motion/dto/requests/device_set_all_analog_outputs_schedule_request.py +121 -121
  201. zaber_motion/dto/requests/device_set_all_digital_outputs_request.py +83 -83
  202. zaber_motion/dto/requests/device_set_all_digital_outputs_schedule_request.py +122 -122
  203. zaber_motion/dto/requests/device_set_analog_output_request.py +90 -90
  204. zaber_motion/dto/requests/device_set_analog_output_schedule_request.py +124 -124
  205. zaber_motion/dto/requests/device_set_digital_output_request.py +91 -91
  206. zaber_motion/dto/requests/device_set_digital_output_schedule_request.py +125 -125
  207. zaber_motion/dto/requests/device_set_lowpass_filter_request.py +102 -102
  208. zaber_motion/dto/requests/device_set_setting_bool_request.py +93 -93
  209. zaber_motion/dto/requests/device_set_setting_int_request.py +102 -102
  210. zaber_motion/dto/requests/device_set_setting_request.py +111 -111
  211. zaber_motion/dto/requests/device_set_setting_str_request.py +97 -97
  212. zaber_motion/dto/requests/device_set_storage_bool_request.py +93 -93
  213. zaber_motion/dto/requests/device_set_storage_number_request.py +99 -99
  214. zaber_motion/dto/requests/device_set_storage_request.py +102 -102
  215. zaber_motion/dto/requests/device_set_unit_conversions_request.py +108 -108
  216. zaber_motion/dto/requests/device_stop_request.py +84 -84
  217. zaber_motion/dto/requests/device_storage_list_keys_request.py +88 -88
  218. zaber_motion/dto/requests/device_storage_request.py +88 -88
  219. zaber_motion/dto/requests/device_type.py +8 -8
  220. zaber_motion/dto/requests/device_wait_until_idle_request.py +84 -84
  221. zaber_motion/dto/requests/disconnected_event.py +101 -101
  222. zaber_motion/dto/requests/double_array_response.py +54 -54
  223. zaber_motion/dto/requests/double_response.py +48 -48
  224. zaber_motion/dto/requests/driver_enable_request.py +90 -90
  225. zaber_motion/dto/requests/empty_autofocus_request.py +107 -107
  226. zaber_motion/dto/requests/empty_request.py +38 -38
  227. zaber_motion/dto/requests/errors.py +68 -68
  228. zaber_motion/dto/requests/find_device_request.py +65 -65
  229. zaber_motion/dto/requests/find_device_response.py +51 -51
  230. zaber_motion/dto/requests/forget_devices_request.py +71 -71
  231. zaber_motion/dto/requests/gateway_event.py +45 -45
  232. zaber_motion/dto/requests/gateway_request.py +45 -45
  233. zaber_motion/dto/requests/gateway_response.py +69 -69
  234. zaber_motion/dto/requests/generic_binary_request.py +107 -107
  235. zaber_motion/dto/requests/generic_command_request.py +107 -107
  236. zaber_motion/dto/requests/generic_command_response_collection.py +56 -56
  237. zaber_motion/dto/requests/get_all_io_port_labels_response.py +56 -56
  238. zaber_motion/dto/requests/get_axis_setting_results.py +56 -56
  239. zaber_motion/dto/requests/get_io_port_label_request.py +91 -91
  240. zaber_motion/dto/requests/get_setting_results.py +56 -56
  241. zaber_motion/dto/requests/get_simple_tuning_param_definition_response.py +56 -56
  242. zaber_motion/dto/requests/int_64_response.py +51 -51
  243. zaber_motion/dto/requests/int_array_response.py +57 -57
  244. zaber_motion/dto/requests/int_request.py +51 -51
  245. zaber_motion/dto/requests/int_response.py +51 -51
  246. zaber_motion/dto/requests/interface_empty_request.py +51 -51
  247. zaber_motion/dto/requests/interface_type.py +11 -11
  248. zaber_motion/dto/requests/load_paramset.py +102 -102
  249. zaber_motion/dto/requests/lockstep_disable_request.py +84 -84
  250. zaber_motion/dto/requests/lockstep_empty_request.py +79 -79
  251. zaber_motion/dto/requests/lockstep_enable_request.py +99 -99
  252. zaber_motion/dto/requests/lockstep_get_axis_numbers_response.py +57 -57
  253. zaber_motion/dto/requests/lockstep_get_request.py +91 -91
  254. zaber_motion/dto/requests/lockstep_home_request.py +84 -84
  255. zaber_motion/dto/requests/lockstep_move_request.py +163 -163
  256. zaber_motion/dto/requests/lockstep_move_sin_request.py +140 -140
  257. zaber_motion/dto/requests/lockstep_set_request.py +116 -116
  258. zaber_motion/dto/requests/lockstep_stop_request.py +84 -84
  259. zaber_motion/dto/requests/lockstep_wait_until_idle_request.py +84 -84
  260. zaber_motion/dto/requests/microscope_config_response.py +50 -50
  261. zaber_motion/dto/requests/microscope_empty_request.py +65 -65
  262. zaber_motion/dto/requests/microscope_find_request.py +63 -63
  263. zaber_motion/dto/requests/microscope_init_request.py +70 -70
  264. zaber_motion/dto/requests/microscope_trigger_camera_request.py +107 -107
  265. zaber_motion/dto/requests/objective_changer_change_request.py +119 -119
  266. zaber_motion/dto/requests/objective_changer_create_response.py +79 -79
  267. zaber_motion/dto/requests/objective_changer_get_current_response.py +51 -51
  268. zaber_motion/dto/requests/objective_changer_request.py +93 -93
  269. zaber_motion/dto/requests/objective_changer_set_request.py +116 -116
  270. zaber_motion/dto/requests/open_binary_interface_request.py +100 -100
  271. zaber_motion/dto/requests/open_interface_request.py +159 -159
  272. zaber_motion/dto/requests/open_interface_response.py +51 -51
  273. zaber_motion/dto/requests/oscilloscope_add_io_channel_request.py +91 -91
  274. zaber_motion/dto/requests/oscilloscope_add_setting_channel_request.py +88 -88
  275. zaber_motion/dto/requests/oscilloscope_data_get_request.py +63 -63
  276. zaber_motion/dto/requests/oscilloscope_data_get_sample_time_request.py +77 -77
  277. zaber_motion/dto/requests/oscilloscope_data_get_samples_response.py +54 -54
  278. zaber_motion/dto/requests/oscilloscope_data_identifier.py +51 -51
  279. zaber_motion/dto/requests/oscilloscope_read_response.py +57 -57
  280. zaber_motion/dto/requests/oscilloscope_request.py +65 -65
  281. zaber_motion/dto/requests/oscilloscope_start_request.py +79 -79
  282. zaber_motion/dto/requests/prepare_command_request.py +108 -108
  283. zaber_motion/dto/requests/process_on.py +107 -107
  284. zaber_motion/dto/requests/pvt_buffer_get_sequence_data_request.py +79 -79
  285. zaber_motion/dto/requests/pvt_csv_request.py +59 -59
  286. zaber_motion/dto/requests/pvt_generate_positions_request.py +74 -74
  287. zaber_motion/dto/requests/pvt_generate_velocities_and_times_request.py +96 -96
  288. zaber_motion/dto/requests/pvt_generate_velocities_request.py +93 -93
  289. zaber_motion/dto/requests/pvt_load_csv_request.py +45 -45
  290. zaber_motion/dto/requests/pvt_point_request.py +145 -145
  291. zaber_motion/dto/requests/pvt_points_request.py +147 -147
  292. zaber_motion/dto/requests/pvt_save_csv_request.py +74 -74
  293. zaber_motion/dto/requests/pvt_submit_sequence_data_request.py +93 -93
  294. zaber_motion/dto/requests/renumber_request.py +79 -79
  295. zaber_motion/dto/requests/response_type.py +8 -8
  296. zaber_motion/dto/requests/servo_tuning_paramset_response.py +48 -48
  297. zaber_motion/dto/requests/servo_tuning_request.py +91 -91
  298. zaber_motion/dto/requests/set_device_db_layered_sources_request.py +56 -56
  299. zaber_motion/dto/requests/set_device_db_source_request.py +63 -63
  300. zaber_motion/dto/requests/set_interface_checksum_enabled_request.py +56 -56
  301. zaber_motion/dto/requests/set_interface_timeout_request.py +65 -65
  302. zaber_motion/dto/requests/set_internal_mode_request.py +43 -43
  303. zaber_motion/dto/requests/set_io_port_label_request.py +100 -100
  304. zaber_motion/dto/requests/set_log_output_request.py +57 -57
  305. zaber_motion/dto/requests/set_process_controller_source.py +93 -93
  306. zaber_motion/dto/requests/set_servo_tuning_pid_request.py +135 -135
  307. zaber_motion/dto/requests/set_servo_tuning_request.py +116 -116
  308. zaber_motion/dto/requests/set_simple_tuning.py +174 -174
  309. zaber_motion/dto/requests/set_state_request.py +93 -93
  310. zaber_motion/dto/requests/stream_arc_request.py +199 -199
  311. zaber_motion/dto/requests/stream_buffer_erase_request.py +84 -84
  312. zaber_motion/dto/requests/stream_buffer_get_content_request.py +84 -84
  313. zaber_motion/dto/requests/stream_buffer_get_content_response.py +51 -51
  314. zaber_motion/dto/requests/stream_buffer_list.py +70 -70
  315. zaber_motion/dto/requests/stream_call_request.py +112 -112
  316. zaber_motion/dto/requests/stream_cancel_all_outputs_schedule_request.py +99 -99
  317. zaber_motion/dto/requests/stream_cancel_output_schedule_request.py +103 -103
  318. zaber_motion/dto/requests/stream_circle_request.py +155 -155
  319. zaber_motion/dto/requests/stream_empty_request.py +84 -84
  320. zaber_motion/dto/requests/stream_generic_command_batch_request.py +99 -99
  321. zaber_motion/dto/requests/stream_generic_command_request.py +93 -93
  322. zaber_motion/dto/requests/stream_get_axes_response.py +75 -75
  323. zaber_motion/dto/requests/stream_get_max_centripetal_acceleration_request.py +96 -96
  324. zaber_motion/dto/requests/stream_get_max_speed_request.py +96 -96
  325. zaber_motion/dto/requests/stream_get_max_tangential_acceleration_request.py +96 -96
  326. zaber_motion/dto/requests/stream_line_request.py +135 -135
  327. zaber_motion/dto/requests/stream_mode_response.py +60 -60
  328. zaber_motion/dto/requests/stream_segment_type.py +8 -8
  329. zaber_motion/dto/requests/stream_set_all_analog_outputs_request.py +101 -101
  330. zaber_motion/dto/requests/stream_set_all_analog_outputs_schedule_request.py +140 -140
  331. zaber_motion/dto/requests/stream_set_all_digital_outputs_request.py +102 -102
  332. zaber_motion/dto/requests/stream_set_all_digital_outputs_schedule_request.py +141 -141
  333. zaber_motion/dto/requests/stream_set_analog_output_request.py +109 -109
  334. zaber_motion/dto/requests/stream_set_analog_output_schedule_request.py +143 -143
  335. zaber_motion/dto/requests/stream_set_digital_output_request.py +110 -110
  336. zaber_motion/dto/requests/stream_set_digital_output_schedule_request.py +144 -144
  337. zaber_motion/dto/requests/stream_set_hold_request.py +89 -89
  338. zaber_motion/dto/requests/stream_set_max_centripetal_acceleration_request.py +107 -107
  339. zaber_motion/dto/requests/stream_set_max_speed_request.py +107 -107
  340. zaber_motion/dto/requests/stream_set_max_tangential_acceleration_request.py +107 -107
  341. zaber_motion/dto/requests/stream_setup_live_composite_request.py +123 -123
  342. zaber_motion/dto/requests/stream_setup_live_request.py +104 -104
  343. zaber_motion/dto/requests/stream_setup_store_arbitrary_axes_request.py +126 -126
  344. zaber_motion/dto/requests/stream_setup_store_composite_request.py +151 -151
  345. zaber_motion/dto/requests/stream_setup_store_request.py +132 -132
  346. zaber_motion/dto/requests/stream_wait_analog_input_request.py +118 -118
  347. zaber_motion/dto/requests/stream_wait_digital_input_request.py +103 -103
  348. zaber_motion/dto/requests/stream_wait_request.py +107 -107
  349. zaber_motion/dto/requests/stream_wait_until_idle_request.py +89 -89
  350. zaber_motion/dto/requests/string_array_response.py +51 -51
  351. zaber_motion/dto/requests/string_response.py +45 -45
  352. zaber_motion/dto/requests/test_event.py +45 -45
  353. zaber_motion/dto/requests/test_request.py +55 -55
  354. zaber_motion/dto/requests/test_request_complex.py +57 -0
  355. zaber_motion/dto/requests/test_response.py +45 -45
  356. zaber_motion/dto/requests/test_response_long.py +51 -51
  357. zaber_motion/dto/requests/toggle_device_db_store_request.py +50 -50
  358. zaber_motion/dto/requests/tools_list_serial_ports_response.py +51 -51
  359. zaber_motion/dto/requests/translator_create_from_device_request.py +97 -97
  360. zaber_motion/dto/requests/translator_create_live_request.py +91 -91
  361. zaber_motion/dto/requests/translator_create_request.py +62 -62
  362. zaber_motion/dto/requests/translator_create_response.py +51 -51
  363. zaber_motion/dto/requests/translator_empty_request.py +51 -51
  364. zaber_motion/dto/requests/translator_flush_live_request.py +56 -56
  365. zaber_motion/dto/requests/translator_flush_response.py +51 -51
  366. zaber_motion/dto/requests/translator_get_axis_offset_request.py +81 -81
  367. zaber_motion/dto/requests/translator_get_axis_position_request.py +72 -72
  368. zaber_motion/dto/requests/translator_set_axis_position_request.py +83 -83
  369. zaber_motion/dto/requests/translator_set_feed_rate_override_request.py +62 -62
  370. zaber_motion/dto/requests/translator_set_traverse_rate_request.py +74 -74
  371. zaber_motion/dto/requests/translator_translate_request.py +60 -60
  372. zaber_motion/dto/requests/trigger_clear_action_request.py +91 -91
  373. zaber_motion/dto/requests/trigger_empty_request.py +79 -79
  374. zaber_motion/dto/requests/trigger_enable_request.py +93 -93
  375. zaber_motion/dto/requests/trigger_enabled_states.py +56 -56
  376. zaber_motion/dto/requests/trigger_fire_at_interval_request.py +102 -102
  377. zaber_motion/dto/requests/trigger_fire_when_distance_travelled_request.py +116 -116
  378. zaber_motion/dto/requests/trigger_fire_when_io_request.py +128 -128
  379. zaber_motion/dto/requests/trigger_fire_when_request.py +88 -88
  380. zaber_motion/dto/requests/trigger_fire_when_setting_request.py +137 -137
  381. zaber_motion/dto/requests/trigger_on_fire_request.py +114 -114
  382. zaber_motion/dto/requests/trigger_on_fire_set_request.py +149 -149
  383. zaber_motion/dto/requests/trigger_on_fire_set_to_setting_request.py +149 -149
  384. zaber_motion/dto/requests/trigger_set_label_request.py +88 -88
  385. zaber_motion/dto/requests/trigger_states.py +56 -56
  386. zaber_motion/dto/requests/unit_convert_unit_request.py +71 -71
  387. zaber_motion/dto/requests/unit_get_enum_request.py +45 -45
  388. zaber_motion/dto/requests/unit_get_enum_response.py +48 -48
  389. zaber_motion/dto/requests/unit_get_symbol_request.py +48 -48
  390. zaber_motion/dto/requests/unit_get_symbol_response.py +45 -45
  391. zaber_motion/dto/requests/unknown_binary_response_event_wrapper.py +82 -82
  392. zaber_motion/dto/requests/unknown_response_event_wrapper.py +82 -82
  393. zaber_motion/dto/requests/wait_to_clear_warnings_request.py +105 -105
  394. zaber_motion/dto/requests/wait_to_respond_request.py +76 -76
  395. zaber_motion/dto/requests/wdi_generic_float_request.py +119 -0
  396. zaber_motion/dto/requests/wdi_generic_request.py +136 -136
  397. zaber_motion/dto/requests/wdi_get_status_response.py +50 -50
  398. zaber_motion/dto/rotation_direction.py +13 -13
  399. zaber_motion/dto_object.py +18 -18
  400. zaber_motion/events.py +112 -112
  401. zaber_motion/exceptions/__init__.py +87 -87
  402. zaber_motion/exceptions/bad_command_exception.py +10 -10
  403. zaber_motion/exceptions/bad_data_exception.py +10 -10
  404. zaber_motion/exceptions/binary_command_failed_exception.py +27 -27
  405. zaber_motion/exceptions/command_failed_exception.py +27 -27
  406. zaber_motion/exceptions/command_preempted_exception.py +10 -10
  407. zaber_motion/exceptions/command_too_long_exception.py +27 -27
  408. zaber_motion/exceptions/connection_closed_exception.py +10 -10
  409. zaber_motion/exceptions/connection_failed_exception.py +10 -10
  410. zaber_motion/exceptions/conversion_failed_exception.py +10 -10
  411. zaber_motion/exceptions/device_address_conflict_exception.py +27 -27
  412. zaber_motion/exceptions/device_busy_exception.py +10 -10
  413. zaber_motion/exceptions/device_db_failed_exception.py +27 -27
  414. zaber_motion/exceptions/device_detection_failed_exception.py +10 -10
  415. zaber_motion/exceptions/device_failed_exception.py +11 -11
  416. zaber_motion/exceptions/device_not_identified_exception.py +10 -10
  417. zaber_motion/exceptions/driver_disabled_exception.py +10 -10
  418. zaber_motion/exceptions/g_code_execution_exception.py +27 -27
  419. zaber_motion/exceptions/g_code_syntax_exception.py +27 -27
  420. zaber_motion/exceptions/incompatible_shared_library_exception.py +11 -11
  421. zaber_motion/exceptions/internal_error_exception.py +10 -10
  422. zaber_motion/exceptions/invalid_argument_exception.py +10 -10
  423. zaber_motion/exceptions/invalid_csv_data_exception.py +10 -10
  424. zaber_motion/exceptions/invalid_data_exception.py +10 -10
  425. zaber_motion/exceptions/invalid_operation_exception.py +10 -10
  426. zaber_motion/exceptions/invalid_packet_exception.py +27 -27
  427. zaber_motion/exceptions/invalid_park_state_exception.py +10 -10
  428. zaber_motion/exceptions/invalid_request_data_exception.py +11 -11
  429. zaber_motion/exceptions/invalid_response_exception.py +27 -27
  430. zaber_motion/exceptions/io_channel_out_of_range_exception.py +10 -10
  431. zaber_motion/exceptions/io_failed_exception.py +10 -10
  432. zaber_motion/exceptions/lockstep_enabled_exception.py +10 -10
  433. zaber_motion/exceptions/lockstep_not_enabled_exception.py +10 -10
  434. zaber_motion/exceptions/motion_lib_exception.py +18 -18
  435. zaber_motion/exceptions/movement_failed_exception.py +27 -27
  436. zaber_motion/exceptions/movement_interrupted_exception.py +27 -27
  437. zaber_motion/exceptions/no_device_found_exception.py +10 -10
  438. zaber_motion/exceptions/no_value_for_key_exception.py +10 -10
  439. zaber_motion/exceptions/not_supported_exception.py +10 -10
  440. zaber_motion/exceptions/operation_failed_exception.py +27 -27
  441. zaber_motion/exceptions/os_failed_exception.py +10 -10
  442. zaber_motion/exceptions/out_of_request_ids_exception.py +10 -10
  443. zaber_motion/exceptions/pvt_discontinuity_exception.py +10 -10
  444. zaber_motion/exceptions/pvt_execution_exception.py +27 -27
  445. zaber_motion/exceptions/pvt_mode_exception.py +10 -10
  446. zaber_motion/exceptions/pvt_movement_failed_exception.py +27 -27
  447. zaber_motion/exceptions/pvt_movement_interrupted_exception.py +27 -27
  448. zaber_motion/exceptions/pvt_sequence_generation_failed_exception.py +10 -10
  449. zaber_motion/exceptions/pvt_setup_failed_exception.py +10 -10
  450. zaber_motion/exceptions/remote_mode_exception.py +11 -11
  451. zaber_motion/exceptions/request_timeout_exception.py +10 -10
  452. zaber_motion/exceptions/serial_port_busy_exception.py +10 -10
  453. zaber_motion/exceptions/set_device_state_failed_exception.py +27 -27
  454. zaber_motion/exceptions/set_peripheral_state_failed_exception.py +27 -27
  455. zaber_motion/exceptions/setting_not_found_exception.py +10 -10
  456. zaber_motion/exceptions/stream_discontinuity_exception.py +10 -10
  457. zaber_motion/exceptions/stream_execution_exception.py +27 -27
  458. zaber_motion/exceptions/stream_mode_exception.py +10 -10
  459. zaber_motion/exceptions/stream_movement_failed_exception.py +27 -27
  460. zaber_motion/exceptions/stream_movement_interrupted_exception.py +27 -27
  461. zaber_motion/exceptions/stream_setup_failed_exception.py +10 -10
  462. zaber_motion/exceptions/timeout_exception.py +10 -10
  463. zaber_motion/exceptions/transport_already_used_exception.py +10 -10
  464. zaber_motion/exceptions/unknown_request_exception.py +10 -10
  465. zaber_motion/gcode/__init__.py +11 -11
  466. zaber_motion/gcode/offline_translator.py +401 -401
  467. zaber_motion/gcode/translator.py +424 -424
  468. zaber_motion/library.py +179 -179
  469. zaber_motion/microscopy/__init__.py +14 -14
  470. zaber_motion/microscopy/autofocus.py +645 -645
  471. zaber_motion/microscopy/camera_trigger.py +108 -108
  472. zaber_motion/microscopy/filter_changer.py +167 -167
  473. zaber_motion/microscopy/illuminator.py +163 -139
  474. zaber_motion/microscopy/illuminator_channel.py +629 -616
  475. zaber_motion/microscopy/microscope.py +315 -315
  476. zaber_motion/microscopy/objective_changer.py +403 -403
  477. zaber_motion/microscopy/wdi_autofocus_provider.py +536 -396
  478. zaber_motion/product/__init__.py +7 -7
  479. zaber_motion/product/process.py +818 -818
  480. zaber_motion/product/process_controller.py +134 -134
  481. zaber_motion/serialization.py +32 -32
  482. zaber_motion/tools.py +78 -78
  483. zaber_motion/unit_table.py +86 -86
  484. zaber_motion/units.py +206 -206
  485. zaber_motion/version.py +1 -1
  486. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/LICENSE.txt +2119 -2119
  487. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/METADATA +1 -1
  488. zaber_motion-7.15.0.dist-info/RECORD +496 -0
  489. zaber_motion_bindings/zaber-motion-core-windows-386.dll +0 -0
  490. zaber_motion-7.13.0.dist-info/RECORD +0 -494
  491. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/WHEEL +0 -0
  492. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/top_level.txt +0 -0
@@ -1,818 +1,818 @@
1
- # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
- # ============== DO NOT EDIT DIRECTLY ============== #
3
-
4
- from typing import TYPE_CHECKING, List, Optional
5
- from ..call import call, call_async, call_sync
6
-
7
- from ..units import Units, TimeUnits
8
- from ..dto import requests as dto
9
- from ..ascii.warnings import Warnings
10
- from ..dto.ascii.response import Response
11
- from ..dto.measurement import Measurement
12
- from ..ascii.axis import Axis
13
- from ..ascii.axis_settings import AxisSettings
14
- from ..ascii.storage import AxisStorage
15
- from ..dto.product.process_controller_mode import ProcessControllerMode
16
- from ..dto.product.process_controller_source import ProcessControllerSource
17
- from ..dto.ascii.set_state_axis_response import SetStateAxisResponse
18
- from ..dto.firmware_version import FirmwareVersion
19
-
20
- if TYPE_CHECKING:
21
- from .process_controller import ProcessController
22
-
23
-
24
- class Process:
25
- """
26
- Use to drive voltage for a process such as a heater, valve, Peltier device, etc.
27
- Requires at least Firmware 7.35.
28
- """
29
-
30
- @property
31
- def controller(self) -> 'ProcessController':
32
- """
33
- Controller for this process.
34
- """
35
- return self._controller
36
-
37
- @property
38
- def process_number(self) -> int:
39
- """
40
- The process number identifies the process on the controller.
41
- """
42
- return self._process_number
43
-
44
- @property
45
- def settings(self) -> AxisSettings:
46
- """
47
- Settings and properties of this process.
48
- """
49
- return self._settings
50
-
51
- @property
52
- def storage(self) -> AxisStorage:
53
- """
54
- Key-value storage of this process.
55
- """
56
- return self._storage
57
-
58
- @property
59
- def warnings(self) -> Warnings:
60
- """
61
- Warnings and faults of this process.
62
- """
63
- return self._warnings
64
-
65
- def __init__(self, controller: 'ProcessController', process_number: int):
66
- self._controller: 'ProcessController' = controller
67
- self._process_number: int = process_number
68
- self._axis: Axis = Axis(controller.device, process_number)
69
- self._settings: AxisSettings = AxisSettings(self._axis)
70
- self._storage: AxisStorage = AxisStorage(self._axis)
71
- self._warnings: Warnings = Warnings(controller.device, process_number)
72
-
73
- def enable(
74
- self,
75
- enabled: bool = True
76
- ) -> None:
77
- """
78
- Sets the enabled state of the driver.
79
-
80
- Args:
81
- enabled: If true (default) enables drive. If false disables.
82
- """
83
- request = dto.ProcessOn(
84
- interface_id=self.controller.device.connection.interface_id,
85
- device=self.controller.device.device_address,
86
- axis=self.process_number,
87
- on=enabled,
88
- )
89
- call("process-controller/enable", request)
90
-
91
- async def enable_async(
92
- self,
93
- enabled: bool = True
94
- ) -> None:
95
- """
96
- Sets the enabled state of the driver.
97
-
98
- Args:
99
- enabled: If true (default) enables drive. If false disables.
100
- """
101
- request = dto.ProcessOn(
102
- interface_id=self.controller.device.connection.interface_id,
103
- device=self.controller.device.device_address,
104
- axis=self.process_number,
105
- on=enabled,
106
- )
107
- await call_async("process-controller/enable", request)
108
-
109
- def on(
110
- self,
111
- duration: float = 0,
112
- unit: TimeUnits = Units.NATIVE
113
- ) -> None:
114
- """
115
- Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
116
-
117
- Args:
118
- duration: How long to leave the process on.
119
- unit: Units of time.
120
- """
121
- request = dto.ProcessOn(
122
- interface_id=self.controller.device.connection.interface_id,
123
- device=self.controller.device.device_address,
124
- axis=self.process_number,
125
- on=True,
126
- duration=duration,
127
- unit=unit,
128
- )
129
- call("process-controller/on", request)
130
-
131
- async def on_async(
132
- self,
133
- duration: float = 0,
134
- unit: TimeUnits = Units.NATIVE
135
- ) -> None:
136
- """
137
- Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
138
-
139
- Args:
140
- duration: How long to leave the process on.
141
- unit: Units of time.
142
- """
143
- request = dto.ProcessOn(
144
- interface_id=self.controller.device.connection.interface_id,
145
- device=self.controller.device.device_address,
146
- axis=self.process_number,
147
- on=True,
148
- duration=duration,
149
- unit=unit,
150
- )
151
- await call_async("process-controller/on", request)
152
-
153
- def off(
154
- self
155
- ) -> None:
156
- """
157
- Turns this process off.
158
- """
159
- request = dto.ProcessOn(
160
- interface_id=self.controller.device.connection.interface_id,
161
- device=self.controller.device.device_address,
162
- axis=self.process_number,
163
- on=False,
164
- )
165
- call("process-controller/on", request)
166
-
167
- async def off_async(
168
- self
169
- ) -> None:
170
- """
171
- Turns this process off.
172
- """
173
- request = dto.ProcessOn(
174
- interface_id=self.controller.device.connection.interface_id,
175
- device=self.controller.device.device_address,
176
- axis=self.process_number,
177
- on=False,
178
- )
179
- await call_async("process-controller/on", request)
180
-
181
- def set_mode(
182
- self,
183
- mode: ProcessControllerMode
184
- ) -> None:
185
- """
186
- Sets the control mode of this process.
187
-
188
- Args:
189
- mode: Mode to set this process to.
190
- """
191
- request = dto.DeviceSetSettingRequest(
192
- interface_id=self.controller.device.connection.interface_id,
193
- device=self.controller.device.device_address,
194
- axis=self.process_number,
195
- setting="process.control.mode",
196
- value=mode.value,
197
- )
198
- call("device/set_setting", request)
199
-
200
- async def set_mode_async(
201
- self,
202
- mode: ProcessControllerMode
203
- ) -> None:
204
- """
205
- Sets the control mode of this process.
206
-
207
- Args:
208
- mode: Mode to set this process to.
209
- """
210
- request = dto.DeviceSetSettingRequest(
211
- interface_id=self.controller.device.connection.interface_id,
212
- device=self.controller.device.device_address,
213
- axis=self.process_number,
214
- setting="process.control.mode",
215
- value=mode.value,
216
- )
217
- await call_async("device/set_setting", request)
218
-
219
- def get_mode(
220
- self
221
- ) -> ProcessControllerMode:
222
- """
223
- Gets the control mode of this process.
224
-
225
- Returns:
226
- Control mode.
227
- """
228
- request = dto.DeviceGetSettingRequest(
229
- interface_id=self.controller.device.connection.interface_id,
230
- device=self.controller.device.device_address,
231
- axis=self.process_number,
232
- setting="process.control.mode",
233
- )
234
- response = call(
235
- "device/get_setting",
236
- request,
237
- dto.DoubleResponse.from_binary)
238
- return ProcessControllerMode(response.value)
239
-
240
- async def get_mode_async(
241
- self
242
- ) -> ProcessControllerMode:
243
- """
244
- Gets the control mode of this process.
245
-
246
- Returns:
247
- Control mode.
248
- """
249
- request = dto.DeviceGetSettingRequest(
250
- interface_id=self.controller.device.connection.interface_id,
251
- device=self.controller.device.device_address,
252
- axis=self.process_number,
253
- setting="process.control.mode",
254
- )
255
- response = await call_async(
256
- "device/get_setting",
257
- request,
258
- dto.DoubleResponse.from_binary)
259
- return ProcessControllerMode(response.value)
260
-
261
- def get_source(
262
- self
263
- ) -> ProcessControllerSource:
264
- """
265
- Gets the source used to control this process.
266
-
267
- Returns:
268
- The source providing feedback for this process.
269
- """
270
- request = dto.AxisEmptyRequest(
271
- interface_id=self.controller.device.connection.interface_id,
272
- device=self.controller.device.device_address,
273
- axis=self.process_number,
274
- )
275
- response = call(
276
- "process_controller/get_source",
277
- request,
278
- ProcessControllerSource.from_binary)
279
- return response
280
-
281
- async def get_source_async(
282
- self
283
- ) -> ProcessControllerSource:
284
- """
285
- Gets the source used to control this process.
286
-
287
- Returns:
288
- The source providing feedback for this process.
289
- """
290
- request = dto.AxisEmptyRequest(
291
- interface_id=self.controller.device.connection.interface_id,
292
- device=self.controller.device.device_address,
293
- axis=self.process_number,
294
- )
295
- response = await call_async(
296
- "process_controller/get_source",
297
- request,
298
- ProcessControllerSource.from_binary)
299
- return response
300
-
301
- def set_source(
302
- self,
303
- source: ProcessControllerSource
304
- ) -> None:
305
- """
306
- Sets the source used to control this process.
307
-
308
- Args:
309
- source: Sets the source that should provide feedback for this process.
310
- """
311
- request = dto.SetProcessControllerSource(
312
- interface_id=self.controller.device.connection.interface_id,
313
- device=self.controller.device.device_address,
314
- axis=self.process_number,
315
- source=source,
316
- )
317
- call("process_controller/set_source", request)
318
-
319
- async def set_source_async(
320
- self,
321
- source: ProcessControllerSource
322
- ) -> None:
323
- """
324
- Sets the source used to control this process.
325
-
326
- Args:
327
- source: Sets the source that should provide feedback for this process.
328
- """
329
- request = dto.SetProcessControllerSource(
330
- interface_id=self.controller.device.connection.interface_id,
331
- device=self.controller.device.device_address,
332
- axis=self.process_number,
333
- source=source,
334
- )
335
- await call_async("process_controller/set_source", request)
336
-
337
- def get_input(
338
- self
339
- ) -> Measurement:
340
- """
341
- Gets the current value of the source used to control this process.
342
-
343
- Returns:
344
- The current value of this process's controlling source.
345
- """
346
- request = dto.AxisEmptyRequest(
347
- interface_id=self.controller.device.connection.interface_id,
348
- device=self.controller.device.device_address,
349
- axis=self.process_number,
350
- )
351
- response = call(
352
- "process_controller/get_input",
353
- request,
354
- Measurement.from_binary)
355
- return response
356
-
357
- async def get_input_async(
358
- self
359
- ) -> Measurement:
360
- """
361
- Gets the current value of the source used to control this process.
362
-
363
- Returns:
364
- The current value of this process's controlling source.
365
- """
366
- request = dto.AxisEmptyRequest(
367
- interface_id=self.controller.device.connection.interface_id,
368
- device=self.controller.device.device_address,
369
- axis=self.process_number,
370
- )
371
- response = await call_async(
372
- "process_controller/get_input",
373
- request,
374
- Measurement.from_binary)
375
- return response
376
-
377
- def bridge(
378
- self
379
- ) -> None:
380
- """
381
- Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
382
- """
383
- request = dto.ProcessOn(
384
- interface_id=self.controller.device.connection.interface_id,
385
- device=self.controller.device.device_address,
386
- axis=self.process_number,
387
- on=True,
388
- )
389
- call("process_controller/bridge", request)
390
-
391
- async def bridge_async(
392
- self
393
- ) -> None:
394
- """
395
- Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
396
- """
397
- request = dto.ProcessOn(
398
- interface_id=self.controller.device.connection.interface_id,
399
- device=self.controller.device.device_address,
400
- axis=self.process_number,
401
- on=True,
402
- )
403
- await call_async("process_controller/bridge", request)
404
-
405
- def unbridge(
406
- self
407
- ) -> None:
408
- """
409
- Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
410
- This method is only callable on axis 1 and 3.
411
- """
412
- request = dto.ProcessOn(
413
- interface_id=self.controller.device.connection.interface_id,
414
- device=self.controller.device.device_address,
415
- axis=self.process_number,
416
- on=False,
417
- )
418
- call("process_controller/bridge", request)
419
-
420
- async def unbridge_async(
421
- self
422
- ) -> None:
423
- """
424
- Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
425
- This method is only callable on axis 1 and 3.
426
- """
427
- request = dto.ProcessOn(
428
- interface_id=self.controller.device.connection.interface_id,
429
- device=self.controller.device.device_address,
430
- axis=self.process_number,
431
- on=False,
432
- )
433
- await call_async("process_controller/bridge", request)
434
-
435
- def is_bridge(
436
- self
437
- ) -> bool:
438
- """
439
- Detects if the given process is in bridging mode.
440
-
441
- Returns:
442
- Whether this process is bridged with its neighbor.
443
- """
444
- request = dto.AxisEmptyRequest(
445
- interface_id=self.controller.device.connection.interface_id,
446
- device=self.controller.device.device_address,
447
- axis=self.process_number,
448
- )
449
- response = call(
450
- "process_controller/is_bridge",
451
- request,
452
- dto.BoolResponse.from_binary)
453
- return response.value
454
-
455
- async def is_bridge_async(
456
- self
457
- ) -> bool:
458
- """
459
- Detects if the given process is in bridging mode.
460
-
461
- Returns:
462
- Whether this process is bridged with its neighbor.
463
- """
464
- request = dto.AxisEmptyRequest(
465
- interface_id=self.controller.device.connection.interface_id,
466
- device=self.controller.device.device_address,
467
- axis=self.process_number,
468
- )
469
- response = await call_async(
470
- "process_controller/is_bridge",
471
- request,
472
- dto.BoolResponse.from_binary)
473
- return response.value
474
-
475
- def generic_command(
476
- self,
477
- command: str,
478
- check_errors: bool = True,
479
- timeout: int = 0
480
- ) -> Response:
481
- """
482
- Sends a generic ASCII command to this process' underlying axis.
483
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
484
-
485
- Args:
486
- command: Command and its parameters.
487
- check_errors: Controls whether to throw an exception when the device rejects the command.
488
- timeout: The timeout, in milliseconds, for a device to respond to the command.
489
- Overrides the connection default request timeout.
490
-
491
- Returns:
492
- A response to the command.
493
- """
494
- request = dto.GenericCommandRequest(
495
- interface_id=self.controller.device.connection.interface_id,
496
- device=self.controller.device.device_address,
497
- axis=self.process_number,
498
- command=command,
499
- check_errors=check_errors,
500
- timeout=timeout,
501
- )
502
- response = call(
503
- "interface/generic_command",
504
- request,
505
- Response.from_binary)
506
- return response
507
-
508
- async def generic_command_async(
509
- self,
510
- command: str,
511
- check_errors: bool = True,
512
- timeout: int = 0
513
- ) -> Response:
514
- """
515
- Sends a generic ASCII command to this process' underlying axis.
516
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
517
-
518
- Args:
519
- command: Command and its parameters.
520
- check_errors: Controls whether to throw an exception when the device rejects the command.
521
- timeout: The timeout, in milliseconds, for a device to respond to the command.
522
- Overrides the connection default request timeout.
523
-
524
- Returns:
525
- A response to the command.
526
- """
527
- request = dto.GenericCommandRequest(
528
- interface_id=self.controller.device.connection.interface_id,
529
- device=self.controller.device.device_address,
530
- axis=self.process_number,
531
- command=command,
532
- check_errors=check_errors,
533
- timeout=timeout,
534
- )
535
- response = await call_async(
536
- "interface/generic_command",
537
- request,
538
- Response.from_binary)
539
- return response
540
-
541
- def generic_command_multi_response(
542
- self,
543
- command: str,
544
- check_errors: bool = True,
545
- timeout: int = 0
546
- ) -> List[Response]:
547
- """
548
- Sends a generic ASCII command to this process and expect multiple responses.
549
- Responses are returned in order of arrival.
550
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
551
-
552
- Args:
553
- command: Command and its parameters.
554
- check_errors: Controls whether to throw an exception when a device rejects the command.
555
- timeout: The timeout, in milliseconds, for a device to respond to the command.
556
- Overrides the connection default request timeout.
557
-
558
- Returns:
559
- All responses to the command.
560
- """
561
- request = dto.GenericCommandRequest(
562
- interface_id=self.controller.device.connection.interface_id,
563
- device=self.controller.device.device_address,
564
- axis=self.process_number,
565
- command=command,
566
- check_errors=check_errors,
567
- timeout=timeout,
568
- )
569
- response = call(
570
- "interface/generic_command_multi_response",
571
- request,
572
- dto.GenericCommandResponseCollection.from_binary)
573
- return response.responses
574
-
575
- async def generic_command_multi_response_async(
576
- self,
577
- command: str,
578
- check_errors: bool = True,
579
- timeout: int = 0
580
- ) -> List[Response]:
581
- """
582
- Sends a generic ASCII command to this process and expect multiple responses.
583
- Responses are returned in order of arrival.
584
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
585
-
586
- Args:
587
- command: Command and its parameters.
588
- check_errors: Controls whether to throw an exception when a device rejects the command.
589
- timeout: The timeout, in milliseconds, for a device to respond to the command.
590
- Overrides the connection default request timeout.
591
-
592
- Returns:
593
- All responses to the command.
594
- """
595
- request = dto.GenericCommandRequest(
596
- interface_id=self.controller.device.connection.interface_id,
597
- device=self.controller.device.device_address,
598
- axis=self.process_number,
599
- command=command,
600
- check_errors=check_errors,
601
- timeout=timeout,
602
- )
603
- response = await call_async(
604
- "interface/generic_command_multi_response",
605
- request,
606
- dto.GenericCommandResponseCollection.from_binary)
607
- return response.responses
608
-
609
- def generic_command_no_response(
610
- self,
611
- command: str
612
- ) -> None:
613
- """
614
- Sends a generic ASCII command to this process without expecting a response and without adding a message ID
615
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
616
-
617
- Args:
618
- command: Command and its parameters.
619
- """
620
- request = dto.GenericCommandRequest(
621
- interface_id=self.controller.device.connection.interface_id,
622
- device=self.controller.device.device_address,
623
- axis=self.process_number,
624
- command=command,
625
- )
626
- call("interface/generic_command_no_response", request)
627
-
628
- async def generic_command_no_response_async(
629
- self,
630
- command: str
631
- ) -> None:
632
- """
633
- Sends a generic ASCII command to this process without expecting a response and without adding a message ID
634
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
635
-
636
- Args:
637
- command: Command and its parameters.
638
- """
639
- request = dto.GenericCommandRequest(
640
- interface_id=self.controller.device.connection.interface_id,
641
- device=self.controller.device.device_address,
642
- axis=self.process_number,
643
- command=command,
644
- )
645
- await call_async("interface/generic_command_no_response", request)
646
-
647
- def get_state(
648
- self
649
- ) -> str:
650
- """
651
- Returns a serialization of the current process state that can be saved and reapplied.
652
-
653
- Returns:
654
- A serialization of the current state of the process.
655
- """
656
- request = dto.AxisEmptyRequest(
657
- interface_id=self.controller.device.connection.interface_id,
658
- device=self.controller.device.device_address,
659
- axis=self.process_number,
660
- )
661
- response = call(
662
- "device/get_state",
663
- request,
664
- dto.StringResponse.from_binary)
665
- return response.value
666
-
667
- async def get_state_async(
668
- self
669
- ) -> str:
670
- """
671
- Returns a serialization of the current process state that can be saved and reapplied.
672
-
673
- Returns:
674
- A serialization of the current state of the process.
675
- """
676
- request = dto.AxisEmptyRequest(
677
- interface_id=self.controller.device.connection.interface_id,
678
- device=self.controller.device.device_address,
679
- axis=self.process_number,
680
- )
681
- response = await call_async(
682
- "device/get_state",
683
- request,
684
- dto.StringResponse.from_binary)
685
- return response.value
686
-
687
- def set_state(
688
- self,
689
- state: str
690
- ) -> SetStateAxisResponse:
691
- """
692
- Applies a saved state to this process.
693
-
694
- Args:
695
- state: The state object to apply to this process.
696
-
697
- Returns:
698
- Reports of any issues that were handled, but caused the state to not be exactly restored.
699
- """
700
- request = dto.SetStateRequest(
701
- interface_id=self.controller.device.connection.interface_id,
702
- device=self.controller.device.device_address,
703
- axis=self.process_number,
704
- state=state,
705
- )
706
- response = call(
707
- "device/set_axis_state",
708
- request,
709
- SetStateAxisResponse.from_binary)
710
- return response
711
-
712
- async def set_state_async(
713
- self,
714
- state: str
715
- ) -> SetStateAxisResponse:
716
- """
717
- Applies a saved state to this process.
718
-
719
- Args:
720
- state: The state object to apply to this process.
721
-
722
- Returns:
723
- Reports of any issues that were handled, but caused the state to not be exactly restored.
724
- """
725
- request = dto.SetStateRequest(
726
- interface_id=self.controller.device.connection.interface_id,
727
- device=self.controller.device.device_address,
728
- axis=self.process_number,
729
- state=state,
730
- )
731
- response = await call_async(
732
- "device/set_axis_state",
733
- request,
734
- SetStateAxisResponse.from_binary)
735
- return response
736
-
737
- def can_set_state(
738
- self,
739
- state: str,
740
- firmware_version: Optional[FirmwareVersion] = None
741
- ) -> Optional[str]:
742
- """
743
- Checks if a state can be applied to this process.
744
- This only covers exceptions that can be determined statically such as mismatches of ID or version,
745
- the process of applying the state can still fail when running.
746
-
747
- Args:
748
- state: The state object to check against.
749
- firmware_version: The firmware version of the device to apply the state to.
750
- Use this to ensure the state will still be compatible after an update.
751
-
752
- Returns:
753
- An explanation of why this state cannot be set to this process.
754
- """
755
- request = dto.CanSetStateRequest(
756
- interface_id=self.controller.device.connection.interface_id,
757
- device=self.controller.device.device_address,
758
- axis=self.process_number,
759
- state=state,
760
- firmware_version=firmware_version,
761
- )
762
- response = call(
763
- "device/can_set_axis_state",
764
- request,
765
- dto.CanSetStateAxisResponse.from_binary)
766
- return response.error
767
-
768
- async def can_set_state_async(
769
- self,
770
- state: str,
771
- firmware_version: Optional[FirmwareVersion] = None
772
- ) -> Optional[str]:
773
- """
774
- Checks if a state can be applied to this process.
775
- This only covers exceptions that can be determined statically such as mismatches of ID or version,
776
- the process of applying the state can still fail when running.
777
-
778
- Args:
779
- state: The state object to check against.
780
- firmware_version: The firmware version of the device to apply the state to.
781
- Use this to ensure the state will still be compatible after an update.
782
-
783
- Returns:
784
- An explanation of why this state cannot be set to this process.
785
- """
786
- request = dto.CanSetStateRequest(
787
- interface_id=self.controller.device.connection.interface_id,
788
- device=self.controller.device.device_address,
789
- axis=self.process_number,
790
- state=state,
791
- firmware_version=firmware_version,
792
- )
793
- response = await call_async(
794
- "device/can_set_axis_state",
795
- request,
796
- dto.CanSetStateAxisResponse.from_binary)
797
- return response.error
798
-
799
- def __repr__(
800
- self
801
- ) -> str:
802
- """
803
- Returns a string that represents the process.
804
-
805
- Returns:
806
- A string that represents the process.
807
- """
808
- request = dto.AxisToStringRequest(
809
- interface_id=self.controller.device.connection.interface_id,
810
- device=self.controller.device.device_address,
811
- axis=self.process_number,
812
- type_override="Process",
813
- )
814
- response = call_sync(
815
- "device/axis_to_string",
816
- request,
817
- dto.StringResponse.from_binary)
818
- return response.value
1
+ # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
+ # ============== DO NOT EDIT DIRECTLY ============== #
3
+
4
+ from typing import TYPE_CHECKING, List, Optional
5
+ from ..call import call, call_async, call_sync
6
+
7
+ from ..units import Units, TimeUnits
8
+ from ..dto import requests as dto
9
+ from ..ascii.warnings import Warnings
10
+ from ..dto.ascii.response import Response
11
+ from ..dto.measurement import Measurement
12
+ from ..ascii.axis import Axis
13
+ from ..ascii.axis_settings import AxisSettings
14
+ from ..ascii.storage import AxisStorage
15
+ from ..dto.product.process_controller_mode import ProcessControllerMode
16
+ from ..dto.product.process_controller_source import ProcessControllerSource
17
+ from ..dto.ascii.set_state_axis_response import SetStateAxisResponse
18
+ from ..dto.firmware_version import FirmwareVersion
19
+
20
+ if TYPE_CHECKING:
21
+ from .process_controller import ProcessController
22
+
23
+
24
+ class Process:
25
+ """
26
+ Use to drive voltage for a process such as a heater, valve, Peltier device, etc.
27
+ Requires at least Firmware 7.35.
28
+ """
29
+
30
+ @property
31
+ def controller(self) -> 'ProcessController':
32
+ """
33
+ Controller for this process.
34
+ """
35
+ return self._controller
36
+
37
+ @property
38
+ def process_number(self) -> int:
39
+ """
40
+ The process number identifies the process on the controller.
41
+ """
42
+ return self._process_number
43
+
44
+ @property
45
+ def settings(self) -> AxisSettings:
46
+ """
47
+ Settings and properties of this process.
48
+ """
49
+ return self._settings
50
+
51
+ @property
52
+ def storage(self) -> AxisStorage:
53
+ """
54
+ Key-value storage of this process.
55
+ """
56
+ return self._storage
57
+
58
+ @property
59
+ def warnings(self) -> Warnings:
60
+ """
61
+ Warnings and faults of this process.
62
+ """
63
+ return self._warnings
64
+
65
+ def __init__(self, controller: 'ProcessController', process_number: int):
66
+ self._controller: 'ProcessController' = controller
67
+ self._process_number: int = process_number
68
+ self._axis: Axis = Axis(controller.device, process_number)
69
+ self._settings: AxisSettings = AxisSettings(self._axis)
70
+ self._storage: AxisStorage = AxisStorage(self._axis)
71
+ self._warnings: Warnings = Warnings(controller.device, process_number)
72
+
73
+ def enable(
74
+ self,
75
+ enabled: bool = True
76
+ ) -> None:
77
+ """
78
+ Sets the enabled state of the driver.
79
+
80
+ Args:
81
+ enabled: If true (default) enables drive. If false disables.
82
+ """
83
+ request = dto.ProcessOn(
84
+ interface_id=self.controller.device.connection.interface_id,
85
+ device=self.controller.device.device_address,
86
+ axis=self.process_number,
87
+ on=enabled,
88
+ )
89
+ call("process-controller/enable", request)
90
+
91
+ async def enable_async(
92
+ self,
93
+ enabled: bool = True
94
+ ) -> None:
95
+ """
96
+ Sets the enabled state of the driver.
97
+
98
+ Args:
99
+ enabled: If true (default) enables drive. If false disables.
100
+ """
101
+ request = dto.ProcessOn(
102
+ interface_id=self.controller.device.connection.interface_id,
103
+ device=self.controller.device.device_address,
104
+ axis=self.process_number,
105
+ on=enabled,
106
+ )
107
+ await call_async("process-controller/enable", request)
108
+
109
+ def on(
110
+ self,
111
+ duration: float = 0,
112
+ unit: TimeUnits = Units.NATIVE
113
+ ) -> None:
114
+ """
115
+ Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
116
+
117
+ Args:
118
+ duration: How long to leave the process on.
119
+ unit: Units of time.
120
+ """
121
+ request = dto.ProcessOn(
122
+ interface_id=self.controller.device.connection.interface_id,
123
+ device=self.controller.device.device_address,
124
+ axis=self.process_number,
125
+ on=True,
126
+ duration=duration,
127
+ unit=unit,
128
+ )
129
+ call("process-controller/on", request)
130
+
131
+ async def on_async(
132
+ self,
133
+ duration: float = 0,
134
+ unit: TimeUnits = Units.NATIVE
135
+ ) -> None:
136
+ """
137
+ Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
138
+
139
+ Args:
140
+ duration: How long to leave the process on.
141
+ unit: Units of time.
142
+ """
143
+ request = dto.ProcessOn(
144
+ interface_id=self.controller.device.connection.interface_id,
145
+ device=self.controller.device.device_address,
146
+ axis=self.process_number,
147
+ on=True,
148
+ duration=duration,
149
+ unit=unit,
150
+ )
151
+ await call_async("process-controller/on", request)
152
+
153
+ def off(
154
+ self
155
+ ) -> None:
156
+ """
157
+ Turns this process off.
158
+ """
159
+ request = dto.ProcessOn(
160
+ interface_id=self.controller.device.connection.interface_id,
161
+ device=self.controller.device.device_address,
162
+ axis=self.process_number,
163
+ on=False,
164
+ )
165
+ call("process-controller/on", request)
166
+
167
+ async def off_async(
168
+ self
169
+ ) -> None:
170
+ """
171
+ Turns this process off.
172
+ """
173
+ request = dto.ProcessOn(
174
+ interface_id=self.controller.device.connection.interface_id,
175
+ device=self.controller.device.device_address,
176
+ axis=self.process_number,
177
+ on=False,
178
+ )
179
+ await call_async("process-controller/on", request)
180
+
181
+ def set_mode(
182
+ self,
183
+ mode: ProcessControllerMode
184
+ ) -> None:
185
+ """
186
+ Sets the control mode of this process.
187
+
188
+ Args:
189
+ mode: Mode to set this process to.
190
+ """
191
+ request = dto.DeviceSetSettingRequest(
192
+ interface_id=self.controller.device.connection.interface_id,
193
+ device=self.controller.device.device_address,
194
+ axis=self.process_number,
195
+ setting="process.control.mode",
196
+ value=mode.value,
197
+ )
198
+ call("device/set_setting", request)
199
+
200
+ async def set_mode_async(
201
+ self,
202
+ mode: ProcessControllerMode
203
+ ) -> None:
204
+ """
205
+ Sets the control mode of this process.
206
+
207
+ Args:
208
+ mode: Mode to set this process to.
209
+ """
210
+ request = dto.DeviceSetSettingRequest(
211
+ interface_id=self.controller.device.connection.interface_id,
212
+ device=self.controller.device.device_address,
213
+ axis=self.process_number,
214
+ setting="process.control.mode",
215
+ value=mode.value,
216
+ )
217
+ await call_async("device/set_setting", request)
218
+
219
+ def get_mode(
220
+ self
221
+ ) -> ProcessControllerMode:
222
+ """
223
+ Gets the control mode of this process.
224
+
225
+ Returns:
226
+ Control mode.
227
+ """
228
+ request = dto.DeviceGetSettingRequest(
229
+ interface_id=self.controller.device.connection.interface_id,
230
+ device=self.controller.device.device_address,
231
+ axis=self.process_number,
232
+ setting="process.control.mode",
233
+ )
234
+ response = call(
235
+ "device/get_setting",
236
+ request,
237
+ dto.DoubleResponse.from_binary)
238
+ return ProcessControllerMode(response.value)
239
+
240
+ async def get_mode_async(
241
+ self
242
+ ) -> ProcessControllerMode:
243
+ """
244
+ Gets the control mode of this process.
245
+
246
+ Returns:
247
+ Control mode.
248
+ """
249
+ request = dto.DeviceGetSettingRequest(
250
+ interface_id=self.controller.device.connection.interface_id,
251
+ device=self.controller.device.device_address,
252
+ axis=self.process_number,
253
+ setting="process.control.mode",
254
+ )
255
+ response = await call_async(
256
+ "device/get_setting",
257
+ request,
258
+ dto.DoubleResponse.from_binary)
259
+ return ProcessControllerMode(response.value)
260
+
261
+ def get_source(
262
+ self
263
+ ) -> ProcessControllerSource:
264
+ """
265
+ Gets the source used to control this process.
266
+
267
+ Returns:
268
+ The source providing feedback for this process.
269
+ """
270
+ request = dto.AxisEmptyRequest(
271
+ interface_id=self.controller.device.connection.interface_id,
272
+ device=self.controller.device.device_address,
273
+ axis=self.process_number,
274
+ )
275
+ response = call(
276
+ "process_controller/get_source",
277
+ request,
278
+ ProcessControllerSource.from_binary)
279
+ return response
280
+
281
+ async def get_source_async(
282
+ self
283
+ ) -> ProcessControllerSource:
284
+ """
285
+ Gets the source used to control this process.
286
+
287
+ Returns:
288
+ The source providing feedback for this process.
289
+ """
290
+ request = dto.AxisEmptyRequest(
291
+ interface_id=self.controller.device.connection.interface_id,
292
+ device=self.controller.device.device_address,
293
+ axis=self.process_number,
294
+ )
295
+ response = await call_async(
296
+ "process_controller/get_source",
297
+ request,
298
+ ProcessControllerSource.from_binary)
299
+ return response
300
+
301
+ def set_source(
302
+ self,
303
+ source: ProcessControllerSource
304
+ ) -> None:
305
+ """
306
+ Sets the source used to control this process.
307
+
308
+ Args:
309
+ source: Sets the source that should provide feedback for this process.
310
+ """
311
+ request = dto.SetProcessControllerSource(
312
+ interface_id=self.controller.device.connection.interface_id,
313
+ device=self.controller.device.device_address,
314
+ axis=self.process_number,
315
+ source=source,
316
+ )
317
+ call("process_controller/set_source", request)
318
+
319
+ async def set_source_async(
320
+ self,
321
+ source: ProcessControllerSource
322
+ ) -> None:
323
+ """
324
+ Sets the source used to control this process.
325
+
326
+ Args:
327
+ source: Sets the source that should provide feedback for this process.
328
+ """
329
+ request = dto.SetProcessControllerSource(
330
+ interface_id=self.controller.device.connection.interface_id,
331
+ device=self.controller.device.device_address,
332
+ axis=self.process_number,
333
+ source=source,
334
+ )
335
+ await call_async("process_controller/set_source", request)
336
+
337
+ def get_input(
338
+ self
339
+ ) -> Measurement:
340
+ """
341
+ Gets the current value of the source used to control this process.
342
+
343
+ Returns:
344
+ The current value of this process's controlling source.
345
+ """
346
+ request = dto.AxisEmptyRequest(
347
+ interface_id=self.controller.device.connection.interface_id,
348
+ device=self.controller.device.device_address,
349
+ axis=self.process_number,
350
+ )
351
+ response = call(
352
+ "process_controller/get_input",
353
+ request,
354
+ Measurement.from_binary)
355
+ return response
356
+
357
+ async def get_input_async(
358
+ self
359
+ ) -> Measurement:
360
+ """
361
+ Gets the current value of the source used to control this process.
362
+
363
+ Returns:
364
+ The current value of this process's controlling source.
365
+ """
366
+ request = dto.AxisEmptyRequest(
367
+ interface_id=self.controller.device.connection.interface_id,
368
+ device=self.controller.device.device_address,
369
+ axis=self.process_number,
370
+ )
371
+ response = await call_async(
372
+ "process_controller/get_input",
373
+ request,
374
+ Measurement.from_binary)
375
+ return response
376
+
377
+ def bridge(
378
+ self
379
+ ) -> None:
380
+ """
381
+ Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
382
+ """
383
+ request = dto.ProcessOn(
384
+ interface_id=self.controller.device.connection.interface_id,
385
+ device=self.controller.device.device_address,
386
+ axis=self.process_number,
387
+ on=True,
388
+ )
389
+ call("process_controller/bridge", request)
390
+
391
+ async def bridge_async(
392
+ self
393
+ ) -> None:
394
+ """
395
+ Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
396
+ """
397
+ request = dto.ProcessOn(
398
+ interface_id=self.controller.device.connection.interface_id,
399
+ device=self.controller.device.device_address,
400
+ axis=self.process_number,
401
+ on=True,
402
+ )
403
+ await call_async("process_controller/bridge", request)
404
+
405
+ def unbridge(
406
+ self
407
+ ) -> None:
408
+ """
409
+ Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
410
+ This method is only callable on axis 1 and 3.
411
+ """
412
+ request = dto.ProcessOn(
413
+ interface_id=self.controller.device.connection.interface_id,
414
+ device=self.controller.device.device_address,
415
+ axis=self.process_number,
416
+ on=False,
417
+ )
418
+ call("process_controller/bridge", request)
419
+
420
+ async def unbridge_async(
421
+ self
422
+ ) -> None:
423
+ """
424
+ Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
425
+ This method is only callable on axis 1 and 3.
426
+ """
427
+ request = dto.ProcessOn(
428
+ interface_id=self.controller.device.connection.interface_id,
429
+ device=self.controller.device.device_address,
430
+ axis=self.process_number,
431
+ on=False,
432
+ )
433
+ await call_async("process_controller/bridge", request)
434
+
435
+ def is_bridge(
436
+ self
437
+ ) -> bool:
438
+ """
439
+ Detects if the given process is in bridging mode.
440
+
441
+ Returns:
442
+ Whether this process is bridged with its neighbor.
443
+ """
444
+ request = dto.AxisEmptyRequest(
445
+ interface_id=self.controller.device.connection.interface_id,
446
+ device=self.controller.device.device_address,
447
+ axis=self.process_number,
448
+ )
449
+ response = call(
450
+ "process_controller/is_bridge",
451
+ request,
452
+ dto.BoolResponse.from_binary)
453
+ return response.value
454
+
455
+ async def is_bridge_async(
456
+ self
457
+ ) -> bool:
458
+ """
459
+ Detects if the given process is in bridging mode.
460
+
461
+ Returns:
462
+ Whether this process is bridged with its neighbor.
463
+ """
464
+ request = dto.AxisEmptyRequest(
465
+ interface_id=self.controller.device.connection.interface_id,
466
+ device=self.controller.device.device_address,
467
+ axis=self.process_number,
468
+ )
469
+ response = await call_async(
470
+ "process_controller/is_bridge",
471
+ request,
472
+ dto.BoolResponse.from_binary)
473
+ return response.value
474
+
475
+ def generic_command(
476
+ self,
477
+ command: str,
478
+ check_errors: bool = True,
479
+ timeout: int = 0
480
+ ) -> Response:
481
+ """
482
+ Sends a generic ASCII command to this process' underlying axis.
483
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
484
+
485
+ Args:
486
+ command: Command and its parameters.
487
+ check_errors: Controls whether to throw an exception when the device rejects the command.
488
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
489
+ Overrides the connection default request timeout.
490
+
491
+ Returns:
492
+ A response to the command.
493
+ """
494
+ request = dto.GenericCommandRequest(
495
+ interface_id=self.controller.device.connection.interface_id,
496
+ device=self.controller.device.device_address,
497
+ axis=self.process_number,
498
+ command=command,
499
+ check_errors=check_errors,
500
+ timeout=timeout,
501
+ )
502
+ response = call(
503
+ "interface/generic_command",
504
+ request,
505
+ Response.from_binary)
506
+ return response
507
+
508
+ async def generic_command_async(
509
+ self,
510
+ command: str,
511
+ check_errors: bool = True,
512
+ timeout: int = 0
513
+ ) -> Response:
514
+ """
515
+ Sends a generic ASCII command to this process' underlying axis.
516
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
517
+
518
+ Args:
519
+ command: Command and its parameters.
520
+ check_errors: Controls whether to throw an exception when the device rejects the command.
521
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
522
+ Overrides the connection default request timeout.
523
+
524
+ Returns:
525
+ A response to the command.
526
+ """
527
+ request = dto.GenericCommandRequest(
528
+ interface_id=self.controller.device.connection.interface_id,
529
+ device=self.controller.device.device_address,
530
+ axis=self.process_number,
531
+ command=command,
532
+ check_errors=check_errors,
533
+ timeout=timeout,
534
+ )
535
+ response = await call_async(
536
+ "interface/generic_command",
537
+ request,
538
+ Response.from_binary)
539
+ return response
540
+
541
+ def generic_command_multi_response(
542
+ self,
543
+ command: str,
544
+ check_errors: bool = True,
545
+ timeout: int = 0
546
+ ) -> List[Response]:
547
+ """
548
+ Sends a generic ASCII command to this process and expect multiple responses.
549
+ Responses are returned in order of arrival.
550
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
551
+
552
+ Args:
553
+ command: Command and its parameters.
554
+ check_errors: Controls whether to throw an exception when a device rejects the command.
555
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
556
+ Overrides the connection default request timeout.
557
+
558
+ Returns:
559
+ All responses to the command.
560
+ """
561
+ request = dto.GenericCommandRequest(
562
+ interface_id=self.controller.device.connection.interface_id,
563
+ device=self.controller.device.device_address,
564
+ axis=self.process_number,
565
+ command=command,
566
+ check_errors=check_errors,
567
+ timeout=timeout,
568
+ )
569
+ response = call(
570
+ "interface/generic_command_multi_response",
571
+ request,
572
+ dto.GenericCommandResponseCollection.from_binary)
573
+ return response.responses
574
+
575
+ async def generic_command_multi_response_async(
576
+ self,
577
+ command: str,
578
+ check_errors: bool = True,
579
+ timeout: int = 0
580
+ ) -> List[Response]:
581
+ """
582
+ Sends a generic ASCII command to this process and expect multiple responses.
583
+ Responses are returned in order of arrival.
584
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
585
+
586
+ Args:
587
+ command: Command and its parameters.
588
+ check_errors: Controls whether to throw an exception when a device rejects the command.
589
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
590
+ Overrides the connection default request timeout.
591
+
592
+ Returns:
593
+ All responses to the command.
594
+ """
595
+ request = dto.GenericCommandRequest(
596
+ interface_id=self.controller.device.connection.interface_id,
597
+ device=self.controller.device.device_address,
598
+ axis=self.process_number,
599
+ command=command,
600
+ check_errors=check_errors,
601
+ timeout=timeout,
602
+ )
603
+ response = await call_async(
604
+ "interface/generic_command_multi_response",
605
+ request,
606
+ dto.GenericCommandResponseCollection.from_binary)
607
+ return response.responses
608
+
609
+ def generic_command_no_response(
610
+ self,
611
+ command: str
612
+ ) -> None:
613
+ """
614
+ Sends a generic ASCII command to this process without expecting a response and without adding a message ID
615
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
616
+
617
+ Args:
618
+ command: Command and its parameters.
619
+ """
620
+ request = dto.GenericCommandRequest(
621
+ interface_id=self.controller.device.connection.interface_id,
622
+ device=self.controller.device.device_address,
623
+ axis=self.process_number,
624
+ command=command,
625
+ )
626
+ call("interface/generic_command_no_response", request)
627
+
628
+ async def generic_command_no_response_async(
629
+ self,
630
+ command: str
631
+ ) -> None:
632
+ """
633
+ Sends a generic ASCII command to this process without expecting a response and without adding a message ID
634
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
635
+
636
+ Args:
637
+ command: Command and its parameters.
638
+ """
639
+ request = dto.GenericCommandRequest(
640
+ interface_id=self.controller.device.connection.interface_id,
641
+ device=self.controller.device.device_address,
642
+ axis=self.process_number,
643
+ command=command,
644
+ )
645
+ await call_async("interface/generic_command_no_response", request)
646
+
647
+ def get_state(
648
+ self
649
+ ) -> str:
650
+ """
651
+ Returns a serialization of the current process state that can be saved and reapplied.
652
+
653
+ Returns:
654
+ A serialization of the current state of the process.
655
+ """
656
+ request = dto.AxisEmptyRequest(
657
+ interface_id=self.controller.device.connection.interface_id,
658
+ device=self.controller.device.device_address,
659
+ axis=self.process_number,
660
+ )
661
+ response = call(
662
+ "device/get_state",
663
+ request,
664
+ dto.StringResponse.from_binary)
665
+ return response.value
666
+
667
+ async def get_state_async(
668
+ self
669
+ ) -> str:
670
+ """
671
+ Returns a serialization of the current process state that can be saved and reapplied.
672
+
673
+ Returns:
674
+ A serialization of the current state of the process.
675
+ """
676
+ request = dto.AxisEmptyRequest(
677
+ interface_id=self.controller.device.connection.interface_id,
678
+ device=self.controller.device.device_address,
679
+ axis=self.process_number,
680
+ )
681
+ response = await call_async(
682
+ "device/get_state",
683
+ request,
684
+ dto.StringResponse.from_binary)
685
+ return response.value
686
+
687
+ def set_state(
688
+ self,
689
+ state: str
690
+ ) -> SetStateAxisResponse:
691
+ """
692
+ Applies a saved state to this process.
693
+
694
+ Args:
695
+ state: The state object to apply to this process.
696
+
697
+ Returns:
698
+ Reports of any issues that were handled, but caused the state to not be exactly restored.
699
+ """
700
+ request = dto.SetStateRequest(
701
+ interface_id=self.controller.device.connection.interface_id,
702
+ device=self.controller.device.device_address,
703
+ axis=self.process_number,
704
+ state=state,
705
+ )
706
+ response = call(
707
+ "device/set_axis_state",
708
+ request,
709
+ SetStateAxisResponse.from_binary)
710
+ return response
711
+
712
+ async def set_state_async(
713
+ self,
714
+ state: str
715
+ ) -> SetStateAxisResponse:
716
+ """
717
+ Applies a saved state to this process.
718
+
719
+ Args:
720
+ state: The state object to apply to this process.
721
+
722
+ Returns:
723
+ Reports of any issues that were handled, but caused the state to not be exactly restored.
724
+ """
725
+ request = dto.SetStateRequest(
726
+ interface_id=self.controller.device.connection.interface_id,
727
+ device=self.controller.device.device_address,
728
+ axis=self.process_number,
729
+ state=state,
730
+ )
731
+ response = await call_async(
732
+ "device/set_axis_state",
733
+ request,
734
+ SetStateAxisResponse.from_binary)
735
+ return response
736
+
737
+ def can_set_state(
738
+ self,
739
+ state: str,
740
+ firmware_version: Optional[FirmwareVersion] = None
741
+ ) -> Optional[str]:
742
+ """
743
+ Checks if a state can be applied to this process.
744
+ This only covers exceptions that can be determined statically such as mismatches of ID or version,
745
+ the process of applying the state can still fail when running.
746
+
747
+ Args:
748
+ state: The state object to check against.
749
+ firmware_version: The firmware version of the device to apply the state to.
750
+ Use this to ensure the state will still be compatible after an update.
751
+
752
+ Returns:
753
+ An explanation of why this state cannot be set to this process.
754
+ """
755
+ request = dto.CanSetStateRequest(
756
+ interface_id=self.controller.device.connection.interface_id,
757
+ device=self.controller.device.device_address,
758
+ axis=self.process_number,
759
+ state=state,
760
+ firmware_version=firmware_version,
761
+ )
762
+ response = call(
763
+ "device/can_set_axis_state",
764
+ request,
765
+ dto.CanSetStateAxisResponse.from_binary)
766
+ return response.error
767
+
768
+ async def can_set_state_async(
769
+ self,
770
+ state: str,
771
+ firmware_version: Optional[FirmwareVersion] = None
772
+ ) -> Optional[str]:
773
+ """
774
+ Checks if a state can be applied to this process.
775
+ This only covers exceptions that can be determined statically such as mismatches of ID or version,
776
+ the process of applying the state can still fail when running.
777
+
778
+ Args:
779
+ state: The state object to check against.
780
+ firmware_version: The firmware version of the device to apply the state to.
781
+ Use this to ensure the state will still be compatible after an update.
782
+
783
+ Returns:
784
+ An explanation of why this state cannot be set to this process.
785
+ """
786
+ request = dto.CanSetStateRequest(
787
+ interface_id=self.controller.device.connection.interface_id,
788
+ device=self.controller.device.device_address,
789
+ axis=self.process_number,
790
+ state=state,
791
+ firmware_version=firmware_version,
792
+ )
793
+ response = await call_async(
794
+ "device/can_set_axis_state",
795
+ request,
796
+ dto.CanSetStateAxisResponse.from_binary)
797
+ return response.error
798
+
799
+ def __repr__(
800
+ self
801
+ ) -> str:
802
+ """
803
+ Returns a string that represents the process.
804
+
805
+ Returns:
806
+ A string that represents the process.
807
+ """
808
+ request = dto.AxisToStringRequest(
809
+ interface_id=self.controller.device.connection.interface_id,
810
+ device=self.controller.device.device_address,
811
+ axis=self.process_number,
812
+ type_override="Process",
813
+ )
814
+ response = call_sync(
815
+ "device/axis_to_string",
816
+ request,
817
+ dto.StringResponse.from_binary)
818
+ return response.value