zaber-motion 7.13.0__py3-none-win32.whl → 7.14.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 +84 -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 +139 -139
  474. zaber_motion/microscopy/illuminator_channel.py +616 -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.14.0.dist-info}/LICENSE.txt +2119 -2119
  487. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/METADATA +1 -1
  488. zaber_motion-7.14.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.14.0.dist-info}/WHEEL +0 -0
  492. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/top_level.txt +0 -0
@@ -1,924 +1,924 @@
1
- # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
- # ============== DO NOT EDIT DIRECTLY ============== #
3
-
4
- # pylint: disable=too-many-arguments
5
-
6
- from typing import TYPE_CHECKING, Optional
7
- from ..call import call, call_async, call_sync
8
-
9
- from ..dto import requests as dto
10
- from ..dto.binary.binary_settings import BinarySettings
11
- from ..dto.binary.device_identity import DeviceIdentity
12
- from .device_settings import DeviceSettings
13
- from ..dto.binary.command_code import CommandCode
14
- from ..dto.binary.message import Message
15
- from ..units import UnitsAndLiterals, Units, LengthUnits, VelocityUnits
16
- from ..dto.binary.device_type import DeviceType
17
- from ..dto.firmware_version import FirmwareVersion
18
-
19
- if TYPE_CHECKING:
20
- from .connection import Connection
21
-
22
-
23
- class Device:
24
- """
25
- Represents a device using the binary protocol.
26
- """
27
-
28
- DEFAULT_MOVEMENT_TIMEOUT = 60
29
- """
30
- Default timeout for move commands in seconds.
31
- """
32
-
33
- @property
34
- def connection(self) -> 'Connection':
35
- """
36
- Connection of this device.
37
- """
38
- return self._connection
39
-
40
- @property
41
- def settings(self) -> DeviceSettings:
42
- """
43
- Settings and properties of this axis.
44
- """
45
- return self._settings
46
-
47
- @property
48
- def device_address(self) -> int:
49
- """
50
- The device address uniquely identifies the device on the connection.
51
- It can be configured or automatically assigned by the renumber command.
52
- """
53
- return self._device_address
54
-
55
- @property
56
- def identity(self) -> DeviceIdentity:
57
- """
58
- Identity of the device.
59
- """
60
- return self.__retrieve_identity()
61
-
62
- @property
63
- def is_identified(self) -> bool:
64
- """
65
- Indicates whether or not the device has been identified.
66
- """
67
- return self.__retrieve_is_identified()
68
-
69
- @property
70
- def device_id(self) -> int:
71
- """
72
- Unique ID of the device hardware.
73
- """
74
- return self.identity.device_id
75
-
76
- @property
77
- def serial_number(self) -> int:
78
- """
79
- Serial number of the device.
80
- Requires at least Firmware 6.15 for devices or 6.24 for peripherals.
81
- """
82
- return self.identity.serial_number
83
-
84
- @property
85
- def name(self) -> str:
86
- """
87
- Name of the product.
88
- """
89
- return self.identity.name
90
-
91
- @property
92
- def firmware_version(self) -> FirmwareVersion:
93
- """
94
- Version of the firmware.
95
- """
96
- return self.identity.firmware_version
97
-
98
- @property
99
- def is_peripheral(self) -> bool:
100
- """
101
- Indicates whether the device is a peripheral or part of an integrated device.
102
- """
103
- return self.identity.is_peripheral
104
-
105
- @property
106
- def peripheral_id(self) -> int:
107
- """
108
- Unique ID of the peripheral hardware.
109
- """
110
- return self.identity.peripheral_id
111
-
112
- @property
113
- def peripheral_name(self) -> str:
114
- """
115
- Name of the peripheral hardware.
116
- """
117
- return self.identity.peripheral_name
118
-
119
- @property
120
- def device_type(self) -> DeviceType:
121
- """
122
- Determines the type of an device and units it accepts.
123
- """
124
- return self.identity.device_type
125
-
126
- def __init__(self, connection: 'Connection', device_address: int):
127
- self._connection: 'Connection' = connection
128
- self._settings: DeviceSettings = DeviceSettings(self)
129
- self._device_address: int = device_address
130
-
131
- def generic_command(
132
- self,
133
- command: CommandCode,
134
- data: int = 0,
135
- timeout: float = 0.0,
136
- check_errors: bool = True
137
- ) -> Message:
138
- """
139
- Sends a generic Binary command to this device.
140
- For more information please refer to the
141
- [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
142
-
143
- Args:
144
- command: Command to send.
145
- data: Optional data argument to the command. Defaults to zero.
146
- timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
147
- check_errors: Controls whether to throw an exception when the device rejects the command.
148
-
149
- Returns:
150
- A response to the command.
151
- """
152
- request = dto.GenericBinaryRequest(
153
- interface_id=self.connection.interface_id,
154
- device=self.device_address,
155
- command=command,
156
- data=data,
157
- timeout=timeout,
158
- check_errors=check_errors,
159
- )
160
- response = call(
161
- "binary/interface/generic_command",
162
- request,
163
- Message.from_binary)
164
- return response
165
-
166
- async def generic_command_async(
167
- self,
168
- command: CommandCode,
169
- data: int = 0,
170
- timeout: float = 0.0,
171
- check_errors: bool = True
172
- ) -> Message:
173
- """
174
- Sends a generic Binary command to this device.
175
- For more information please refer to the
176
- [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
177
-
178
- Args:
179
- command: Command to send.
180
- data: Optional data argument to the command. Defaults to zero.
181
- timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
182
- check_errors: Controls whether to throw an exception when the device rejects the command.
183
-
184
- Returns:
185
- A response to the command.
186
- """
187
- request = dto.GenericBinaryRequest(
188
- interface_id=self.connection.interface_id,
189
- device=self.device_address,
190
- command=command,
191
- data=data,
192
- timeout=timeout,
193
- check_errors=check_errors,
194
- )
195
- response = await call_async(
196
- "binary/interface/generic_command",
197
- request,
198
- Message.from_binary)
199
- return response
200
-
201
- def generic_command_no_response(
202
- self,
203
- command: CommandCode,
204
- data: int = 0
205
- ) -> None:
206
- """
207
- Sends a generic Binary command to this device without expecting a response.
208
- For more information please refer to the
209
- [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
210
-
211
- Args:
212
- command: Command to send.
213
- data: Optional data argument to the command. Defaults to zero.
214
- """
215
- request = dto.GenericBinaryRequest(
216
- interface_id=self.connection.interface_id,
217
- device=self.device_address,
218
- command=command,
219
- data=data,
220
- )
221
- call("binary/interface/generic_command_no_response", request)
222
-
223
- async def generic_command_no_response_async(
224
- self,
225
- command: CommandCode,
226
- data: int = 0
227
- ) -> None:
228
- """
229
- Sends a generic Binary command to this device without expecting a response.
230
- For more information please refer to the
231
- [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
232
-
233
- Args:
234
- command: Command to send.
235
- data: Optional data argument to the command. Defaults to zero.
236
- """
237
- request = dto.GenericBinaryRequest(
238
- interface_id=self.connection.interface_id,
239
- device=self.device_address,
240
- command=command,
241
- data=data,
242
- )
243
- await call_async("binary/interface/generic_command_no_response", request)
244
-
245
- def generic_command_with_units(
246
- self,
247
- command: CommandCode,
248
- data: float = 0,
249
- from_unit: UnitsAndLiterals = Units.NATIVE,
250
- to_unit: UnitsAndLiterals = Units.NATIVE,
251
- timeout: float = 0.0
252
- ) -> float:
253
- """
254
- Sends a generic Binary command to this device with unit conversions for both sent data and retrieved data.
255
-
256
- Args:
257
- command: Command to send.
258
- data: Data argument to the command. Defaults to zero.
259
- from_unit: Unit to convert sent data from.
260
- to_unit: Unit to convert retrieved data to.
261
- timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
262
-
263
- Returns:
264
- Data that has been converted to the provided unit.
265
- """
266
- request = dto.BinaryGenericWithUnitsRequest(
267
- interface_id=self.connection.interface_id,
268
- device=self.device_address,
269
- command=command,
270
- data=data,
271
- from_unit=from_unit,
272
- to_unit=to_unit,
273
- timeout=timeout,
274
- )
275
- response = call(
276
- "binary/device/generic_command_with_units",
277
- request,
278
- dto.DoubleResponse.from_binary)
279
- return response.value
280
-
281
- async def generic_command_with_units_async(
282
- self,
283
- command: CommandCode,
284
- data: float = 0,
285
- from_unit: UnitsAndLiterals = Units.NATIVE,
286
- to_unit: UnitsAndLiterals = Units.NATIVE,
287
- timeout: float = 0.0
288
- ) -> float:
289
- """
290
- Sends a generic Binary command to this device with unit conversions for both sent data and retrieved data.
291
-
292
- Args:
293
- command: Command to send.
294
- data: Data argument to the command. Defaults to zero.
295
- from_unit: Unit to convert sent data from.
296
- to_unit: Unit to convert retrieved data to.
297
- timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
298
-
299
- Returns:
300
- Data that has been converted to the provided unit.
301
- """
302
- request = dto.BinaryGenericWithUnitsRequest(
303
- interface_id=self.connection.interface_id,
304
- device=self.device_address,
305
- command=command,
306
- data=data,
307
- from_unit=from_unit,
308
- to_unit=to_unit,
309
- timeout=timeout,
310
- )
311
- response = await call_async(
312
- "binary/device/generic_command_with_units",
313
- request,
314
- dto.DoubleResponse.from_binary)
315
- return response.value
316
-
317
- def home(
318
- self,
319
- unit: LengthUnits = Units.NATIVE,
320
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
321
- ) -> float:
322
- """
323
- Homes device. Device returns to its homing position.
324
-
325
- Args:
326
- unit: Unit to convert returned position to.
327
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
328
-
329
- Returns:
330
- Current position that has been converted to the provided unit.
331
- """
332
- request = dto.BinaryDeviceHomeRequest(
333
- interface_id=self.connection.interface_id,
334
- device=self.device_address,
335
- unit=unit,
336
- timeout=timeout,
337
- )
338
- response = call(
339
- "binary/device/home",
340
- request,
341
- dto.DoubleResponse.from_binary)
342
- return response.value
343
-
344
- async def home_async(
345
- self,
346
- unit: LengthUnits = Units.NATIVE,
347
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
348
- ) -> float:
349
- """
350
- Homes device. Device returns to its homing position.
351
-
352
- Args:
353
- unit: Unit to convert returned position to.
354
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
355
-
356
- Returns:
357
- Current position that has been converted to the provided unit.
358
- """
359
- request = dto.BinaryDeviceHomeRequest(
360
- interface_id=self.connection.interface_id,
361
- device=self.device_address,
362
- unit=unit,
363
- timeout=timeout,
364
- )
365
- response = await call_async(
366
- "binary/device/home",
367
- request,
368
- dto.DoubleResponse.from_binary)
369
- return response.value
370
-
371
- def stop(
372
- self,
373
- unit: LengthUnits = Units.NATIVE,
374
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
375
- ) -> float:
376
- """
377
- Stops ongoing device movement. Decelerates until zero speed.
378
-
379
- Args:
380
- unit: Unit to convert returned position to.
381
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
382
-
383
- Returns:
384
- Current position that has been converted to the provided unit.
385
- """
386
- request = dto.BinaryDeviceStopRequest(
387
- interface_id=self.connection.interface_id,
388
- device=self.device_address,
389
- unit=unit,
390
- timeout=timeout,
391
- )
392
- response = call(
393
- "binary/device/stop",
394
- request,
395
- dto.DoubleResponse.from_binary)
396
- return response.value
397
-
398
- async def stop_async(
399
- self,
400
- unit: LengthUnits = Units.NATIVE,
401
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
402
- ) -> float:
403
- """
404
- Stops ongoing device movement. Decelerates until zero speed.
405
-
406
- Args:
407
- unit: Unit to convert returned position to.
408
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
409
-
410
- Returns:
411
- Current position that has been converted to the provided unit.
412
- """
413
- request = dto.BinaryDeviceStopRequest(
414
- interface_id=self.connection.interface_id,
415
- device=self.device_address,
416
- unit=unit,
417
- timeout=timeout,
418
- )
419
- response = await call_async(
420
- "binary/device/stop",
421
- request,
422
- dto.DoubleResponse.from_binary)
423
- return response.value
424
-
425
- def move_absolute(
426
- self,
427
- position: float,
428
- unit: LengthUnits = Units.NATIVE,
429
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
430
- ) -> float:
431
- """
432
- Move device to absolute position.
433
-
434
- Args:
435
- position: Absolute position.
436
- unit: Unit for the provided position as well as position returned by the device.
437
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
438
-
439
- Returns:
440
- Current position that has been converted to the provided unit.
441
- """
442
- request = dto.BinaryDeviceMoveRequest(
443
- interface_id=self.connection.interface_id,
444
- device=self.device_address,
445
- type=dto.AxisMoveType.ABS,
446
- arg=position,
447
- unit=unit,
448
- timeout=timeout,
449
- )
450
- response = call(
451
- "binary/device/move",
452
- request,
453
- dto.DoubleResponse.from_binary)
454
- return response.value
455
-
456
- async def move_absolute_async(
457
- self,
458
- position: float,
459
- unit: LengthUnits = Units.NATIVE,
460
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
461
- ) -> float:
462
- """
463
- Move device to absolute position.
464
-
465
- Args:
466
- position: Absolute position.
467
- unit: Unit for the provided position as well as position returned by the device.
468
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
469
-
470
- Returns:
471
- Current position that has been converted to the provided unit.
472
- """
473
- request = dto.BinaryDeviceMoveRequest(
474
- interface_id=self.connection.interface_id,
475
- device=self.device_address,
476
- type=dto.AxisMoveType.ABS,
477
- arg=position,
478
- unit=unit,
479
- timeout=timeout,
480
- )
481
- response = await call_async(
482
- "binary/device/move",
483
- request,
484
- dto.DoubleResponse.from_binary)
485
- return response.value
486
-
487
- def move_relative(
488
- self,
489
- position: float,
490
- unit: LengthUnits = Units.NATIVE,
491
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
492
- ) -> float:
493
- """
494
- Move device to position relative to current position.
495
-
496
- Args:
497
- position: Relative position.
498
- unit: Unit for the provided position as well as position returned by the device.
499
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
500
-
501
- Returns:
502
- Current position that has been converted to the provided unit.
503
- """
504
- request = dto.BinaryDeviceMoveRequest(
505
- interface_id=self.connection.interface_id,
506
- device=self.device_address,
507
- type=dto.AxisMoveType.REL,
508
- arg=position,
509
- unit=unit,
510
- timeout=timeout,
511
- )
512
- response = call(
513
- "binary/device/move",
514
- request,
515
- dto.DoubleResponse.from_binary)
516
- return response.value
517
-
518
- async def move_relative_async(
519
- self,
520
- position: float,
521
- unit: LengthUnits = Units.NATIVE,
522
- timeout: float = DEFAULT_MOVEMENT_TIMEOUT
523
- ) -> float:
524
- """
525
- Move device to position relative to current position.
526
-
527
- Args:
528
- position: Relative position.
529
- unit: Unit for the provided position as well as position returned by the device.
530
- timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
531
-
532
- Returns:
533
- Current position that has been converted to the provided unit.
534
- """
535
- request = dto.BinaryDeviceMoveRequest(
536
- interface_id=self.connection.interface_id,
537
- device=self.device_address,
538
- type=dto.AxisMoveType.REL,
539
- arg=position,
540
- unit=unit,
541
- timeout=timeout,
542
- )
543
- response = await call_async(
544
- "binary/device/move",
545
- request,
546
- dto.DoubleResponse.from_binary)
547
- return response.value
548
-
549
- def move_velocity(
550
- self,
551
- velocity: float,
552
- unit: VelocityUnits = Units.NATIVE
553
- ) -> float:
554
- """
555
- Begins to move device at specified speed.
556
-
557
- Args:
558
- velocity: Movement velocity.
559
- unit: Unit to convert returned velocity to.
560
-
561
- Returns:
562
- Device velocity that has been converted to the provided unit.
563
- """
564
- request = dto.BinaryDeviceMoveRequest(
565
- interface_id=self.connection.interface_id,
566
- device=self.device_address,
567
- type=dto.AxisMoveType.VEL,
568
- arg=velocity,
569
- unit=unit,
570
- )
571
- response = call(
572
- "binary/device/move",
573
- request,
574
- dto.DoubleResponse.from_binary)
575
- return response.value
576
-
577
- async def move_velocity_async(
578
- self,
579
- velocity: float,
580
- unit: VelocityUnits = Units.NATIVE
581
- ) -> float:
582
- """
583
- Begins to move device at specified speed.
584
-
585
- Args:
586
- velocity: Movement velocity.
587
- unit: Unit to convert returned velocity to.
588
-
589
- Returns:
590
- Device velocity that has been converted to the provided unit.
591
- """
592
- request = dto.BinaryDeviceMoveRequest(
593
- interface_id=self.connection.interface_id,
594
- device=self.device_address,
595
- type=dto.AxisMoveType.VEL,
596
- arg=velocity,
597
- unit=unit,
598
- )
599
- response = await call_async(
600
- "binary/device/move",
601
- request,
602
- dto.DoubleResponse.from_binary)
603
- return response.value
604
-
605
- def wait_until_idle(
606
- self
607
- ) -> None:
608
- """
609
- Waits until device stops moving.
610
- """
611
- request = dto.DeviceEmptyRequest(
612
- interface_id=self.connection.interface_id,
613
- device=self.device_address,
614
- )
615
- call("binary/device/wait_until_idle", request)
616
-
617
- async def wait_until_idle_async(
618
- self
619
- ) -> None:
620
- """
621
- Waits until device stops moving.
622
- """
623
- request = dto.DeviceEmptyRequest(
624
- interface_id=self.connection.interface_id,
625
- device=self.device_address,
626
- )
627
- await call_async("binary/device/wait_until_idle", request)
628
-
629
- def is_busy(
630
- self
631
- ) -> bool:
632
- """
633
- Check whether the device is moving.
634
-
635
- Returns:
636
- True if the device is currently executing a motion command.
637
- """
638
- request = dto.DeviceEmptyRequest(
639
- interface_id=self.connection.interface_id,
640
- device=self.device_address,
641
- )
642
- response = call(
643
- "binary/device/is_busy",
644
- request,
645
- dto.BoolResponse.from_binary)
646
- return response.value
647
-
648
- async def is_busy_async(
649
- self
650
- ) -> bool:
651
- """
652
- Check whether the device is moving.
653
-
654
- Returns:
655
- True if the device is currently executing a motion command.
656
- """
657
- request = dto.DeviceEmptyRequest(
658
- interface_id=self.connection.interface_id,
659
- device=self.device_address,
660
- )
661
- response = await call_async(
662
- "binary/device/is_busy",
663
- request,
664
- dto.BoolResponse.from_binary)
665
- return response.value
666
-
667
- def identify(
668
- self,
669
- assume_version: Optional[FirmwareVersion] = None
670
- ) -> DeviceIdentity:
671
- """
672
- Queries the device and the database, gathering information about the product.
673
- Without this information features such as unit conversions will not work.
674
- Usually, called automatically by detect devices method.
675
-
676
- Args:
677
- assume_version: The identification assumes the specified firmware version
678
- instead of the version queried from the device.
679
- Providing this argument can lead to unexpected compatibility issues.
680
-
681
- Returns:
682
- Device identification data.
683
- """
684
- request = dto.DeviceIdentifyRequest(
685
- interface_id=self.connection.interface_id,
686
- device=self.device_address,
687
- assume_version=assume_version,
688
- )
689
- response = call(
690
- "binary/device/identify",
691
- request,
692
- DeviceIdentity.from_binary)
693
- return response
694
-
695
- async def identify_async(
696
- self,
697
- assume_version: Optional[FirmwareVersion] = None
698
- ) -> DeviceIdentity:
699
- """
700
- Queries the device and the database, gathering information about the product.
701
- Without this information features such as unit conversions will not work.
702
- Usually, called automatically by detect devices method.
703
-
704
- Args:
705
- assume_version: The identification assumes the specified firmware version
706
- instead of the version queried from the device.
707
- Providing this argument can lead to unexpected compatibility issues.
708
-
709
- Returns:
710
- Device identification data.
711
- """
712
- request = dto.DeviceIdentifyRequest(
713
- interface_id=self.connection.interface_id,
714
- device=self.device_address,
715
- assume_version=assume_version,
716
- )
717
- response = await call_async(
718
- "binary/device/identify",
719
- request,
720
- DeviceIdentity.from_binary)
721
- return response
722
-
723
- def park(
724
- self
725
- ) -> None:
726
- """
727
- Parks the axis.
728
- Motor drivers remain enabled and hold current continues to be applied until the device is powered off.
729
- It can later be unparked and moved without first having to home it.
730
- Requires at least Firmware 6.06.
731
- """
732
- request = dto.DeviceEmptyRequest(
733
- interface_id=self.connection.interface_id,
734
- device=self.device_address,
735
- )
736
- call("binary/device/park", request)
737
-
738
- async def park_async(
739
- self
740
- ) -> None:
741
- """
742
- Parks the axis.
743
- Motor drivers remain enabled and hold current continues to be applied until the device is powered off.
744
- It can later be unparked and moved without first having to home it.
745
- Requires at least Firmware 6.06.
746
- """
747
- request = dto.DeviceEmptyRequest(
748
- interface_id=self.connection.interface_id,
749
- device=self.device_address,
750
- )
751
- await call_async("binary/device/park", request)
752
-
753
- def unpark(
754
- self
755
- ) -> None:
756
- """
757
- Unparks axis. Axis will now be able to move.
758
- Requires at least Firmware 6.06.
759
- """
760
- request = dto.DeviceEmptyRequest(
761
- interface_id=self.connection.interface_id,
762
- device=self.device_address,
763
- )
764
- call("binary/device/unpark", request)
765
-
766
- async def unpark_async(
767
- self
768
- ) -> None:
769
- """
770
- Unparks axis. Axis will now be able to move.
771
- Requires at least Firmware 6.06.
772
- """
773
- request = dto.DeviceEmptyRequest(
774
- interface_id=self.connection.interface_id,
775
- device=self.device_address,
776
- )
777
- await call_async("binary/device/unpark", request)
778
-
779
- def is_parked(
780
- self
781
- ) -> bool:
782
- """
783
- Returns bool indicating whether the axis is parked or not.
784
- Requires at least Firmware 6.06.
785
-
786
- Returns:
787
- True if the axis is currently parked. False otherwise.
788
- """
789
- request = dto.DeviceEmptyRequest(
790
- interface_id=self.connection.interface_id,
791
- device=self.device_address,
792
- )
793
- response = call(
794
- "binary/device/is_parked",
795
- request,
796
- dto.BoolResponse.from_binary)
797
- return response.value
798
-
799
- async def is_parked_async(
800
- self
801
- ) -> bool:
802
- """
803
- Returns bool indicating whether the axis is parked or not.
804
- Requires at least Firmware 6.06.
805
-
806
- Returns:
807
- True if the axis is currently parked. False otherwise.
808
- """
809
- request = dto.DeviceEmptyRequest(
810
- interface_id=self.connection.interface_id,
811
- device=self.device_address,
812
- )
813
- response = await call_async(
814
- "binary/device/is_parked",
815
- request,
816
- dto.BoolResponse.from_binary)
817
- return response.value
818
-
819
- def get_position(
820
- self,
821
- unit: LengthUnits = Units.NATIVE
822
- ) -> float:
823
- """
824
- Returns current device position.
825
-
826
- Args:
827
- unit: Units of position.
828
-
829
- Returns:
830
- Axis position.
831
- """
832
- request = dto.BinaryDeviceGetSettingRequest(
833
- interface_id=self.connection.interface_id,
834
- device=self.device_address,
835
- setting=BinarySettings.CURRENT_POSITION,
836
- unit=unit,
837
- )
838
- response = call(
839
- "binary/device/get_setting",
840
- request,
841
- dto.DoubleResponse.from_binary)
842
- return response.value
843
-
844
- async def get_position_async(
845
- self,
846
- unit: LengthUnits = Units.NATIVE
847
- ) -> float:
848
- """
849
- Returns current device position.
850
-
851
- Args:
852
- unit: Units of position.
853
-
854
- Returns:
855
- Axis position.
856
- """
857
- request = dto.BinaryDeviceGetSettingRequest(
858
- interface_id=self.connection.interface_id,
859
- device=self.device_address,
860
- setting=BinarySettings.CURRENT_POSITION,
861
- unit=unit,
862
- )
863
- response = await call_async(
864
- "binary/device/get_setting",
865
- request,
866
- dto.DoubleResponse.from_binary)
867
- return response.value
868
-
869
- def __repr__(
870
- self
871
- ) -> str:
872
- """
873
- Returns a string that represents the device.
874
-
875
- Returns:
876
- A string that represents the device.
877
- """
878
- request = dto.DeviceEmptyRequest(
879
- interface_id=self.connection.interface_id,
880
- device=self.device_address,
881
- )
882
- response = call_sync(
883
- "binary/device/device_to_string",
884
- request,
885
- dto.StringResponse.from_binary)
886
- return response.value
887
-
888
- def __retrieve_identity(
889
- self
890
- ) -> DeviceIdentity:
891
- """
892
- Returns identity.
893
-
894
- Returns:
895
- Device identity.
896
- """
897
- request = dto.DeviceEmptyRequest(
898
- interface_id=self.connection.interface_id,
899
- device=self.device_address,
900
- )
901
- response = call_sync(
902
- "binary/device/get_identity",
903
- request,
904
- DeviceIdentity.from_binary)
905
- return response
906
-
907
- def __retrieve_is_identified(
908
- self
909
- ) -> bool:
910
- """
911
- Returns whether or not the device have been identified.
912
-
913
- Returns:
914
- True if the device has already been identified. False otherwise.
915
- """
916
- request = dto.DeviceEmptyRequest(
917
- interface_id=self.connection.interface_id,
918
- device=self.device_address,
919
- )
920
- response = call_sync(
921
- "binary/device/get_is_identified",
922
- request,
923
- dto.BoolResponse.from_binary)
924
- return response.value
1
+ # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
+ # ============== DO NOT EDIT DIRECTLY ============== #
3
+
4
+ # pylint: disable=too-many-arguments
5
+
6
+ from typing import TYPE_CHECKING, Optional
7
+ from ..call import call, call_async, call_sync
8
+
9
+ from ..dto import requests as dto
10
+ from ..dto.binary.binary_settings import BinarySettings
11
+ from ..dto.binary.device_identity import DeviceIdentity
12
+ from .device_settings import DeviceSettings
13
+ from ..dto.binary.command_code import CommandCode
14
+ from ..dto.binary.message import Message
15
+ from ..units import UnitsAndLiterals, Units, LengthUnits, VelocityUnits
16
+ from ..dto.binary.device_type import DeviceType
17
+ from ..dto.firmware_version import FirmwareVersion
18
+
19
+ if TYPE_CHECKING:
20
+ from .connection import Connection
21
+
22
+
23
+ class Device:
24
+ """
25
+ Represents a device using the binary protocol.
26
+ """
27
+
28
+ DEFAULT_MOVEMENT_TIMEOUT = 60
29
+ """
30
+ Default timeout for move commands in seconds.
31
+ """
32
+
33
+ @property
34
+ def connection(self) -> 'Connection':
35
+ """
36
+ Connection of this device.
37
+ """
38
+ return self._connection
39
+
40
+ @property
41
+ def settings(self) -> DeviceSettings:
42
+ """
43
+ Settings and properties of this axis.
44
+ """
45
+ return self._settings
46
+
47
+ @property
48
+ def device_address(self) -> int:
49
+ """
50
+ The device address uniquely identifies the device on the connection.
51
+ It can be configured or automatically assigned by the renumber command.
52
+ """
53
+ return self._device_address
54
+
55
+ @property
56
+ def identity(self) -> DeviceIdentity:
57
+ """
58
+ Identity of the device.
59
+ """
60
+ return self.__retrieve_identity()
61
+
62
+ @property
63
+ def is_identified(self) -> bool:
64
+ """
65
+ Indicates whether or not the device has been identified.
66
+ """
67
+ return self.__retrieve_is_identified()
68
+
69
+ @property
70
+ def device_id(self) -> int:
71
+ """
72
+ Unique ID of the device hardware.
73
+ """
74
+ return self.identity.device_id
75
+
76
+ @property
77
+ def serial_number(self) -> int:
78
+ """
79
+ Serial number of the device.
80
+ Requires at least Firmware 6.15 for devices or 6.24 for peripherals.
81
+ """
82
+ return self.identity.serial_number
83
+
84
+ @property
85
+ def name(self) -> str:
86
+ """
87
+ Name of the product.
88
+ """
89
+ return self.identity.name
90
+
91
+ @property
92
+ def firmware_version(self) -> FirmwareVersion:
93
+ """
94
+ Version of the firmware.
95
+ """
96
+ return self.identity.firmware_version
97
+
98
+ @property
99
+ def is_peripheral(self) -> bool:
100
+ """
101
+ Indicates whether the device is a peripheral or part of an integrated device.
102
+ """
103
+ return self.identity.is_peripheral
104
+
105
+ @property
106
+ def peripheral_id(self) -> int:
107
+ """
108
+ Unique ID of the peripheral hardware.
109
+ """
110
+ return self.identity.peripheral_id
111
+
112
+ @property
113
+ def peripheral_name(self) -> str:
114
+ """
115
+ Name of the peripheral hardware.
116
+ """
117
+ return self.identity.peripheral_name
118
+
119
+ @property
120
+ def device_type(self) -> DeviceType:
121
+ """
122
+ Determines the type of an device and units it accepts.
123
+ """
124
+ return self.identity.device_type
125
+
126
+ def __init__(self, connection: 'Connection', device_address: int):
127
+ self._connection: 'Connection' = connection
128
+ self._settings: DeviceSettings = DeviceSettings(self)
129
+ self._device_address: int = device_address
130
+
131
+ def generic_command(
132
+ self,
133
+ command: CommandCode,
134
+ data: int = 0,
135
+ timeout: float = 0.0,
136
+ check_errors: bool = True
137
+ ) -> Message:
138
+ """
139
+ Sends a generic Binary command to this device.
140
+ For more information please refer to the
141
+ [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
142
+
143
+ Args:
144
+ command: Command to send.
145
+ data: Optional data argument to the command. Defaults to zero.
146
+ timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
147
+ check_errors: Controls whether to throw an exception when the device rejects the command.
148
+
149
+ Returns:
150
+ A response to the command.
151
+ """
152
+ request = dto.GenericBinaryRequest(
153
+ interface_id=self.connection.interface_id,
154
+ device=self.device_address,
155
+ command=command,
156
+ data=data,
157
+ timeout=timeout,
158
+ check_errors=check_errors,
159
+ )
160
+ response = call(
161
+ "binary/interface/generic_command",
162
+ request,
163
+ Message.from_binary)
164
+ return response
165
+
166
+ async def generic_command_async(
167
+ self,
168
+ command: CommandCode,
169
+ data: int = 0,
170
+ timeout: float = 0.0,
171
+ check_errors: bool = True
172
+ ) -> Message:
173
+ """
174
+ Sends a generic Binary command to this device.
175
+ For more information please refer to the
176
+ [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
177
+
178
+ Args:
179
+ command: Command to send.
180
+ data: Optional data argument to the command. Defaults to zero.
181
+ timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
182
+ check_errors: Controls whether to throw an exception when the device rejects the command.
183
+
184
+ Returns:
185
+ A response to the command.
186
+ """
187
+ request = dto.GenericBinaryRequest(
188
+ interface_id=self.connection.interface_id,
189
+ device=self.device_address,
190
+ command=command,
191
+ data=data,
192
+ timeout=timeout,
193
+ check_errors=check_errors,
194
+ )
195
+ response = await call_async(
196
+ "binary/interface/generic_command",
197
+ request,
198
+ Message.from_binary)
199
+ return response
200
+
201
+ def generic_command_no_response(
202
+ self,
203
+ command: CommandCode,
204
+ data: int = 0
205
+ ) -> None:
206
+ """
207
+ Sends a generic Binary command to this device without expecting a response.
208
+ For more information please refer to the
209
+ [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
210
+
211
+ Args:
212
+ command: Command to send.
213
+ data: Optional data argument to the command. Defaults to zero.
214
+ """
215
+ request = dto.GenericBinaryRequest(
216
+ interface_id=self.connection.interface_id,
217
+ device=self.device_address,
218
+ command=command,
219
+ data=data,
220
+ )
221
+ call("binary/interface/generic_command_no_response", request)
222
+
223
+ async def generic_command_no_response_async(
224
+ self,
225
+ command: CommandCode,
226
+ data: int = 0
227
+ ) -> None:
228
+ """
229
+ Sends a generic Binary command to this device without expecting a response.
230
+ For more information please refer to the
231
+ [Binary Protocol Manual](https://www.zaber.com/protocol-manual?protocol=Binary#topic_quick_command_reference).
232
+
233
+ Args:
234
+ command: Command to send.
235
+ data: Optional data argument to the command. Defaults to zero.
236
+ """
237
+ request = dto.GenericBinaryRequest(
238
+ interface_id=self.connection.interface_id,
239
+ device=self.device_address,
240
+ command=command,
241
+ data=data,
242
+ )
243
+ await call_async("binary/interface/generic_command_no_response", request)
244
+
245
+ def generic_command_with_units(
246
+ self,
247
+ command: CommandCode,
248
+ data: float = 0,
249
+ from_unit: UnitsAndLiterals = Units.NATIVE,
250
+ to_unit: UnitsAndLiterals = Units.NATIVE,
251
+ timeout: float = 0.0
252
+ ) -> float:
253
+ """
254
+ Sends a generic Binary command to this device with unit conversions for both sent data and retrieved data.
255
+
256
+ Args:
257
+ command: Command to send.
258
+ data: Data argument to the command. Defaults to zero.
259
+ from_unit: Unit to convert sent data from.
260
+ to_unit: Unit to convert retrieved data to.
261
+ timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
262
+
263
+ Returns:
264
+ Data that has been converted to the provided unit.
265
+ """
266
+ request = dto.BinaryGenericWithUnitsRequest(
267
+ interface_id=self.connection.interface_id,
268
+ device=self.device_address,
269
+ command=command,
270
+ data=data,
271
+ from_unit=from_unit,
272
+ to_unit=to_unit,
273
+ timeout=timeout,
274
+ )
275
+ response = call(
276
+ "binary/device/generic_command_with_units",
277
+ request,
278
+ dto.DoubleResponse.from_binary)
279
+ return response.value
280
+
281
+ async def generic_command_with_units_async(
282
+ self,
283
+ command: CommandCode,
284
+ data: float = 0,
285
+ from_unit: UnitsAndLiterals = Units.NATIVE,
286
+ to_unit: UnitsAndLiterals = Units.NATIVE,
287
+ timeout: float = 0.0
288
+ ) -> float:
289
+ """
290
+ Sends a generic Binary command to this device with unit conversions for both sent data and retrieved data.
291
+
292
+ Args:
293
+ command: Command to send.
294
+ data: Data argument to the command. Defaults to zero.
295
+ from_unit: Unit to convert sent data from.
296
+ to_unit: Unit to convert retrieved data to.
297
+ timeout: Number of seconds to wait for a response from the device. 0 or negative defaults to 0.5s.
298
+
299
+ Returns:
300
+ Data that has been converted to the provided unit.
301
+ """
302
+ request = dto.BinaryGenericWithUnitsRequest(
303
+ interface_id=self.connection.interface_id,
304
+ device=self.device_address,
305
+ command=command,
306
+ data=data,
307
+ from_unit=from_unit,
308
+ to_unit=to_unit,
309
+ timeout=timeout,
310
+ )
311
+ response = await call_async(
312
+ "binary/device/generic_command_with_units",
313
+ request,
314
+ dto.DoubleResponse.from_binary)
315
+ return response.value
316
+
317
+ def home(
318
+ self,
319
+ unit: LengthUnits = Units.NATIVE,
320
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
321
+ ) -> float:
322
+ """
323
+ Homes device. Device returns to its homing position.
324
+
325
+ Args:
326
+ unit: Unit to convert returned position to.
327
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
328
+
329
+ Returns:
330
+ Current position that has been converted to the provided unit.
331
+ """
332
+ request = dto.BinaryDeviceHomeRequest(
333
+ interface_id=self.connection.interface_id,
334
+ device=self.device_address,
335
+ unit=unit,
336
+ timeout=timeout,
337
+ )
338
+ response = call(
339
+ "binary/device/home",
340
+ request,
341
+ dto.DoubleResponse.from_binary)
342
+ return response.value
343
+
344
+ async def home_async(
345
+ self,
346
+ unit: LengthUnits = Units.NATIVE,
347
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
348
+ ) -> float:
349
+ """
350
+ Homes device. Device returns to its homing position.
351
+
352
+ Args:
353
+ unit: Unit to convert returned position to.
354
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
355
+
356
+ Returns:
357
+ Current position that has been converted to the provided unit.
358
+ """
359
+ request = dto.BinaryDeviceHomeRequest(
360
+ interface_id=self.connection.interface_id,
361
+ device=self.device_address,
362
+ unit=unit,
363
+ timeout=timeout,
364
+ )
365
+ response = await call_async(
366
+ "binary/device/home",
367
+ request,
368
+ dto.DoubleResponse.from_binary)
369
+ return response.value
370
+
371
+ def stop(
372
+ self,
373
+ unit: LengthUnits = Units.NATIVE,
374
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
375
+ ) -> float:
376
+ """
377
+ Stops ongoing device movement. Decelerates until zero speed.
378
+
379
+ Args:
380
+ unit: Unit to convert returned position to.
381
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
382
+
383
+ Returns:
384
+ Current position that has been converted to the provided unit.
385
+ """
386
+ request = dto.BinaryDeviceStopRequest(
387
+ interface_id=self.connection.interface_id,
388
+ device=self.device_address,
389
+ unit=unit,
390
+ timeout=timeout,
391
+ )
392
+ response = call(
393
+ "binary/device/stop",
394
+ request,
395
+ dto.DoubleResponse.from_binary)
396
+ return response.value
397
+
398
+ async def stop_async(
399
+ self,
400
+ unit: LengthUnits = Units.NATIVE,
401
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
402
+ ) -> float:
403
+ """
404
+ Stops ongoing device movement. Decelerates until zero speed.
405
+
406
+ Args:
407
+ unit: Unit to convert returned position to.
408
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
409
+
410
+ Returns:
411
+ Current position that has been converted to the provided unit.
412
+ """
413
+ request = dto.BinaryDeviceStopRequest(
414
+ interface_id=self.connection.interface_id,
415
+ device=self.device_address,
416
+ unit=unit,
417
+ timeout=timeout,
418
+ )
419
+ response = await call_async(
420
+ "binary/device/stop",
421
+ request,
422
+ dto.DoubleResponse.from_binary)
423
+ return response.value
424
+
425
+ def move_absolute(
426
+ self,
427
+ position: float,
428
+ unit: LengthUnits = Units.NATIVE,
429
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
430
+ ) -> float:
431
+ """
432
+ Move device to absolute position.
433
+
434
+ Args:
435
+ position: Absolute position.
436
+ unit: Unit for the provided position as well as position returned by the device.
437
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
438
+
439
+ Returns:
440
+ Current position that has been converted to the provided unit.
441
+ """
442
+ request = dto.BinaryDeviceMoveRequest(
443
+ interface_id=self.connection.interface_id,
444
+ device=self.device_address,
445
+ type=dto.AxisMoveType.ABS,
446
+ arg=position,
447
+ unit=unit,
448
+ timeout=timeout,
449
+ )
450
+ response = call(
451
+ "binary/device/move",
452
+ request,
453
+ dto.DoubleResponse.from_binary)
454
+ return response.value
455
+
456
+ async def move_absolute_async(
457
+ self,
458
+ position: float,
459
+ unit: LengthUnits = Units.NATIVE,
460
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
461
+ ) -> float:
462
+ """
463
+ Move device to absolute position.
464
+
465
+ Args:
466
+ position: Absolute position.
467
+ unit: Unit for the provided position as well as position returned by the device.
468
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
469
+
470
+ Returns:
471
+ Current position that has been converted to the provided unit.
472
+ """
473
+ request = dto.BinaryDeviceMoveRequest(
474
+ interface_id=self.connection.interface_id,
475
+ device=self.device_address,
476
+ type=dto.AxisMoveType.ABS,
477
+ arg=position,
478
+ unit=unit,
479
+ timeout=timeout,
480
+ )
481
+ response = await call_async(
482
+ "binary/device/move",
483
+ request,
484
+ dto.DoubleResponse.from_binary)
485
+ return response.value
486
+
487
+ def move_relative(
488
+ self,
489
+ position: float,
490
+ unit: LengthUnits = Units.NATIVE,
491
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
492
+ ) -> float:
493
+ """
494
+ Move device to position relative to current position.
495
+
496
+ Args:
497
+ position: Relative position.
498
+ unit: Unit for the provided position as well as position returned by the device.
499
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
500
+
501
+ Returns:
502
+ Current position that has been converted to the provided unit.
503
+ """
504
+ request = dto.BinaryDeviceMoveRequest(
505
+ interface_id=self.connection.interface_id,
506
+ device=self.device_address,
507
+ type=dto.AxisMoveType.REL,
508
+ arg=position,
509
+ unit=unit,
510
+ timeout=timeout,
511
+ )
512
+ response = call(
513
+ "binary/device/move",
514
+ request,
515
+ dto.DoubleResponse.from_binary)
516
+ return response.value
517
+
518
+ async def move_relative_async(
519
+ self,
520
+ position: float,
521
+ unit: LengthUnits = Units.NATIVE,
522
+ timeout: float = DEFAULT_MOVEMENT_TIMEOUT
523
+ ) -> float:
524
+ """
525
+ Move device to position relative to current position.
526
+
527
+ Args:
528
+ position: Relative position.
529
+ unit: Unit for the provided position as well as position returned by the device.
530
+ timeout: Number of seconds to wait for response from the device chain (defaults to 60s).
531
+
532
+ Returns:
533
+ Current position that has been converted to the provided unit.
534
+ """
535
+ request = dto.BinaryDeviceMoveRequest(
536
+ interface_id=self.connection.interface_id,
537
+ device=self.device_address,
538
+ type=dto.AxisMoveType.REL,
539
+ arg=position,
540
+ unit=unit,
541
+ timeout=timeout,
542
+ )
543
+ response = await call_async(
544
+ "binary/device/move",
545
+ request,
546
+ dto.DoubleResponse.from_binary)
547
+ return response.value
548
+
549
+ def move_velocity(
550
+ self,
551
+ velocity: float,
552
+ unit: VelocityUnits = Units.NATIVE
553
+ ) -> float:
554
+ """
555
+ Begins to move device at specified speed.
556
+
557
+ Args:
558
+ velocity: Movement velocity.
559
+ unit: Unit to convert returned velocity to.
560
+
561
+ Returns:
562
+ Device velocity that has been converted to the provided unit.
563
+ """
564
+ request = dto.BinaryDeviceMoveRequest(
565
+ interface_id=self.connection.interface_id,
566
+ device=self.device_address,
567
+ type=dto.AxisMoveType.VEL,
568
+ arg=velocity,
569
+ unit=unit,
570
+ )
571
+ response = call(
572
+ "binary/device/move",
573
+ request,
574
+ dto.DoubleResponse.from_binary)
575
+ return response.value
576
+
577
+ async def move_velocity_async(
578
+ self,
579
+ velocity: float,
580
+ unit: VelocityUnits = Units.NATIVE
581
+ ) -> float:
582
+ """
583
+ Begins to move device at specified speed.
584
+
585
+ Args:
586
+ velocity: Movement velocity.
587
+ unit: Unit to convert returned velocity to.
588
+
589
+ Returns:
590
+ Device velocity that has been converted to the provided unit.
591
+ """
592
+ request = dto.BinaryDeviceMoveRequest(
593
+ interface_id=self.connection.interface_id,
594
+ device=self.device_address,
595
+ type=dto.AxisMoveType.VEL,
596
+ arg=velocity,
597
+ unit=unit,
598
+ )
599
+ response = await call_async(
600
+ "binary/device/move",
601
+ request,
602
+ dto.DoubleResponse.from_binary)
603
+ return response.value
604
+
605
+ def wait_until_idle(
606
+ self
607
+ ) -> None:
608
+ """
609
+ Waits until device stops moving.
610
+ """
611
+ request = dto.DeviceEmptyRequest(
612
+ interface_id=self.connection.interface_id,
613
+ device=self.device_address,
614
+ )
615
+ call("binary/device/wait_until_idle", request)
616
+
617
+ async def wait_until_idle_async(
618
+ self
619
+ ) -> None:
620
+ """
621
+ Waits until device stops moving.
622
+ """
623
+ request = dto.DeviceEmptyRequest(
624
+ interface_id=self.connection.interface_id,
625
+ device=self.device_address,
626
+ )
627
+ await call_async("binary/device/wait_until_idle", request)
628
+
629
+ def is_busy(
630
+ self
631
+ ) -> bool:
632
+ """
633
+ Check whether the device is moving.
634
+
635
+ Returns:
636
+ True if the device is currently executing a motion command.
637
+ """
638
+ request = dto.DeviceEmptyRequest(
639
+ interface_id=self.connection.interface_id,
640
+ device=self.device_address,
641
+ )
642
+ response = call(
643
+ "binary/device/is_busy",
644
+ request,
645
+ dto.BoolResponse.from_binary)
646
+ return response.value
647
+
648
+ async def is_busy_async(
649
+ self
650
+ ) -> bool:
651
+ """
652
+ Check whether the device is moving.
653
+
654
+ Returns:
655
+ True if the device is currently executing a motion command.
656
+ """
657
+ request = dto.DeviceEmptyRequest(
658
+ interface_id=self.connection.interface_id,
659
+ device=self.device_address,
660
+ )
661
+ response = await call_async(
662
+ "binary/device/is_busy",
663
+ request,
664
+ dto.BoolResponse.from_binary)
665
+ return response.value
666
+
667
+ def identify(
668
+ self,
669
+ assume_version: Optional[FirmwareVersion] = None
670
+ ) -> DeviceIdentity:
671
+ """
672
+ Queries the device and the database, gathering information about the product.
673
+ Without this information features such as unit conversions will not work.
674
+ Usually, called automatically by detect devices method.
675
+
676
+ Args:
677
+ assume_version: The identification assumes the specified firmware version
678
+ instead of the version queried from the device.
679
+ Providing this argument can lead to unexpected compatibility issues.
680
+
681
+ Returns:
682
+ Device identification data.
683
+ """
684
+ request = dto.DeviceIdentifyRequest(
685
+ interface_id=self.connection.interface_id,
686
+ device=self.device_address,
687
+ assume_version=assume_version,
688
+ )
689
+ response = call(
690
+ "binary/device/identify",
691
+ request,
692
+ DeviceIdentity.from_binary)
693
+ return response
694
+
695
+ async def identify_async(
696
+ self,
697
+ assume_version: Optional[FirmwareVersion] = None
698
+ ) -> DeviceIdentity:
699
+ """
700
+ Queries the device and the database, gathering information about the product.
701
+ Without this information features such as unit conversions will not work.
702
+ Usually, called automatically by detect devices method.
703
+
704
+ Args:
705
+ assume_version: The identification assumes the specified firmware version
706
+ instead of the version queried from the device.
707
+ Providing this argument can lead to unexpected compatibility issues.
708
+
709
+ Returns:
710
+ Device identification data.
711
+ """
712
+ request = dto.DeviceIdentifyRequest(
713
+ interface_id=self.connection.interface_id,
714
+ device=self.device_address,
715
+ assume_version=assume_version,
716
+ )
717
+ response = await call_async(
718
+ "binary/device/identify",
719
+ request,
720
+ DeviceIdentity.from_binary)
721
+ return response
722
+
723
+ def park(
724
+ self
725
+ ) -> None:
726
+ """
727
+ Parks the axis.
728
+ Motor drivers remain enabled and hold current continues to be applied until the device is powered off.
729
+ It can later be unparked and moved without first having to home it.
730
+ Requires at least Firmware 6.06.
731
+ """
732
+ request = dto.DeviceEmptyRequest(
733
+ interface_id=self.connection.interface_id,
734
+ device=self.device_address,
735
+ )
736
+ call("binary/device/park", request)
737
+
738
+ async def park_async(
739
+ self
740
+ ) -> None:
741
+ """
742
+ Parks the axis.
743
+ Motor drivers remain enabled and hold current continues to be applied until the device is powered off.
744
+ It can later be unparked and moved without first having to home it.
745
+ Requires at least Firmware 6.06.
746
+ """
747
+ request = dto.DeviceEmptyRequest(
748
+ interface_id=self.connection.interface_id,
749
+ device=self.device_address,
750
+ )
751
+ await call_async("binary/device/park", request)
752
+
753
+ def unpark(
754
+ self
755
+ ) -> None:
756
+ """
757
+ Unparks axis. Axis will now be able to move.
758
+ Requires at least Firmware 6.06.
759
+ """
760
+ request = dto.DeviceEmptyRequest(
761
+ interface_id=self.connection.interface_id,
762
+ device=self.device_address,
763
+ )
764
+ call("binary/device/unpark", request)
765
+
766
+ async def unpark_async(
767
+ self
768
+ ) -> None:
769
+ """
770
+ Unparks axis. Axis will now be able to move.
771
+ Requires at least Firmware 6.06.
772
+ """
773
+ request = dto.DeviceEmptyRequest(
774
+ interface_id=self.connection.interface_id,
775
+ device=self.device_address,
776
+ )
777
+ await call_async("binary/device/unpark", request)
778
+
779
+ def is_parked(
780
+ self
781
+ ) -> bool:
782
+ """
783
+ Returns bool indicating whether the axis is parked or not.
784
+ Requires at least Firmware 6.06.
785
+
786
+ Returns:
787
+ True if the axis is currently parked. False otherwise.
788
+ """
789
+ request = dto.DeviceEmptyRequest(
790
+ interface_id=self.connection.interface_id,
791
+ device=self.device_address,
792
+ )
793
+ response = call(
794
+ "binary/device/is_parked",
795
+ request,
796
+ dto.BoolResponse.from_binary)
797
+ return response.value
798
+
799
+ async def is_parked_async(
800
+ self
801
+ ) -> bool:
802
+ """
803
+ Returns bool indicating whether the axis is parked or not.
804
+ Requires at least Firmware 6.06.
805
+
806
+ Returns:
807
+ True if the axis is currently parked. False otherwise.
808
+ """
809
+ request = dto.DeviceEmptyRequest(
810
+ interface_id=self.connection.interface_id,
811
+ device=self.device_address,
812
+ )
813
+ response = await call_async(
814
+ "binary/device/is_parked",
815
+ request,
816
+ dto.BoolResponse.from_binary)
817
+ return response.value
818
+
819
+ def get_position(
820
+ self,
821
+ unit: LengthUnits = Units.NATIVE
822
+ ) -> float:
823
+ """
824
+ Returns current device position.
825
+
826
+ Args:
827
+ unit: Units of position.
828
+
829
+ Returns:
830
+ Axis position.
831
+ """
832
+ request = dto.BinaryDeviceGetSettingRequest(
833
+ interface_id=self.connection.interface_id,
834
+ device=self.device_address,
835
+ setting=BinarySettings.CURRENT_POSITION,
836
+ unit=unit,
837
+ )
838
+ response = call(
839
+ "binary/device/get_setting",
840
+ request,
841
+ dto.DoubleResponse.from_binary)
842
+ return response.value
843
+
844
+ async def get_position_async(
845
+ self,
846
+ unit: LengthUnits = Units.NATIVE
847
+ ) -> float:
848
+ """
849
+ Returns current device position.
850
+
851
+ Args:
852
+ unit: Units of position.
853
+
854
+ Returns:
855
+ Axis position.
856
+ """
857
+ request = dto.BinaryDeviceGetSettingRequest(
858
+ interface_id=self.connection.interface_id,
859
+ device=self.device_address,
860
+ setting=BinarySettings.CURRENT_POSITION,
861
+ unit=unit,
862
+ )
863
+ response = await call_async(
864
+ "binary/device/get_setting",
865
+ request,
866
+ dto.DoubleResponse.from_binary)
867
+ return response.value
868
+
869
+ def __repr__(
870
+ self
871
+ ) -> str:
872
+ """
873
+ Returns a string that represents the device.
874
+
875
+ Returns:
876
+ A string that represents the device.
877
+ """
878
+ request = dto.DeviceEmptyRequest(
879
+ interface_id=self.connection.interface_id,
880
+ device=self.device_address,
881
+ )
882
+ response = call_sync(
883
+ "binary/device/device_to_string",
884
+ request,
885
+ dto.StringResponse.from_binary)
886
+ return response.value
887
+
888
+ def __retrieve_identity(
889
+ self
890
+ ) -> DeviceIdentity:
891
+ """
892
+ Returns identity.
893
+
894
+ Returns:
895
+ Device identity.
896
+ """
897
+ request = dto.DeviceEmptyRequest(
898
+ interface_id=self.connection.interface_id,
899
+ device=self.device_address,
900
+ )
901
+ response = call_sync(
902
+ "binary/device/get_identity",
903
+ request,
904
+ DeviceIdentity.from_binary)
905
+ return response
906
+
907
+ def __retrieve_is_identified(
908
+ self
909
+ ) -> bool:
910
+ """
911
+ Returns whether or not the device have been identified.
912
+
913
+ Returns:
914
+ True if the device has already been identified. False otherwise.
915
+ """
916
+ request = dto.DeviceEmptyRequest(
917
+ interface_id=self.connection.interface_id,
918
+ device=self.device_address,
919
+ )
920
+ response = call_sync(
921
+ "binary/device/get_is_identified",
922
+ request,
923
+ dto.BoolResponse.from_binary)
924
+ return response.value