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,1673 +1,1673 @@
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 ..dto import requests as dto
8
- from ..units import Units, LengthUnits, VelocityUnits, AccelerationUnits, TimeUnits
9
- from .warnings import Warnings
10
- from .axis_settings import AxisSettings
11
- from ..dto.ascii.axis_identity import AxisIdentity
12
- from .storage import AxisStorage
13
- from ..dto.ascii.axis_type import AxisType
14
- from ..dto.ascii.response import Response
15
- from ..dto.measurement import Measurement
16
- from ..dto.ascii.set_state_axis_response import SetStateAxisResponse
17
- from ..dto.firmware_version import FirmwareVersion
18
-
19
- if TYPE_CHECKING:
20
- from .device import Device
21
-
22
-
23
- class Axis:
24
- """
25
- Represents an axis of motion associated with a device.
26
- """
27
-
28
- @property
29
- def device(self) -> 'Device':
30
- """
31
- Device that controls this axis.
32
- """
33
- return self._device
34
-
35
- @property
36
- def axis_number(self) -> int:
37
- """
38
- The axis number identifies the axis on the device.
39
- The first axis has the number one.
40
- """
41
- return self._axis_number
42
-
43
- @property
44
- def settings(self) -> AxisSettings:
45
- """
46
- Settings and properties of this axis.
47
- """
48
- return self._settings
49
-
50
- @property
51
- def storage(self) -> AxisStorage:
52
- """
53
- Key-value storage of this axis.
54
- Requires at least Firmware 7.30.
55
- """
56
- return self._storage
57
-
58
- @property
59
- def warnings(self) -> Warnings:
60
- """
61
- Warnings and faults of this axis.
62
- """
63
- return self._warnings
64
-
65
- @property
66
- def identity(self) -> AxisIdentity:
67
- """
68
- Identity of the axis.
69
- """
70
- return self.__retrieve_identity()
71
-
72
- @property
73
- def peripheral_id(self) -> int:
74
- """
75
- Unique ID of the peripheral hardware.
76
- """
77
- return self.identity.peripheral_id
78
-
79
- @property
80
- def peripheral_name(self) -> str:
81
- """
82
- Name of the peripheral.
83
- """
84
- return self.identity.peripheral_name
85
-
86
- @property
87
- def peripheral_serial_number(self) -> int:
88
- """
89
- Serial number of the peripheral, or 0 when not applicable.
90
- """
91
- return self.identity.peripheral_serial_number
92
-
93
- @property
94
- def is_peripheral(self) -> bool:
95
- """
96
- Indicates whether the axis is a peripheral or part of an integrated device.
97
- """
98
- return self.identity.is_peripheral
99
-
100
- @property
101
- def axis_type(self) -> AxisType:
102
- """
103
- Determines the type of an axis and units it accepts.
104
- """
105
- return self.identity.axis_type
106
-
107
- @property
108
- def resolution(self) -> int:
109
- """
110
- The number of microsteps per full step for motion axes. Always equal to 0 for non-motion axes.
111
- """
112
- return self.identity.resolution
113
-
114
- @property
115
- def label(self) -> str:
116
- """
117
- User-assigned label of the peripheral.
118
- """
119
- return self.__retrieve_label()
120
-
121
- def __init__(self, device: 'Device', axis_number: int):
122
- self._device: 'Device' = device
123
- self._axis_number: int = axis_number
124
- self._settings: AxisSettings = AxisSettings(self)
125
- self._storage: AxisStorage = AxisStorage(self)
126
- self._warnings: Warnings = Warnings(device, axis_number)
127
-
128
- def home(
129
- self,
130
- wait_until_idle: bool = True
131
- ) -> None:
132
- """
133
- Homes axis. Axis returns to its homing position.
134
-
135
- Args:
136
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
137
- """
138
- request = dto.DeviceHomeRequest(
139
- interface_id=self.device.connection.interface_id,
140
- device=self.device.device_address,
141
- axis=self.axis_number,
142
- wait_until_idle=wait_until_idle,
143
- )
144
- call("device/home", request)
145
-
146
- async def home_async(
147
- self,
148
- wait_until_idle: bool = True
149
- ) -> None:
150
- """
151
- Homes axis. Axis returns to its homing position.
152
-
153
- Args:
154
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
155
- """
156
- request = dto.DeviceHomeRequest(
157
- interface_id=self.device.connection.interface_id,
158
- device=self.device.device_address,
159
- axis=self.axis_number,
160
- wait_until_idle=wait_until_idle,
161
- )
162
- await call_async("device/home", request)
163
-
164
- def stop(
165
- self,
166
- wait_until_idle: bool = True
167
- ) -> None:
168
- """
169
- Stops ongoing axis movement. Decelerates until zero speed.
170
-
171
- Args:
172
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
173
- """
174
- request = dto.DeviceStopRequest(
175
- interface_id=self.device.connection.interface_id,
176
- device=self.device.device_address,
177
- axis=self.axis_number,
178
- wait_until_idle=wait_until_idle,
179
- )
180
- call("device/stop", request)
181
-
182
- async def stop_async(
183
- self,
184
- wait_until_idle: bool = True
185
- ) -> None:
186
- """
187
- Stops ongoing axis movement. Decelerates until zero speed.
188
-
189
- Args:
190
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
191
- """
192
- request = dto.DeviceStopRequest(
193
- interface_id=self.device.connection.interface_id,
194
- device=self.device.device_address,
195
- axis=self.axis_number,
196
- wait_until_idle=wait_until_idle,
197
- )
198
- await call_async("device/stop", request)
199
-
200
- def park(
201
- self
202
- ) -> None:
203
- """
204
- Parks the axis in anticipation of turning the power off.
205
- It can later be powered on, unparked, and moved without first having to home it.
206
- """
207
- request = dto.AxisEmptyRequest(
208
- interface_id=self.device.connection.interface_id,
209
- device=self.device.device_address,
210
- axis=self.axis_number,
211
- )
212
- call("device/park", request)
213
-
214
- async def park_async(
215
- self
216
- ) -> None:
217
- """
218
- Parks the axis in anticipation of turning the power off.
219
- It can later be powered on, unparked, and moved without first having to home it.
220
- """
221
- request = dto.AxisEmptyRequest(
222
- interface_id=self.device.connection.interface_id,
223
- device=self.device.device_address,
224
- axis=self.axis_number,
225
- )
226
- await call_async("device/park", request)
227
-
228
- def unpark(
229
- self
230
- ) -> None:
231
- """
232
- Unparks axis. Axis will now be able to move.
233
- """
234
- request = dto.AxisEmptyRequest(
235
- interface_id=self.device.connection.interface_id,
236
- device=self.device.device_address,
237
- axis=self.axis_number,
238
- )
239
- call("device/unpark", request)
240
-
241
- async def unpark_async(
242
- self
243
- ) -> None:
244
- """
245
- Unparks axis. Axis will now be able to move.
246
- """
247
- request = dto.AxisEmptyRequest(
248
- interface_id=self.device.connection.interface_id,
249
- device=self.device.device_address,
250
- axis=self.axis_number,
251
- )
252
- await call_async("device/unpark", request)
253
-
254
- def is_parked(
255
- self
256
- ) -> bool:
257
- """
258
- Returns bool indicating whether the axis is parked or not.
259
-
260
- Returns:
261
- True if the axis is currently parked. False otherwise.
262
- """
263
- request = dto.AxisEmptyRequest(
264
- interface_id=self.device.connection.interface_id,
265
- device=self.device.device_address,
266
- axis=self.axis_number,
267
- )
268
- response = call(
269
- "device/is_parked",
270
- request,
271
- dto.BoolResponse.from_binary)
272
- return response.value
273
-
274
- async def is_parked_async(
275
- self
276
- ) -> bool:
277
- """
278
- Returns bool indicating whether the axis is parked or not.
279
-
280
- Returns:
281
- True if the axis is currently parked. False otherwise.
282
- """
283
- request = dto.AxisEmptyRequest(
284
- interface_id=self.device.connection.interface_id,
285
- device=self.device.device_address,
286
- axis=self.axis_number,
287
- )
288
- response = await call_async(
289
- "device/is_parked",
290
- request,
291
- dto.BoolResponse.from_binary)
292
- return response.value
293
-
294
- def wait_until_idle(
295
- self,
296
- throw_error_on_fault: bool = True
297
- ) -> None:
298
- """
299
- Waits until axis stops moving.
300
-
301
- Args:
302
- throw_error_on_fault: Determines whether to throw error when fault is observed.
303
- """
304
- request = dto.DeviceWaitUntilIdleRequest(
305
- interface_id=self.device.connection.interface_id,
306
- device=self.device.device_address,
307
- axis=self.axis_number,
308
- throw_error_on_fault=throw_error_on_fault,
309
- )
310
- call("device/wait_until_idle", request)
311
-
312
- async def wait_until_idle_async(
313
- self,
314
- throw_error_on_fault: bool = True
315
- ) -> None:
316
- """
317
- Waits until axis stops moving.
318
-
319
- Args:
320
- throw_error_on_fault: Determines whether to throw error when fault is observed.
321
- """
322
- request = dto.DeviceWaitUntilIdleRequest(
323
- interface_id=self.device.connection.interface_id,
324
- device=self.device.device_address,
325
- axis=self.axis_number,
326
- throw_error_on_fault=throw_error_on_fault,
327
- )
328
- await call_async("device/wait_until_idle", request)
329
-
330
- def is_busy(
331
- self
332
- ) -> bool:
333
- """
334
- Returns bool indicating whether the axis is executing a motion command.
335
-
336
- Returns:
337
- True if the axis is currently executing a motion command.
338
- """
339
- request = dto.AxisEmptyRequest(
340
- interface_id=self.device.connection.interface_id,
341
- device=self.device.device_address,
342
- axis=self.axis_number,
343
- )
344
- response = call(
345
- "device/is_busy",
346
- request,
347
- dto.BoolResponse.from_binary)
348
- return response.value
349
-
350
- async def is_busy_async(
351
- self
352
- ) -> bool:
353
- """
354
- Returns bool indicating whether the axis is executing a motion command.
355
-
356
- Returns:
357
- True if the axis is currently executing a motion command.
358
- """
359
- request = dto.AxisEmptyRequest(
360
- interface_id=self.device.connection.interface_id,
361
- device=self.device.device_address,
362
- axis=self.axis_number,
363
- )
364
- response = await call_async(
365
- "device/is_busy",
366
- request,
367
- dto.BoolResponse.from_binary)
368
- return response.value
369
-
370
- def is_homed(
371
- self
372
- ) -> bool:
373
- """
374
- Returns bool indicating whether the axis has position reference and was homed.
375
-
376
- Returns:
377
- True if the axis has position reference and was homed.
378
- """
379
- request = dto.AxisEmptyRequest(
380
- interface_id=self.device.connection.interface_id,
381
- device=self.device.device_address,
382
- axis=self.axis_number,
383
- )
384
- response = call(
385
- "device/is_homed",
386
- request,
387
- dto.BoolResponse.from_binary)
388
- return response.value
389
-
390
- async def is_homed_async(
391
- self
392
- ) -> bool:
393
- """
394
- Returns bool indicating whether the axis has position reference and was homed.
395
-
396
- Returns:
397
- True if the axis has position reference and was homed.
398
- """
399
- request = dto.AxisEmptyRequest(
400
- interface_id=self.device.connection.interface_id,
401
- device=self.device.device_address,
402
- axis=self.axis_number,
403
- )
404
- response = await call_async(
405
- "device/is_homed",
406
- request,
407
- dto.BoolResponse.from_binary)
408
- return response.value
409
-
410
- def move_absolute(
411
- self,
412
- position: float,
413
- unit: LengthUnits = Units.NATIVE,
414
- wait_until_idle: bool = True,
415
- velocity: float = 0,
416
- velocity_unit: VelocityUnits = Units.NATIVE,
417
- acceleration: float = 0,
418
- acceleration_unit: AccelerationUnits = Units.NATIVE
419
- ) -> None:
420
- """
421
- Move axis to absolute position.
422
-
423
- Args:
424
- position: Absolute position.
425
- unit: Units of position.
426
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
427
- velocity: Movement velocity.
428
- Default value of 0 indicates that the maxspeed setting is used instead.
429
- Requires at least Firmware 7.25.
430
- velocity_unit: Units of velocity.
431
- acceleration: Movement acceleration.
432
- Default value of 0 indicates that the accel setting is used instead.
433
- Requires at least Firmware 7.25.
434
- acceleration_unit: Units of acceleration.
435
- """
436
- request = dto.DeviceMoveRequest(
437
- interface_id=self.device.connection.interface_id,
438
- device=self.device.device_address,
439
- axis=self.axis_number,
440
- type=dto.AxisMoveType.ABS,
441
- arg=position,
442
- unit=unit,
443
- wait_until_idle=wait_until_idle,
444
- velocity=velocity,
445
- velocity_unit=velocity_unit,
446
- acceleration=acceleration,
447
- acceleration_unit=acceleration_unit,
448
- )
449
- call("device/move", request)
450
-
451
- async def move_absolute_async(
452
- self,
453
- position: float,
454
- unit: LengthUnits = Units.NATIVE,
455
- wait_until_idle: bool = True,
456
- velocity: float = 0,
457
- velocity_unit: VelocityUnits = Units.NATIVE,
458
- acceleration: float = 0,
459
- acceleration_unit: AccelerationUnits = Units.NATIVE
460
- ) -> None:
461
- """
462
- Move axis to absolute position.
463
-
464
- Args:
465
- position: Absolute position.
466
- unit: Units of position.
467
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
468
- velocity: Movement velocity.
469
- Default value of 0 indicates that the maxspeed setting is used instead.
470
- Requires at least Firmware 7.25.
471
- velocity_unit: Units of velocity.
472
- acceleration: Movement acceleration.
473
- Default value of 0 indicates that the accel setting is used instead.
474
- Requires at least Firmware 7.25.
475
- acceleration_unit: Units of acceleration.
476
- """
477
- request = dto.DeviceMoveRequest(
478
- interface_id=self.device.connection.interface_id,
479
- device=self.device.device_address,
480
- axis=self.axis_number,
481
- type=dto.AxisMoveType.ABS,
482
- arg=position,
483
- unit=unit,
484
- wait_until_idle=wait_until_idle,
485
- velocity=velocity,
486
- velocity_unit=velocity_unit,
487
- acceleration=acceleration,
488
- acceleration_unit=acceleration_unit,
489
- )
490
- await call_async("device/move", request)
491
-
492
- def move_max(
493
- self,
494
- wait_until_idle: bool = True,
495
- velocity: float = 0,
496
- velocity_unit: VelocityUnits = Units.NATIVE,
497
- acceleration: float = 0,
498
- acceleration_unit: AccelerationUnits = Units.NATIVE
499
- ) -> None:
500
- """
501
- Moves the axis to the maximum position as specified by limit.max.
502
-
503
- Args:
504
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
505
- velocity: Movement velocity.
506
- Default value of 0 indicates that the maxspeed setting is used instead.
507
- Requires at least Firmware 7.25.
508
- velocity_unit: Units of velocity.
509
- acceleration: Movement acceleration.
510
- Default value of 0 indicates that the accel setting is used instead.
511
- Requires at least Firmware 7.25.
512
- acceleration_unit: Units of acceleration.
513
- """
514
- request = dto.DeviceMoveRequest(
515
- interface_id=self.device.connection.interface_id,
516
- device=self.device.device_address,
517
- axis=self.axis_number,
518
- type=dto.AxisMoveType.MAX,
519
- wait_until_idle=wait_until_idle,
520
- velocity=velocity,
521
- velocity_unit=velocity_unit,
522
- acceleration=acceleration,
523
- acceleration_unit=acceleration_unit,
524
- )
525
- call("device/move", request)
526
-
527
- async def move_max_async(
528
- self,
529
- wait_until_idle: bool = True,
530
- velocity: float = 0,
531
- velocity_unit: VelocityUnits = Units.NATIVE,
532
- acceleration: float = 0,
533
- acceleration_unit: AccelerationUnits = Units.NATIVE
534
- ) -> None:
535
- """
536
- Moves the axis to the maximum position as specified by limit.max.
537
-
538
- Args:
539
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
540
- velocity: Movement velocity.
541
- Default value of 0 indicates that the maxspeed setting is used instead.
542
- Requires at least Firmware 7.25.
543
- velocity_unit: Units of velocity.
544
- acceleration: Movement acceleration.
545
- Default value of 0 indicates that the accel setting is used instead.
546
- Requires at least Firmware 7.25.
547
- acceleration_unit: Units of acceleration.
548
- """
549
- request = dto.DeviceMoveRequest(
550
- interface_id=self.device.connection.interface_id,
551
- device=self.device.device_address,
552
- axis=self.axis_number,
553
- type=dto.AxisMoveType.MAX,
554
- wait_until_idle=wait_until_idle,
555
- velocity=velocity,
556
- velocity_unit=velocity_unit,
557
- acceleration=acceleration,
558
- acceleration_unit=acceleration_unit,
559
- )
560
- await call_async("device/move", request)
561
-
562
- def move_min(
563
- self,
564
- wait_until_idle: bool = True,
565
- velocity: float = 0,
566
- velocity_unit: VelocityUnits = Units.NATIVE,
567
- acceleration: float = 0,
568
- acceleration_unit: AccelerationUnits = Units.NATIVE
569
- ) -> None:
570
- """
571
- Moves the axis to the minimum position as specified by limit.min.
572
-
573
- Args:
574
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
575
- velocity: Movement velocity.
576
- Default value of 0 indicates that the maxspeed setting is used instead.
577
- Requires at least Firmware 7.25.
578
- velocity_unit: Units of velocity.
579
- acceleration: Movement acceleration.
580
- Default value of 0 indicates that the accel setting is used instead.
581
- Requires at least Firmware 7.25.
582
- acceleration_unit: Units of acceleration.
583
- """
584
- request = dto.DeviceMoveRequest(
585
- interface_id=self.device.connection.interface_id,
586
- device=self.device.device_address,
587
- axis=self.axis_number,
588
- type=dto.AxisMoveType.MIN,
589
- wait_until_idle=wait_until_idle,
590
- velocity=velocity,
591
- velocity_unit=velocity_unit,
592
- acceleration=acceleration,
593
- acceleration_unit=acceleration_unit,
594
- )
595
- call("device/move", request)
596
-
597
- async def move_min_async(
598
- self,
599
- wait_until_idle: bool = True,
600
- velocity: float = 0,
601
- velocity_unit: VelocityUnits = Units.NATIVE,
602
- acceleration: float = 0,
603
- acceleration_unit: AccelerationUnits = Units.NATIVE
604
- ) -> None:
605
- """
606
- Moves the axis to the minimum position as specified by limit.min.
607
-
608
- Args:
609
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
610
- velocity: Movement velocity.
611
- Default value of 0 indicates that the maxspeed setting is used instead.
612
- Requires at least Firmware 7.25.
613
- velocity_unit: Units of velocity.
614
- acceleration: Movement acceleration.
615
- Default value of 0 indicates that the accel setting is used instead.
616
- Requires at least Firmware 7.25.
617
- acceleration_unit: Units of acceleration.
618
- """
619
- request = dto.DeviceMoveRequest(
620
- interface_id=self.device.connection.interface_id,
621
- device=self.device.device_address,
622
- axis=self.axis_number,
623
- type=dto.AxisMoveType.MIN,
624
- wait_until_idle=wait_until_idle,
625
- velocity=velocity,
626
- velocity_unit=velocity_unit,
627
- acceleration=acceleration,
628
- acceleration_unit=acceleration_unit,
629
- )
630
- await call_async("device/move", request)
631
-
632
- def move_relative(
633
- self,
634
- position: float,
635
- unit: LengthUnits = Units.NATIVE,
636
- wait_until_idle: bool = True,
637
- velocity: float = 0,
638
- velocity_unit: VelocityUnits = Units.NATIVE,
639
- acceleration: float = 0,
640
- acceleration_unit: AccelerationUnits = Units.NATIVE
641
- ) -> None:
642
- """
643
- Move axis to position relative to current position.
644
-
645
- Args:
646
- position: Relative position.
647
- unit: Units of position.
648
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
649
- velocity: Movement velocity.
650
- Default value of 0 indicates that the maxspeed setting is used instead.
651
- Requires at least Firmware 7.25.
652
- velocity_unit: Units of velocity.
653
- acceleration: Movement acceleration.
654
- Default value of 0 indicates that the accel setting is used instead.
655
- Requires at least Firmware 7.25.
656
- acceleration_unit: Units of acceleration.
657
- """
658
- request = dto.DeviceMoveRequest(
659
- interface_id=self.device.connection.interface_id,
660
- device=self.device.device_address,
661
- axis=self.axis_number,
662
- type=dto.AxisMoveType.REL,
663
- arg=position,
664
- unit=unit,
665
- wait_until_idle=wait_until_idle,
666
- velocity=velocity,
667
- velocity_unit=velocity_unit,
668
- acceleration=acceleration,
669
- acceleration_unit=acceleration_unit,
670
- )
671
- call("device/move", request)
672
-
673
- async def move_relative_async(
674
- self,
675
- position: float,
676
- unit: LengthUnits = Units.NATIVE,
677
- wait_until_idle: bool = True,
678
- velocity: float = 0,
679
- velocity_unit: VelocityUnits = Units.NATIVE,
680
- acceleration: float = 0,
681
- acceleration_unit: AccelerationUnits = Units.NATIVE
682
- ) -> None:
683
- """
684
- Move axis to position relative to current position.
685
-
686
- Args:
687
- position: Relative position.
688
- unit: Units of position.
689
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
690
- velocity: Movement velocity.
691
- Default value of 0 indicates that the maxspeed setting is used instead.
692
- Requires at least Firmware 7.25.
693
- velocity_unit: Units of velocity.
694
- acceleration: Movement acceleration.
695
- Default value of 0 indicates that the accel setting is used instead.
696
- Requires at least Firmware 7.25.
697
- acceleration_unit: Units of acceleration.
698
- """
699
- request = dto.DeviceMoveRequest(
700
- interface_id=self.device.connection.interface_id,
701
- device=self.device.device_address,
702
- axis=self.axis_number,
703
- type=dto.AxisMoveType.REL,
704
- arg=position,
705
- unit=unit,
706
- wait_until_idle=wait_until_idle,
707
- velocity=velocity,
708
- velocity_unit=velocity_unit,
709
- acceleration=acceleration,
710
- acceleration_unit=acceleration_unit,
711
- )
712
- await call_async("device/move", request)
713
-
714
- def move_velocity(
715
- self,
716
- velocity: float,
717
- unit: VelocityUnits = Units.NATIVE,
718
- acceleration: float = 0,
719
- acceleration_unit: AccelerationUnits = Units.NATIVE
720
- ) -> None:
721
- """
722
- Begins to move axis at specified speed.
723
-
724
- Args:
725
- velocity: Movement velocity.
726
- unit: Units of velocity.
727
- acceleration: Movement acceleration.
728
- Default value of 0 indicates that the accel setting is used instead.
729
- Requires at least Firmware 7.25.
730
- acceleration_unit: Units of acceleration.
731
- """
732
- request = dto.DeviceMoveRequest(
733
- interface_id=self.device.connection.interface_id,
734
- device=self.device.device_address,
735
- axis=self.axis_number,
736
- type=dto.AxisMoveType.VEL,
737
- arg=velocity,
738
- unit=unit,
739
- acceleration=acceleration,
740
- acceleration_unit=acceleration_unit,
741
- )
742
- call("device/move", request)
743
-
744
- async def move_velocity_async(
745
- self,
746
- velocity: float,
747
- unit: VelocityUnits = Units.NATIVE,
748
- acceleration: float = 0,
749
- acceleration_unit: AccelerationUnits = Units.NATIVE
750
- ) -> None:
751
- """
752
- Begins to move axis at specified speed.
753
-
754
- Args:
755
- velocity: Movement velocity.
756
- unit: Units of velocity.
757
- acceleration: Movement acceleration.
758
- Default value of 0 indicates that the accel setting is used instead.
759
- Requires at least Firmware 7.25.
760
- acceleration_unit: Units of acceleration.
761
- """
762
- request = dto.DeviceMoveRequest(
763
- interface_id=self.device.connection.interface_id,
764
- device=self.device.device_address,
765
- axis=self.axis_number,
766
- type=dto.AxisMoveType.VEL,
767
- arg=velocity,
768
- unit=unit,
769
- acceleration=acceleration,
770
- acceleration_unit=acceleration_unit,
771
- )
772
- await call_async("device/move", request)
773
-
774
- def get_position(
775
- self,
776
- unit: LengthUnits = Units.NATIVE
777
- ) -> float:
778
- """
779
- Returns current axis position.
780
-
781
- Args:
782
- unit: Units of position.
783
-
784
- Returns:
785
- Axis position.
786
- """
787
- request = dto.DeviceGetSettingRequest(
788
- interface_id=self.device.connection.interface_id,
789
- device=self.device.device_address,
790
- axis=self.axis_number,
791
- setting="pos",
792
- unit=unit,
793
- )
794
- response = call(
795
- "device/get_setting",
796
- request,
797
- dto.DoubleResponse.from_binary)
798
- return response.value
799
-
800
- async def get_position_async(
801
- self,
802
- unit: LengthUnits = Units.NATIVE
803
- ) -> float:
804
- """
805
- Returns current axis position.
806
-
807
- Args:
808
- unit: Units of position.
809
-
810
- Returns:
811
- Axis position.
812
- """
813
- request = dto.DeviceGetSettingRequest(
814
- interface_id=self.device.connection.interface_id,
815
- device=self.device.device_address,
816
- axis=self.axis_number,
817
- setting="pos",
818
- unit=unit,
819
- )
820
- response = await call_async(
821
- "device/get_setting",
822
- request,
823
- dto.DoubleResponse.from_binary)
824
- return response.value
825
-
826
- def get_number_of_index_positions(
827
- self
828
- ) -> int:
829
- """
830
- Gets number of index positions of the axis.
831
-
832
- Returns:
833
- Number of index positions.
834
- """
835
- request = dto.AxisEmptyRequest(
836
- interface_id=self.device.connection.interface_id,
837
- device=self.device.device_address,
838
- axis=self.axis_number,
839
- )
840
- response = call(
841
- "device/get_index_count",
842
- request,
843
- dto.IntResponse.from_binary)
844
- return response.value
845
-
846
- async def get_number_of_index_positions_async(
847
- self
848
- ) -> int:
849
- """
850
- Gets number of index positions of the axis.
851
-
852
- Returns:
853
- Number of index positions.
854
- """
855
- request = dto.AxisEmptyRequest(
856
- interface_id=self.device.connection.interface_id,
857
- device=self.device.device_address,
858
- axis=self.axis_number,
859
- )
860
- response = await call_async(
861
- "device/get_index_count",
862
- request,
863
- dto.IntResponse.from_binary)
864
- return response.value
865
-
866
- def get_index_position(
867
- self
868
- ) -> int:
869
- """
870
- Returns current axis index position.
871
-
872
- Returns:
873
- Index position starting from 1 or 0 if the position is not an index position.
874
- """
875
- request = dto.AxisEmptyRequest(
876
- interface_id=self.device.connection.interface_id,
877
- device=self.device.device_address,
878
- axis=self.axis_number,
879
- )
880
- response = call(
881
- "device/get_index_position",
882
- request,
883
- dto.IntResponse.from_binary)
884
- return response.value
885
-
886
- async def get_index_position_async(
887
- self
888
- ) -> int:
889
- """
890
- Returns current axis index position.
891
-
892
- Returns:
893
- Index position starting from 1 or 0 if the position is not an index position.
894
- """
895
- request = dto.AxisEmptyRequest(
896
- interface_id=self.device.connection.interface_id,
897
- device=self.device.device_address,
898
- axis=self.axis_number,
899
- )
900
- response = await call_async(
901
- "device/get_index_position",
902
- request,
903
- dto.IntResponse.from_binary)
904
- return response.value
905
-
906
- def move_index(
907
- self,
908
- index: int,
909
- wait_until_idle: bool = True,
910
- velocity: float = 0,
911
- velocity_unit: VelocityUnits = Units.NATIVE,
912
- acceleration: float = 0,
913
- acceleration_unit: AccelerationUnits = Units.NATIVE
914
- ) -> None:
915
- """
916
- Moves the axis to index position.
917
-
918
- Args:
919
- index: Index position. Index positions are numbered from 1.
920
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
921
- velocity: Movement velocity.
922
- Default value of 0 indicates that the maxspeed setting is used instead.
923
- Requires at least Firmware 7.25.
924
- velocity_unit: Units of velocity.
925
- acceleration: Movement acceleration.
926
- Default value of 0 indicates that the accel setting is used instead.
927
- Requires at least Firmware 7.25.
928
- acceleration_unit: Units of acceleration.
929
- """
930
- request = dto.DeviceMoveRequest(
931
- interface_id=self.device.connection.interface_id,
932
- device=self.device.device_address,
933
- axis=self.axis_number,
934
- type=dto.AxisMoveType.INDEX,
935
- arg_int=index,
936
- wait_until_idle=wait_until_idle,
937
- velocity=velocity,
938
- velocity_unit=velocity_unit,
939
- acceleration=acceleration,
940
- acceleration_unit=acceleration_unit,
941
- )
942
- call("device/move", request)
943
-
944
- async def move_index_async(
945
- self,
946
- index: int,
947
- wait_until_idle: bool = True,
948
- velocity: float = 0,
949
- velocity_unit: VelocityUnits = Units.NATIVE,
950
- acceleration: float = 0,
951
- acceleration_unit: AccelerationUnits = Units.NATIVE
952
- ) -> None:
953
- """
954
- Moves the axis to index position.
955
-
956
- Args:
957
- index: Index position. Index positions are numbered from 1.
958
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
959
- velocity: Movement velocity.
960
- Default value of 0 indicates that the maxspeed setting is used instead.
961
- Requires at least Firmware 7.25.
962
- velocity_unit: Units of velocity.
963
- acceleration: Movement acceleration.
964
- Default value of 0 indicates that the accel setting is used instead.
965
- Requires at least Firmware 7.25.
966
- acceleration_unit: Units of acceleration.
967
- """
968
- request = dto.DeviceMoveRequest(
969
- interface_id=self.device.connection.interface_id,
970
- device=self.device.device_address,
971
- axis=self.axis_number,
972
- type=dto.AxisMoveType.INDEX,
973
- arg_int=index,
974
- wait_until_idle=wait_until_idle,
975
- velocity=velocity,
976
- velocity_unit=velocity_unit,
977
- acceleration=acceleration,
978
- acceleration_unit=acceleration_unit,
979
- )
980
- await call_async("device/move", request)
981
-
982
- def generic_command(
983
- self,
984
- command: str,
985
- check_errors: bool = True,
986
- timeout: int = 0
987
- ) -> Response:
988
- """
989
- Sends a generic ASCII command to this axis.
990
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
991
-
992
- Args:
993
- command: Command and its parameters.
994
- check_errors: Controls whether to throw an exception when the device rejects the command.
995
- timeout: The timeout, in milliseconds, for a device to respond to the command.
996
- Overrides the connection default request timeout.
997
-
998
- Returns:
999
- A response to the command.
1000
- """
1001
- request = dto.GenericCommandRequest(
1002
- interface_id=self.device.connection.interface_id,
1003
- device=self.device.device_address,
1004
- axis=self.axis_number,
1005
- command=command,
1006
- check_errors=check_errors,
1007
- timeout=timeout,
1008
- )
1009
- response = call(
1010
- "interface/generic_command",
1011
- request,
1012
- Response.from_binary)
1013
- return response
1014
-
1015
- async def generic_command_async(
1016
- self,
1017
- command: str,
1018
- check_errors: bool = True,
1019
- timeout: int = 0
1020
- ) -> Response:
1021
- """
1022
- Sends a generic ASCII command to this axis.
1023
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1024
-
1025
- Args:
1026
- command: Command and its parameters.
1027
- check_errors: Controls whether to throw an exception when the device rejects the command.
1028
- timeout: The timeout, in milliseconds, for a device to respond to the command.
1029
- Overrides the connection default request timeout.
1030
-
1031
- Returns:
1032
- A response to the command.
1033
- """
1034
- request = dto.GenericCommandRequest(
1035
- interface_id=self.device.connection.interface_id,
1036
- device=self.device.device_address,
1037
- axis=self.axis_number,
1038
- command=command,
1039
- check_errors=check_errors,
1040
- timeout=timeout,
1041
- )
1042
- response = await call_async(
1043
- "interface/generic_command",
1044
- request,
1045
- Response.from_binary)
1046
- return response
1047
-
1048
- def generic_command_multi_response(
1049
- self,
1050
- command: str,
1051
- check_errors: bool = True,
1052
- timeout: int = 0
1053
- ) -> List[Response]:
1054
- """
1055
- Sends a generic ASCII command to this axis and expect multiple responses.
1056
- Responses are returned in order of arrival.
1057
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1058
-
1059
- Args:
1060
- command: Command and its parameters.
1061
- check_errors: Controls whether to throw an exception when a device rejects the command.
1062
- timeout: The timeout, in milliseconds, for a device to respond to the command.
1063
- Overrides the connection default request timeout.
1064
-
1065
- Returns:
1066
- All responses to the command.
1067
- """
1068
- request = dto.GenericCommandRequest(
1069
- interface_id=self.device.connection.interface_id,
1070
- device=self.device.device_address,
1071
- axis=self.axis_number,
1072
- command=command,
1073
- check_errors=check_errors,
1074
- timeout=timeout,
1075
- )
1076
- response = call(
1077
- "interface/generic_command_multi_response",
1078
- request,
1079
- dto.GenericCommandResponseCollection.from_binary)
1080
- return response.responses
1081
-
1082
- async def generic_command_multi_response_async(
1083
- self,
1084
- command: str,
1085
- check_errors: bool = True,
1086
- timeout: int = 0
1087
- ) -> List[Response]:
1088
- """
1089
- Sends a generic ASCII command to this axis and expect multiple responses.
1090
- Responses are returned in order of arrival.
1091
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1092
-
1093
- Args:
1094
- command: Command and its parameters.
1095
- check_errors: Controls whether to throw an exception when a device rejects the command.
1096
- timeout: The timeout, in milliseconds, for a device to respond to the command.
1097
- Overrides the connection default request timeout.
1098
-
1099
- Returns:
1100
- All responses to the command.
1101
- """
1102
- request = dto.GenericCommandRequest(
1103
- interface_id=self.device.connection.interface_id,
1104
- device=self.device.device_address,
1105
- axis=self.axis_number,
1106
- command=command,
1107
- check_errors=check_errors,
1108
- timeout=timeout,
1109
- )
1110
- response = await call_async(
1111
- "interface/generic_command_multi_response",
1112
- request,
1113
- dto.GenericCommandResponseCollection.from_binary)
1114
- return response.responses
1115
-
1116
- def generic_command_no_response(
1117
- self,
1118
- command: str
1119
- ) -> None:
1120
- """
1121
- Sends a generic ASCII command to this axis without expecting a response and without adding a message ID
1122
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1123
-
1124
- Args:
1125
- command: Command and its parameters.
1126
- """
1127
- request = dto.GenericCommandRequest(
1128
- interface_id=self.device.connection.interface_id,
1129
- device=self.device.device_address,
1130
- axis=self.axis_number,
1131
- command=command,
1132
- )
1133
- call("interface/generic_command_no_response", request)
1134
-
1135
- async def generic_command_no_response_async(
1136
- self,
1137
- command: str
1138
- ) -> None:
1139
- """
1140
- Sends a generic ASCII command to this axis without expecting a response and without adding a message ID
1141
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1142
-
1143
- Args:
1144
- command: Command and its parameters.
1145
- """
1146
- request = dto.GenericCommandRequest(
1147
- interface_id=self.device.connection.interface_id,
1148
- device=self.device.device_address,
1149
- axis=self.axis_number,
1150
- command=command,
1151
- )
1152
- await call_async("interface/generic_command_no_response", request)
1153
-
1154
- def prepare_command(
1155
- self,
1156
- command_template: str,
1157
- *parameters: Measurement
1158
- ) -> str:
1159
- """
1160
- Formats parameters into a command and performs unit conversions.
1161
- Parameters in the command template are denoted by a question mark.
1162
- Command returned is only valid for this axis and this device.
1163
- For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1164
-
1165
- Args:
1166
- command_template: Template of a command to prepare. Parameters are denoted by question marks.
1167
- parameters: Variable number of command parameters.
1168
-
1169
- Returns:
1170
- Command with converted parameters.
1171
- """
1172
- request = dto.PrepareCommandRequest(
1173
- interface_id=self.device.connection.interface_id,
1174
- device=self.device.device_address,
1175
- axis=self.axis_number,
1176
- command_template=command_template,
1177
- parameters=list(parameters),
1178
- )
1179
- response = call_sync(
1180
- "device/prepare_command",
1181
- request,
1182
- dto.StringResponse.from_binary)
1183
- return response.value
1184
-
1185
- def set_label(
1186
- self,
1187
- label: str
1188
- ) -> None:
1189
- """
1190
- Sets the user-assigned peripheral label.
1191
- The label is stored on the controller and recognized by other software.
1192
-
1193
- Args:
1194
- label: Label to set.
1195
- """
1196
- request = dto.DeviceSetStorageRequest(
1197
- interface_id=self.device.connection.interface_id,
1198
- device=self.device.device_address,
1199
- axis=self.axis_number,
1200
- value=label,
1201
- )
1202
- call("device/set_label", request)
1203
-
1204
- async def set_label_async(
1205
- self,
1206
- label: str
1207
- ) -> None:
1208
- """
1209
- Sets the user-assigned peripheral label.
1210
- The label is stored on the controller and recognized by other software.
1211
-
1212
- Args:
1213
- label: Label to set.
1214
- """
1215
- request = dto.DeviceSetStorageRequest(
1216
- interface_id=self.device.connection.interface_id,
1217
- device=self.device.device_address,
1218
- axis=self.axis_number,
1219
- value=label,
1220
- )
1221
- await call_async("device/set_label", request)
1222
-
1223
- def __retrieve_label(
1224
- self
1225
- ) -> str:
1226
- """
1227
- Gets the peripheral name.
1228
-
1229
- Returns:
1230
- The label.
1231
- """
1232
- request = dto.AxisEmptyRequest(
1233
- interface_id=self.device.connection.interface_id,
1234
- device=self.device.device_address,
1235
- axis=self.axis_number,
1236
- )
1237
- response = call_sync(
1238
- "device/get_label",
1239
- request,
1240
- dto.StringResponse.from_binary)
1241
- return response.value
1242
-
1243
- def __repr__(
1244
- self
1245
- ) -> str:
1246
- """
1247
- Returns a string that represents the axis.
1248
-
1249
- Returns:
1250
- A string that represents the axis.
1251
- """
1252
- request = dto.AxisToStringRequest(
1253
- interface_id=self.device.connection.interface_id,
1254
- device=self.device.device_address,
1255
- axis=self.axis_number,
1256
- )
1257
- response = call_sync(
1258
- "device/axis_to_string",
1259
- request,
1260
- dto.StringResponse.from_binary)
1261
- return response.value
1262
-
1263
- def get_state(
1264
- self
1265
- ) -> str:
1266
- """
1267
- Returns a serialization of the current axis state that can be saved and reapplied.
1268
-
1269
- Returns:
1270
- A serialization of the current state of the axis.
1271
- """
1272
- request = dto.AxisEmptyRequest(
1273
- interface_id=self.device.connection.interface_id,
1274
- device=self.device.device_address,
1275
- axis=self.axis_number,
1276
- )
1277
- response = call(
1278
- "device/get_state",
1279
- request,
1280
- dto.StringResponse.from_binary)
1281
- return response.value
1282
-
1283
- async def get_state_async(
1284
- self
1285
- ) -> str:
1286
- """
1287
- Returns a serialization of the current axis state that can be saved and reapplied.
1288
-
1289
- Returns:
1290
- A serialization of the current state of the axis.
1291
- """
1292
- request = dto.AxisEmptyRequest(
1293
- interface_id=self.device.connection.interface_id,
1294
- device=self.device.device_address,
1295
- axis=self.axis_number,
1296
- )
1297
- response = await call_async(
1298
- "device/get_state",
1299
- request,
1300
- dto.StringResponse.from_binary)
1301
- return response.value
1302
-
1303
- def set_state(
1304
- self,
1305
- state: str
1306
- ) -> SetStateAxisResponse:
1307
- """
1308
- Applies a saved state to this axis.
1309
-
1310
- Args:
1311
- state: The state object to apply to this axis.
1312
-
1313
- Returns:
1314
- Reports of any issues that were handled, but caused the state to not be exactly restored.
1315
- """
1316
- request = dto.SetStateRequest(
1317
- interface_id=self.device.connection.interface_id,
1318
- device=self.device.device_address,
1319
- axis=self.axis_number,
1320
- state=state,
1321
- )
1322
- response = call(
1323
- "device/set_axis_state",
1324
- request,
1325
- SetStateAxisResponse.from_binary)
1326
- return response
1327
-
1328
- async def set_state_async(
1329
- self,
1330
- state: str
1331
- ) -> SetStateAxisResponse:
1332
- """
1333
- Applies a saved state to this axis.
1334
-
1335
- Args:
1336
- state: The state object to apply to this axis.
1337
-
1338
- Returns:
1339
- Reports of any issues that were handled, but caused the state to not be exactly restored.
1340
- """
1341
- request = dto.SetStateRequest(
1342
- interface_id=self.device.connection.interface_id,
1343
- device=self.device.device_address,
1344
- axis=self.axis_number,
1345
- state=state,
1346
- )
1347
- response = await call_async(
1348
- "device/set_axis_state",
1349
- request,
1350
- SetStateAxisResponse.from_binary)
1351
- return response
1352
-
1353
- def can_set_state(
1354
- self,
1355
- state: str,
1356
- firmware_version: Optional[FirmwareVersion] = None
1357
- ) -> Optional[str]:
1358
- """
1359
- Checks if a state can be applied to this axis.
1360
- This only covers exceptions that can be determined statically such as mismatches of ID or version,
1361
- the process of applying the state can still fail when running.
1362
-
1363
- Args:
1364
- state: The state object to check against.
1365
- firmware_version: The firmware version of the device to apply the state to.
1366
- Use this to ensure the state will still be compatible after an update.
1367
-
1368
- Returns:
1369
- An explanation of why this state cannot be set to this axis.
1370
- """
1371
- request = dto.CanSetStateRequest(
1372
- interface_id=self.device.connection.interface_id,
1373
- device=self.device.device_address,
1374
- axis=self.axis_number,
1375
- state=state,
1376
- firmware_version=firmware_version,
1377
- )
1378
- response = call(
1379
- "device/can_set_axis_state",
1380
- request,
1381
- dto.CanSetStateAxisResponse.from_binary)
1382
- return response.error
1383
-
1384
- async def can_set_state_async(
1385
- self,
1386
- state: str,
1387
- firmware_version: Optional[FirmwareVersion] = None
1388
- ) -> Optional[str]:
1389
- """
1390
- Checks if a state can be applied to this axis.
1391
- This only covers exceptions that can be determined statically such as mismatches of ID or version,
1392
- the process of applying the state can still fail when running.
1393
-
1394
- Args:
1395
- state: The state object to check against.
1396
- firmware_version: The firmware version of the device to apply the state to.
1397
- Use this to ensure the state will still be compatible after an update.
1398
-
1399
- Returns:
1400
- An explanation of why this state cannot be set to this axis.
1401
- """
1402
- request = dto.CanSetStateRequest(
1403
- interface_id=self.device.connection.interface_id,
1404
- device=self.device.device_address,
1405
- axis=self.axis_number,
1406
- state=state,
1407
- firmware_version=firmware_version,
1408
- )
1409
- response = await call_async(
1410
- "device/can_set_axis_state",
1411
- request,
1412
- dto.CanSetStateAxisResponse.from_binary)
1413
- return response.error
1414
-
1415
- def __retrieve_identity(
1416
- self
1417
- ) -> AxisIdentity:
1418
- """
1419
- Returns identity.
1420
-
1421
- Returns:
1422
- Axis identity.
1423
- """
1424
- request = dto.AxisEmptyRequest(
1425
- interface_id=self.device.connection.interface_id,
1426
- device=self.device.device_address,
1427
- axis=self.axis_number,
1428
- )
1429
- response = call_sync(
1430
- "device/get_axis_identity",
1431
- request,
1432
- AxisIdentity.from_binary)
1433
- return response
1434
-
1435
- def driver_disable(
1436
- self
1437
- ) -> None:
1438
- """
1439
- Disables the driver, which prevents current from being sent to the motor or load.
1440
- If the driver is already disabled, the driver remains disabled.
1441
- """
1442
- request = dto.AxisEmptyRequest(
1443
- interface_id=self.device.connection.interface_id,
1444
- device=self.device.device_address,
1445
- axis=self.axis_number,
1446
- )
1447
- call("device/driver_disable", request)
1448
-
1449
- async def driver_disable_async(
1450
- self
1451
- ) -> None:
1452
- """
1453
- Disables the driver, which prevents current from being sent to the motor or load.
1454
- If the driver is already disabled, the driver remains disabled.
1455
- """
1456
- request = dto.AxisEmptyRequest(
1457
- interface_id=self.device.connection.interface_id,
1458
- device=self.device.device_address,
1459
- axis=self.axis_number,
1460
- )
1461
- await call_async("device/driver_disable", request)
1462
-
1463
- def driver_enable(
1464
- self,
1465
- timeout: float = 10
1466
- ) -> None:
1467
- """
1468
- Attempts to enable the driver repeatedly for the specified timeout.
1469
- If the driver is already enabled, the driver remains enabled.
1470
-
1471
- Args:
1472
- timeout: Timeout in seconds. Specify 0 to attempt to enable the driver once.
1473
- """
1474
- request = dto.DriverEnableRequest(
1475
- interface_id=self.device.connection.interface_id,
1476
- device=self.device.device_address,
1477
- axis=self.axis_number,
1478
- timeout=timeout,
1479
- )
1480
- call("device/driver_enable", request)
1481
-
1482
- async def driver_enable_async(
1483
- self,
1484
- timeout: float = 10
1485
- ) -> None:
1486
- """
1487
- Attempts to enable the driver repeatedly for the specified timeout.
1488
- If the driver is already enabled, the driver remains enabled.
1489
-
1490
- Args:
1491
- timeout: Timeout in seconds. Specify 0 to attempt to enable the driver once.
1492
- """
1493
- request = dto.DriverEnableRequest(
1494
- interface_id=self.device.connection.interface_id,
1495
- device=self.device.device_address,
1496
- axis=self.axis_number,
1497
- timeout=timeout,
1498
- )
1499
- await call_async("device/driver_enable", request)
1500
-
1501
- def activate(
1502
- self
1503
- ) -> None:
1504
- """
1505
- Activates a peripheral on this axis.
1506
- Removes all identity information for the device.
1507
- Run the identify method on the device after activating to refresh the information.
1508
- """
1509
- request = dto.AxisEmptyRequest(
1510
- interface_id=self.device.connection.interface_id,
1511
- device=self.device.device_address,
1512
- axis=self.axis_number,
1513
- )
1514
- call("device/activate", request)
1515
-
1516
- async def activate_async(
1517
- self
1518
- ) -> None:
1519
- """
1520
- Activates a peripheral on this axis.
1521
- Removes all identity information for the device.
1522
- Run the identify method on the device after activating to refresh the information.
1523
- """
1524
- request = dto.AxisEmptyRequest(
1525
- interface_id=self.device.connection.interface_id,
1526
- device=self.device.device_address,
1527
- axis=self.axis_number,
1528
- )
1529
- await call_async("device/activate", request)
1530
-
1531
- def restore(
1532
- self
1533
- ) -> None:
1534
- """
1535
- Restores all axis settings to their default values.
1536
- Deletes all zaber axis storage keys.
1537
- Disables lockstep if the axis is part of one. Unparks the axis.
1538
- Preserves storage.
1539
- The device needs to be identified again after the restore.
1540
- """
1541
- request = dto.DeviceRestoreRequest(
1542
- interface_id=self.device.connection.interface_id,
1543
- device=self.device.device_address,
1544
- axis=self.axis_number,
1545
- )
1546
- call("device/restore", request)
1547
-
1548
- async def restore_async(
1549
- self
1550
- ) -> None:
1551
- """
1552
- Restores all axis settings to their default values.
1553
- Deletes all zaber axis storage keys.
1554
- Disables lockstep if the axis is part of one. Unparks the axis.
1555
- Preserves storage.
1556
- The device needs to be identified again after the restore.
1557
- """
1558
- request = dto.DeviceRestoreRequest(
1559
- interface_id=self.device.connection.interface_id,
1560
- device=self.device.device_address,
1561
- axis=self.axis_number,
1562
- )
1563
- await call_async("device/restore", request)
1564
-
1565
- def move_sin(
1566
- self,
1567
- amplitude: float,
1568
- amplitude_units: LengthUnits,
1569
- period: float,
1570
- period_units: TimeUnits,
1571
- count: float = 0,
1572
- wait_until_idle: bool = True
1573
- ) -> None:
1574
- """
1575
- Moves the axis in a sinusoidal trajectory.
1576
-
1577
- Args:
1578
- amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
1579
- amplitude_units: Units of position.
1580
- period: Period of the sinusoidal motion in milliseconds.
1581
- period_units: Units of time.
1582
- count: Number of sinusoidal cycles to complete.
1583
- Must be a multiple of 0.5
1584
- If count is not specified or set to 0, the axis will move indefinitely.
1585
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
1586
- """
1587
- request = dto.DeviceMoveSinRequest(
1588
- interface_id=self.device.connection.interface_id,
1589
- device=self.device.device_address,
1590
- axis=self.axis_number,
1591
- amplitude=amplitude,
1592
- amplitude_units=amplitude_units,
1593
- period=period,
1594
- period_units=period_units,
1595
- count=count,
1596
- wait_until_idle=wait_until_idle,
1597
- )
1598
- call("device/move_sin", request)
1599
-
1600
- async def move_sin_async(
1601
- self,
1602
- amplitude: float,
1603
- amplitude_units: LengthUnits,
1604
- period: float,
1605
- period_units: TimeUnits,
1606
- count: float = 0,
1607
- wait_until_idle: bool = True
1608
- ) -> None:
1609
- """
1610
- Moves the axis in a sinusoidal trajectory.
1611
-
1612
- Args:
1613
- amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
1614
- amplitude_units: Units of position.
1615
- period: Period of the sinusoidal motion in milliseconds.
1616
- period_units: Units of time.
1617
- count: Number of sinusoidal cycles to complete.
1618
- Must be a multiple of 0.5
1619
- If count is not specified or set to 0, the axis will move indefinitely.
1620
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
1621
- """
1622
- request = dto.DeviceMoveSinRequest(
1623
- interface_id=self.device.connection.interface_id,
1624
- device=self.device.device_address,
1625
- axis=self.axis_number,
1626
- amplitude=amplitude,
1627
- amplitude_units=amplitude_units,
1628
- period=period,
1629
- period_units=period_units,
1630
- count=count,
1631
- wait_until_idle=wait_until_idle,
1632
- )
1633
- await call_async("device/move_sin", request)
1634
-
1635
- def move_sin_stop(
1636
- self,
1637
- wait_until_idle: bool = True
1638
- ) -> None:
1639
- """
1640
- Stops the axis at the end of the sinusoidal trajectory.
1641
- If the sinusoidal motion was started with an integer-plus-half cycle count,
1642
- the motion ends at the half-way point of the sinusoidal trajectory.
1643
-
1644
- Args:
1645
- wait_until_idle: Determines whether function should return after the movement is finished.
1646
- """
1647
- request = dto.DeviceStopRequest(
1648
- interface_id=self.device.connection.interface_id,
1649
- device=self.device.device_address,
1650
- axis=self.axis_number,
1651
- wait_until_idle=wait_until_idle,
1652
- )
1653
- call("device/move_sin_stop", request)
1654
-
1655
- async def move_sin_stop_async(
1656
- self,
1657
- wait_until_idle: bool = True
1658
- ) -> None:
1659
- """
1660
- Stops the axis at the end of the sinusoidal trajectory.
1661
- If the sinusoidal motion was started with an integer-plus-half cycle count,
1662
- the motion ends at the half-way point of the sinusoidal trajectory.
1663
-
1664
- Args:
1665
- wait_until_idle: Determines whether function should return after the movement is finished.
1666
- """
1667
- request = dto.DeviceStopRequest(
1668
- interface_id=self.device.connection.interface_id,
1669
- device=self.device.device_address,
1670
- axis=self.axis_number,
1671
- wait_until_idle=wait_until_idle,
1672
- )
1673
- await call_async("device/move_sin_stop", request)
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 ..dto import requests as dto
8
+ from ..units import Units, LengthUnits, VelocityUnits, AccelerationUnits, TimeUnits
9
+ from .warnings import Warnings
10
+ from .axis_settings import AxisSettings
11
+ from ..dto.ascii.axis_identity import AxisIdentity
12
+ from .storage import AxisStorage
13
+ from ..dto.ascii.axis_type import AxisType
14
+ from ..dto.ascii.response import Response
15
+ from ..dto.measurement import Measurement
16
+ from ..dto.ascii.set_state_axis_response import SetStateAxisResponse
17
+ from ..dto.firmware_version import FirmwareVersion
18
+
19
+ if TYPE_CHECKING:
20
+ from .device import Device
21
+
22
+
23
+ class Axis:
24
+ """
25
+ Represents an axis of motion associated with a device.
26
+ """
27
+
28
+ @property
29
+ def device(self) -> 'Device':
30
+ """
31
+ Device that controls this axis.
32
+ """
33
+ return self._device
34
+
35
+ @property
36
+ def axis_number(self) -> int:
37
+ """
38
+ The axis number identifies the axis on the device.
39
+ The first axis has the number one.
40
+ """
41
+ return self._axis_number
42
+
43
+ @property
44
+ def settings(self) -> AxisSettings:
45
+ """
46
+ Settings and properties of this axis.
47
+ """
48
+ return self._settings
49
+
50
+ @property
51
+ def storage(self) -> AxisStorage:
52
+ """
53
+ Key-value storage of this axis.
54
+ Requires at least Firmware 7.30.
55
+ """
56
+ return self._storage
57
+
58
+ @property
59
+ def warnings(self) -> Warnings:
60
+ """
61
+ Warnings and faults of this axis.
62
+ """
63
+ return self._warnings
64
+
65
+ @property
66
+ def identity(self) -> AxisIdentity:
67
+ """
68
+ Identity of the axis.
69
+ """
70
+ return self.__retrieve_identity()
71
+
72
+ @property
73
+ def peripheral_id(self) -> int:
74
+ """
75
+ Unique ID of the peripheral hardware.
76
+ """
77
+ return self.identity.peripheral_id
78
+
79
+ @property
80
+ def peripheral_name(self) -> str:
81
+ """
82
+ Name of the peripheral.
83
+ """
84
+ return self.identity.peripheral_name
85
+
86
+ @property
87
+ def peripheral_serial_number(self) -> int:
88
+ """
89
+ Serial number of the peripheral, or 0 when not applicable.
90
+ """
91
+ return self.identity.peripheral_serial_number
92
+
93
+ @property
94
+ def is_peripheral(self) -> bool:
95
+ """
96
+ Indicates whether the axis is a peripheral or part of an integrated device.
97
+ """
98
+ return self.identity.is_peripheral
99
+
100
+ @property
101
+ def axis_type(self) -> AxisType:
102
+ """
103
+ Determines the type of an axis and units it accepts.
104
+ """
105
+ return self.identity.axis_type
106
+
107
+ @property
108
+ def resolution(self) -> int:
109
+ """
110
+ The number of microsteps per full step for motion axes. Always equal to 0 for non-motion axes.
111
+ """
112
+ return self.identity.resolution
113
+
114
+ @property
115
+ def label(self) -> str:
116
+ """
117
+ User-assigned label of the peripheral.
118
+ """
119
+ return self.__retrieve_label()
120
+
121
+ def __init__(self, device: 'Device', axis_number: int):
122
+ self._device: 'Device' = device
123
+ self._axis_number: int = axis_number
124
+ self._settings: AxisSettings = AxisSettings(self)
125
+ self._storage: AxisStorage = AxisStorage(self)
126
+ self._warnings: Warnings = Warnings(device, axis_number)
127
+
128
+ def home(
129
+ self,
130
+ wait_until_idle: bool = True
131
+ ) -> None:
132
+ """
133
+ Homes axis. Axis returns to its homing position.
134
+
135
+ Args:
136
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
137
+ """
138
+ request = dto.DeviceHomeRequest(
139
+ interface_id=self.device.connection.interface_id,
140
+ device=self.device.device_address,
141
+ axis=self.axis_number,
142
+ wait_until_idle=wait_until_idle,
143
+ )
144
+ call("device/home", request)
145
+
146
+ async def home_async(
147
+ self,
148
+ wait_until_idle: bool = True
149
+ ) -> None:
150
+ """
151
+ Homes axis. Axis returns to its homing position.
152
+
153
+ Args:
154
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
155
+ """
156
+ request = dto.DeviceHomeRequest(
157
+ interface_id=self.device.connection.interface_id,
158
+ device=self.device.device_address,
159
+ axis=self.axis_number,
160
+ wait_until_idle=wait_until_idle,
161
+ )
162
+ await call_async("device/home", request)
163
+
164
+ def stop(
165
+ self,
166
+ wait_until_idle: bool = True
167
+ ) -> None:
168
+ """
169
+ Stops ongoing axis movement. Decelerates until zero speed.
170
+
171
+ Args:
172
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
173
+ """
174
+ request = dto.DeviceStopRequest(
175
+ interface_id=self.device.connection.interface_id,
176
+ device=self.device.device_address,
177
+ axis=self.axis_number,
178
+ wait_until_idle=wait_until_idle,
179
+ )
180
+ call("device/stop", request)
181
+
182
+ async def stop_async(
183
+ self,
184
+ wait_until_idle: bool = True
185
+ ) -> None:
186
+ """
187
+ Stops ongoing axis movement. Decelerates until zero speed.
188
+
189
+ Args:
190
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
191
+ """
192
+ request = dto.DeviceStopRequest(
193
+ interface_id=self.device.connection.interface_id,
194
+ device=self.device.device_address,
195
+ axis=self.axis_number,
196
+ wait_until_idle=wait_until_idle,
197
+ )
198
+ await call_async("device/stop", request)
199
+
200
+ def park(
201
+ self
202
+ ) -> None:
203
+ """
204
+ Parks the axis in anticipation of turning the power off.
205
+ It can later be powered on, unparked, and moved without first having to home it.
206
+ """
207
+ request = dto.AxisEmptyRequest(
208
+ interface_id=self.device.connection.interface_id,
209
+ device=self.device.device_address,
210
+ axis=self.axis_number,
211
+ )
212
+ call("device/park", request)
213
+
214
+ async def park_async(
215
+ self
216
+ ) -> None:
217
+ """
218
+ Parks the axis in anticipation of turning the power off.
219
+ It can later be powered on, unparked, and moved without first having to home it.
220
+ """
221
+ request = dto.AxisEmptyRequest(
222
+ interface_id=self.device.connection.interface_id,
223
+ device=self.device.device_address,
224
+ axis=self.axis_number,
225
+ )
226
+ await call_async("device/park", request)
227
+
228
+ def unpark(
229
+ self
230
+ ) -> None:
231
+ """
232
+ Unparks axis. Axis will now be able to move.
233
+ """
234
+ request = dto.AxisEmptyRequest(
235
+ interface_id=self.device.connection.interface_id,
236
+ device=self.device.device_address,
237
+ axis=self.axis_number,
238
+ )
239
+ call("device/unpark", request)
240
+
241
+ async def unpark_async(
242
+ self
243
+ ) -> None:
244
+ """
245
+ Unparks axis. Axis will now be able to move.
246
+ """
247
+ request = dto.AxisEmptyRequest(
248
+ interface_id=self.device.connection.interface_id,
249
+ device=self.device.device_address,
250
+ axis=self.axis_number,
251
+ )
252
+ await call_async("device/unpark", request)
253
+
254
+ def is_parked(
255
+ self
256
+ ) -> bool:
257
+ """
258
+ Returns bool indicating whether the axis is parked or not.
259
+
260
+ Returns:
261
+ True if the axis is currently parked. False otherwise.
262
+ """
263
+ request = dto.AxisEmptyRequest(
264
+ interface_id=self.device.connection.interface_id,
265
+ device=self.device.device_address,
266
+ axis=self.axis_number,
267
+ )
268
+ response = call(
269
+ "device/is_parked",
270
+ request,
271
+ dto.BoolResponse.from_binary)
272
+ return response.value
273
+
274
+ async def is_parked_async(
275
+ self
276
+ ) -> bool:
277
+ """
278
+ Returns bool indicating whether the axis is parked or not.
279
+
280
+ Returns:
281
+ True if the axis is currently parked. False otherwise.
282
+ """
283
+ request = dto.AxisEmptyRequest(
284
+ interface_id=self.device.connection.interface_id,
285
+ device=self.device.device_address,
286
+ axis=self.axis_number,
287
+ )
288
+ response = await call_async(
289
+ "device/is_parked",
290
+ request,
291
+ dto.BoolResponse.from_binary)
292
+ return response.value
293
+
294
+ def wait_until_idle(
295
+ self,
296
+ throw_error_on_fault: bool = True
297
+ ) -> None:
298
+ """
299
+ Waits until axis stops moving.
300
+
301
+ Args:
302
+ throw_error_on_fault: Determines whether to throw error when fault is observed.
303
+ """
304
+ request = dto.DeviceWaitUntilIdleRequest(
305
+ interface_id=self.device.connection.interface_id,
306
+ device=self.device.device_address,
307
+ axis=self.axis_number,
308
+ throw_error_on_fault=throw_error_on_fault,
309
+ )
310
+ call("device/wait_until_idle", request)
311
+
312
+ async def wait_until_idle_async(
313
+ self,
314
+ throw_error_on_fault: bool = True
315
+ ) -> None:
316
+ """
317
+ Waits until axis stops moving.
318
+
319
+ Args:
320
+ throw_error_on_fault: Determines whether to throw error when fault is observed.
321
+ """
322
+ request = dto.DeviceWaitUntilIdleRequest(
323
+ interface_id=self.device.connection.interface_id,
324
+ device=self.device.device_address,
325
+ axis=self.axis_number,
326
+ throw_error_on_fault=throw_error_on_fault,
327
+ )
328
+ await call_async("device/wait_until_idle", request)
329
+
330
+ def is_busy(
331
+ self
332
+ ) -> bool:
333
+ """
334
+ Returns bool indicating whether the axis is executing a motion command.
335
+
336
+ Returns:
337
+ True if the axis is currently executing a motion command.
338
+ """
339
+ request = dto.AxisEmptyRequest(
340
+ interface_id=self.device.connection.interface_id,
341
+ device=self.device.device_address,
342
+ axis=self.axis_number,
343
+ )
344
+ response = call(
345
+ "device/is_busy",
346
+ request,
347
+ dto.BoolResponse.from_binary)
348
+ return response.value
349
+
350
+ async def is_busy_async(
351
+ self
352
+ ) -> bool:
353
+ """
354
+ Returns bool indicating whether the axis is executing a motion command.
355
+
356
+ Returns:
357
+ True if the axis is currently executing a motion command.
358
+ """
359
+ request = dto.AxisEmptyRequest(
360
+ interface_id=self.device.connection.interface_id,
361
+ device=self.device.device_address,
362
+ axis=self.axis_number,
363
+ )
364
+ response = await call_async(
365
+ "device/is_busy",
366
+ request,
367
+ dto.BoolResponse.from_binary)
368
+ return response.value
369
+
370
+ def is_homed(
371
+ self
372
+ ) -> bool:
373
+ """
374
+ Returns bool indicating whether the axis has position reference and was homed.
375
+
376
+ Returns:
377
+ True if the axis has position reference and was homed.
378
+ """
379
+ request = dto.AxisEmptyRequest(
380
+ interface_id=self.device.connection.interface_id,
381
+ device=self.device.device_address,
382
+ axis=self.axis_number,
383
+ )
384
+ response = call(
385
+ "device/is_homed",
386
+ request,
387
+ dto.BoolResponse.from_binary)
388
+ return response.value
389
+
390
+ async def is_homed_async(
391
+ self
392
+ ) -> bool:
393
+ """
394
+ Returns bool indicating whether the axis has position reference and was homed.
395
+
396
+ Returns:
397
+ True if the axis has position reference and was homed.
398
+ """
399
+ request = dto.AxisEmptyRequest(
400
+ interface_id=self.device.connection.interface_id,
401
+ device=self.device.device_address,
402
+ axis=self.axis_number,
403
+ )
404
+ response = await call_async(
405
+ "device/is_homed",
406
+ request,
407
+ dto.BoolResponse.from_binary)
408
+ return response.value
409
+
410
+ def move_absolute(
411
+ self,
412
+ position: float,
413
+ unit: LengthUnits = Units.NATIVE,
414
+ wait_until_idle: bool = True,
415
+ velocity: float = 0,
416
+ velocity_unit: VelocityUnits = Units.NATIVE,
417
+ acceleration: float = 0,
418
+ acceleration_unit: AccelerationUnits = Units.NATIVE
419
+ ) -> None:
420
+ """
421
+ Move axis to absolute position.
422
+
423
+ Args:
424
+ position: Absolute position.
425
+ unit: Units of position.
426
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
427
+ velocity: Movement velocity.
428
+ Default value of 0 indicates that the maxspeed setting is used instead.
429
+ Requires at least Firmware 7.25.
430
+ velocity_unit: Units of velocity.
431
+ acceleration: Movement acceleration.
432
+ Default value of 0 indicates that the accel setting is used instead.
433
+ Requires at least Firmware 7.25.
434
+ acceleration_unit: Units of acceleration.
435
+ """
436
+ request = dto.DeviceMoveRequest(
437
+ interface_id=self.device.connection.interface_id,
438
+ device=self.device.device_address,
439
+ axis=self.axis_number,
440
+ type=dto.AxisMoveType.ABS,
441
+ arg=position,
442
+ unit=unit,
443
+ wait_until_idle=wait_until_idle,
444
+ velocity=velocity,
445
+ velocity_unit=velocity_unit,
446
+ acceleration=acceleration,
447
+ acceleration_unit=acceleration_unit,
448
+ )
449
+ call("device/move", request)
450
+
451
+ async def move_absolute_async(
452
+ self,
453
+ position: float,
454
+ unit: LengthUnits = Units.NATIVE,
455
+ wait_until_idle: bool = True,
456
+ velocity: float = 0,
457
+ velocity_unit: VelocityUnits = Units.NATIVE,
458
+ acceleration: float = 0,
459
+ acceleration_unit: AccelerationUnits = Units.NATIVE
460
+ ) -> None:
461
+ """
462
+ Move axis to absolute position.
463
+
464
+ Args:
465
+ position: Absolute position.
466
+ unit: Units of position.
467
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
468
+ velocity: Movement velocity.
469
+ Default value of 0 indicates that the maxspeed setting is used instead.
470
+ Requires at least Firmware 7.25.
471
+ velocity_unit: Units of velocity.
472
+ acceleration: Movement acceleration.
473
+ Default value of 0 indicates that the accel setting is used instead.
474
+ Requires at least Firmware 7.25.
475
+ acceleration_unit: Units of acceleration.
476
+ """
477
+ request = dto.DeviceMoveRequest(
478
+ interface_id=self.device.connection.interface_id,
479
+ device=self.device.device_address,
480
+ axis=self.axis_number,
481
+ type=dto.AxisMoveType.ABS,
482
+ arg=position,
483
+ unit=unit,
484
+ wait_until_idle=wait_until_idle,
485
+ velocity=velocity,
486
+ velocity_unit=velocity_unit,
487
+ acceleration=acceleration,
488
+ acceleration_unit=acceleration_unit,
489
+ )
490
+ await call_async("device/move", request)
491
+
492
+ def move_max(
493
+ self,
494
+ wait_until_idle: bool = True,
495
+ velocity: float = 0,
496
+ velocity_unit: VelocityUnits = Units.NATIVE,
497
+ acceleration: float = 0,
498
+ acceleration_unit: AccelerationUnits = Units.NATIVE
499
+ ) -> None:
500
+ """
501
+ Moves the axis to the maximum position as specified by limit.max.
502
+
503
+ Args:
504
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
505
+ velocity: Movement velocity.
506
+ Default value of 0 indicates that the maxspeed setting is used instead.
507
+ Requires at least Firmware 7.25.
508
+ velocity_unit: Units of velocity.
509
+ acceleration: Movement acceleration.
510
+ Default value of 0 indicates that the accel setting is used instead.
511
+ Requires at least Firmware 7.25.
512
+ acceleration_unit: Units of acceleration.
513
+ """
514
+ request = dto.DeviceMoveRequest(
515
+ interface_id=self.device.connection.interface_id,
516
+ device=self.device.device_address,
517
+ axis=self.axis_number,
518
+ type=dto.AxisMoveType.MAX,
519
+ wait_until_idle=wait_until_idle,
520
+ velocity=velocity,
521
+ velocity_unit=velocity_unit,
522
+ acceleration=acceleration,
523
+ acceleration_unit=acceleration_unit,
524
+ )
525
+ call("device/move", request)
526
+
527
+ async def move_max_async(
528
+ self,
529
+ wait_until_idle: bool = True,
530
+ velocity: float = 0,
531
+ velocity_unit: VelocityUnits = Units.NATIVE,
532
+ acceleration: float = 0,
533
+ acceleration_unit: AccelerationUnits = Units.NATIVE
534
+ ) -> None:
535
+ """
536
+ Moves the axis to the maximum position as specified by limit.max.
537
+
538
+ Args:
539
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
540
+ velocity: Movement velocity.
541
+ Default value of 0 indicates that the maxspeed setting is used instead.
542
+ Requires at least Firmware 7.25.
543
+ velocity_unit: Units of velocity.
544
+ acceleration: Movement acceleration.
545
+ Default value of 0 indicates that the accel setting is used instead.
546
+ Requires at least Firmware 7.25.
547
+ acceleration_unit: Units of acceleration.
548
+ """
549
+ request = dto.DeviceMoveRequest(
550
+ interface_id=self.device.connection.interface_id,
551
+ device=self.device.device_address,
552
+ axis=self.axis_number,
553
+ type=dto.AxisMoveType.MAX,
554
+ wait_until_idle=wait_until_idle,
555
+ velocity=velocity,
556
+ velocity_unit=velocity_unit,
557
+ acceleration=acceleration,
558
+ acceleration_unit=acceleration_unit,
559
+ )
560
+ await call_async("device/move", request)
561
+
562
+ def move_min(
563
+ self,
564
+ wait_until_idle: bool = True,
565
+ velocity: float = 0,
566
+ velocity_unit: VelocityUnits = Units.NATIVE,
567
+ acceleration: float = 0,
568
+ acceleration_unit: AccelerationUnits = Units.NATIVE
569
+ ) -> None:
570
+ """
571
+ Moves the axis to the minimum position as specified by limit.min.
572
+
573
+ Args:
574
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
575
+ velocity: Movement velocity.
576
+ Default value of 0 indicates that the maxspeed setting is used instead.
577
+ Requires at least Firmware 7.25.
578
+ velocity_unit: Units of velocity.
579
+ acceleration: Movement acceleration.
580
+ Default value of 0 indicates that the accel setting is used instead.
581
+ Requires at least Firmware 7.25.
582
+ acceleration_unit: Units of acceleration.
583
+ """
584
+ request = dto.DeviceMoveRequest(
585
+ interface_id=self.device.connection.interface_id,
586
+ device=self.device.device_address,
587
+ axis=self.axis_number,
588
+ type=dto.AxisMoveType.MIN,
589
+ wait_until_idle=wait_until_idle,
590
+ velocity=velocity,
591
+ velocity_unit=velocity_unit,
592
+ acceleration=acceleration,
593
+ acceleration_unit=acceleration_unit,
594
+ )
595
+ call("device/move", request)
596
+
597
+ async def move_min_async(
598
+ self,
599
+ wait_until_idle: bool = True,
600
+ velocity: float = 0,
601
+ velocity_unit: VelocityUnits = Units.NATIVE,
602
+ acceleration: float = 0,
603
+ acceleration_unit: AccelerationUnits = Units.NATIVE
604
+ ) -> None:
605
+ """
606
+ Moves the axis to the minimum position as specified by limit.min.
607
+
608
+ Args:
609
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
610
+ velocity: Movement velocity.
611
+ Default value of 0 indicates that the maxspeed setting is used instead.
612
+ Requires at least Firmware 7.25.
613
+ velocity_unit: Units of velocity.
614
+ acceleration: Movement acceleration.
615
+ Default value of 0 indicates that the accel setting is used instead.
616
+ Requires at least Firmware 7.25.
617
+ acceleration_unit: Units of acceleration.
618
+ """
619
+ request = dto.DeviceMoveRequest(
620
+ interface_id=self.device.connection.interface_id,
621
+ device=self.device.device_address,
622
+ axis=self.axis_number,
623
+ type=dto.AxisMoveType.MIN,
624
+ wait_until_idle=wait_until_idle,
625
+ velocity=velocity,
626
+ velocity_unit=velocity_unit,
627
+ acceleration=acceleration,
628
+ acceleration_unit=acceleration_unit,
629
+ )
630
+ await call_async("device/move", request)
631
+
632
+ def move_relative(
633
+ self,
634
+ position: float,
635
+ unit: LengthUnits = Units.NATIVE,
636
+ wait_until_idle: bool = True,
637
+ velocity: float = 0,
638
+ velocity_unit: VelocityUnits = Units.NATIVE,
639
+ acceleration: float = 0,
640
+ acceleration_unit: AccelerationUnits = Units.NATIVE
641
+ ) -> None:
642
+ """
643
+ Move axis to position relative to current position.
644
+
645
+ Args:
646
+ position: Relative position.
647
+ unit: Units of position.
648
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
649
+ velocity: Movement velocity.
650
+ Default value of 0 indicates that the maxspeed setting is used instead.
651
+ Requires at least Firmware 7.25.
652
+ velocity_unit: Units of velocity.
653
+ acceleration: Movement acceleration.
654
+ Default value of 0 indicates that the accel setting is used instead.
655
+ Requires at least Firmware 7.25.
656
+ acceleration_unit: Units of acceleration.
657
+ """
658
+ request = dto.DeviceMoveRequest(
659
+ interface_id=self.device.connection.interface_id,
660
+ device=self.device.device_address,
661
+ axis=self.axis_number,
662
+ type=dto.AxisMoveType.REL,
663
+ arg=position,
664
+ unit=unit,
665
+ wait_until_idle=wait_until_idle,
666
+ velocity=velocity,
667
+ velocity_unit=velocity_unit,
668
+ acceleration=acceleration,
669
+ acceleration_unit=acceleration_unit,
670
+ )
671
+ call("device/move", request)
672
+
673
+ async def move_relative_async(
674
+ self,
675
+ position: float,
676
+ unit: LengthUnits = Units.NATIVE,
677
+ wait_until_idle: bool = True,
678
+ velocity: float = 0,
679
+ velocity_unit: VelocityUnits = Units.NATIVE,
680
+ acceleration: float = 0,
681
+ acceleration_unit: AccelerationUnits = Units.NATIVE
682
+ ) -> None:
683
+ """
684
+ Move axis to position relative to current position.
685
+
686
+ Args:
687
+ position: Relative position.
688
+ unit: Units of position.
689
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
690
+ velocity: Movement velocity.
691
+ Default value of 0 indicates that the maxspeed setting is used instead.
692
+ Requires at least Firmware 7.25.
693
+ velocity_unit: Units of velocity.
694
+ acceleration: Movement acceleration.
695
+ Default value of 0 indicates that the accel setting is used instead.
696
+ Requires at least Firmware 7.25.
697
+ acceleration_unit: Units of acceleration.
698
+ """
699
+ request = dto.DeviceMoveRequest(
700
+ interface_id=self.device.connection.interface_id,
701
+ device=self.device.device_address,
702
+ axis=self.axis_number,
703
+ type=dto.AxisMoveType.REL,
704
+ arg=position,
705
+ unit=unit,
706
+ wait_until_idle=wait_until_idle,
707
+ velocity=velocity,
708
+ velocity_unit=velocity_unit,
709
+ acceleration=acceleration,
710
+ acceleration_unit=acceleration_unit,
711
+ )
712
+ await call_async("device/move", request)
713
+
714
+ def move_velocity(
715
+ self,
716
+ velocity: float,
717
+ unit: VelocityUnits = Units.NATIVE,
718
+ acceleration: float = 0,
719
+ acceleration_unit: AccelerationUnits = Units.NATIVE
720
+ ) -> None:
721
+ """
722
+ Begins to move axis at specified speed.
723
+
724
+ Args:
725
+ velocity: Movement velocity.
726
+ unit: Units of velocity.
727
+ acceleration: Movement acceleration.
728
+ Default value of 0 indicates that the accel setting is used instead.
729
+ Requires at least Firmware 7.25.
730
+ acceleration_unit: Units of acceleration.
731
+ """
732
+ request = dto.DeviceMoveRequest(
733
+ interface_id=self.device.connection.interface_id,
734
+ device=self.device.device_address,
735
+ axis=self.axis_number,
736
+ type=dto.AxisMoveType.VEL,
737
+ arg=velocity,
738
+ unit=unit,
739
+ acceleration=acceleration,
740
+ acceleration_unit=acceleration_unit,
741
+ )
742
+ call("device/move", request)
743
+
744
+ async def move_velocity_async(
745
+ self,
746
+ velocity: float,
747
+ unit: VelocityUnits = Units.NATIVE,
748
+ acceleration: float = 0,
749
+ acceleration_unit: AccelerationUnits = Units.NATIVE
750
+ ) -> None:
751
+ """
752
+ Begins to move axis at specified speed.
753
+
754
+ Args:
755
+ velocity: Movement velocity.
756
+ unit: Units of velocity.
757
+ acceleration: Movement acceleration.
758
+ Default value of 0 indicates that the accel setting is used instead.
759
+ Requires at least Firmware 7.25.
760
+ acceleration_unit: Units of acceleration.
761
+ """
762
+ request = dto.DeviceMoveRequest(
763
+ interface_id=self.device.connection.interface_id,
764
+ device=self.device.device_address,
765
+ axis=self.axis_number,
766
+ type=dto.AxisMoveType.VEL,
767
+ arg=velocity,
768
+ unit=unit,
769
+ acceleration=acceleration,
770
+ acceleration_unit=acceleration_unit,
771
+ )
772
+ await call_async("device/move", request)
773
+
774
+ def get_position(
775
+ self,
776
+ unit: LengthUnits = Units.NATIVE
777
+ ) -> float:
778
+ """
779
+ Returns current axis position.
780
+
781
+ Args:
782
+ unit: Units of position.
783
+
784
+ Returns:
785
+ Axis position.
786
+ """
787
+ request = dto.DeviceGetSettingRequest(
788
+ interface_id=self.device.connection.interface_id,
789
+ device=self.device.device_address,
790
+ axis=self.axis_number,
791
+ setting="pos",
792
+ unit=unit,
793
+ )
794
+ response = call(
795
+ "device/get_setting",
796
+ request,
797
+ dto.DoubleResponse.from_binary)
798
+ return response.value
799
+
800
+ async def get_position_async(
801
+ self,
802
+ unit: LengthUnits = Units.NATIVE
803
+ ) -> float:
804
+ """
805
+ Returns current axis position.
806
+
807
+ Args:
808
+ unit: Units of position.
809
+
810
+ Returns:
811
+ Axis position.
812
+ """
813
+ request = dto.DeviceGetSettingRequest(
814
+ interface_id=self.device.connection.interface_id,
815
+ device=self.device.device_address,
816
+ axis=self.axis_number,
817
+ setting="pos",
818
+ unit=unit,
819
+ )
820
+ response = await call_async(
821
+ "device/get_setting",
822
+ request,
823
+ dto.DoubleResponse.from_binary)
824
+ return response.value
825
+
826
+ def get_number_of_index_positions(
827
+ self
828
+ ) -> int:
829
+ """
830
+ Gets number of index positions of the axis.
831
+
832
+ Returns:
833
+ Number of index positions.
834
+ """
835
+ request = dto.AxisEmptyRequest(
836
+ interface_id=self.device.connection.interface_id,
837
+ device=self.device.device_address,
838
+ axis=self.axis_number,
839
+ )
840
+ response = call(
841
+ "device/get_index_count",
842
+ request,
843
+ dto.IntResponse.from_binary)
844
+ return response.value
845
+
846
+ async def get_number_of_index_positions_async(
847
+ self
848
+ ) -> int:
849
+ """
850
+ Gets number of index positions of the axis.
851
+
852
+ Returns:
853
+ Number of index positions.
854
+ """
855
+ request = dto.AxisEmptyRequest(
856
+ interface_id=self.device.connection.interface_id,
857
+ device=self.device.device_address,
858
+ axis=self.axis_number,
859
+ )
860
+ response = await call_async(
861
+ "device/get_index_count",
862
+ request,
863
+ dto.IntResponse.from_binary)
864
+ return response.value
865
+
866
+ def get_index_position(
867
+ self
868
+ ) -> int:
869
+ """
870
+ Returns current axis index position.
871
+
872
+ Returns:
873
+ Index position starting from 1 or 0 if the position is not an index position.
874
+ """
875
+ request = dto.AxisEmptyRequest(
876
+ interface_id=self.device.connection.interface_id,
877
+ device=self.device.device_address,
878
+ axis=self.axis_number,
879
+ )
880
+ response = call(
881
+ "device/get_index_position",
882
+ request,
883
+ dto.IntResponse.from_binary)
884
+ return response.value
885
+
886
+ async def get_index_position_async(
887
+ self
888
+ ) -> int:
889
+ """
890
+ Returns current axis index position.
891
+
892
+ Returns:
893
+ Index position starting from 1 or 0 if the position is not an index position.
894
+ """
895
+ request = dto.AxisEmptyRequest(
896
+ interface_id=self.device.connection.interface_id,
897
+ device=self.device.device_address,
898
+ axis=self.axis_number,
899
+ )
900
+ response = await call_async(
901
+ "device/get_index_position",
902
+ request,
903
+ dto.IntResponse.from_binary)
904
+ return response.value
905
+
906
+ def move_index(
907
+ self,
908
+ index: int,
909
+ wait_until_idle: bool = True,
910
+ velocity: float = 0,
911
+ velocity_unit: VelocityUnits = Units.NATIVE,
912
+ acceleration: float = 0,
913
+ acceleration_unit: AccelerationUnits = Units.NATIVE
914
+ ) -> None:
915
+ """
916
+ Moves the axis to index position.
917
+
918
+ Args:
919
+ index: Index position. Index positions are numbered from 1.
920
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
921
+ velocity: Movement velocity.
922
+ Default value of 0 indicates that the maxspeed setting is used instead.
923
+ Requires at least Firmware 7.25.
924
+ velocity_unit: Units of velocity.
925
+ acceleration: Movement acceleration.
926
+ Default value of 0 indicates that the accel setting is used instead.
927
+ Requires at least Firmware 7.25.
928
+ acceleration_unit: Units of acceleration.
929
+ """
930
+ request = dto.DeviceMoveRequest(
931
+ interface_id=self.device.connection.interface_id,
932
+ device=self.device.device_address,
933
+ axis=self.axis_number,
934
+ type=dto.AxisMoveType.INDEX,
935
+ arg_int=index,
936
+ wait_until_idle=wait_until_idle,
937
+ velocity=velocity,
938
+ velocity_unit=velocity_unit,
939
+ acceleration=acceleration,
940
+ acceleration_unit=acceleration_unit,
941
+ )
942
+ call("device/move", request)
943
+
944
+ async def move_index_async(
945
+ self,
946
+ index: int,
947
+ wait_until_idle: bool = True,
948
+ velocity: float = 0,
949
+ velocity_unit: VelocityUnits = Units.NATIVE,
950
+ acceleration: float = 0,
951
+ acceleration_unit: AccelerationUnits = Units.NATIVE
952
+ ) -> None:
953
+ """
954
+ Moves the axis to index position.
955
+
956
+ Args:
957
+ index: Index position. Index positions are numbered from 1.
958
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
959
+ velocity: Movement velocity.
960
+ Default value of 0 indicates that the maxspeed setting is used instead.
961
+ Requires at least Firmware 7.25.
962
+ velocity_unit: Units of velocity.
963
+ acceleration: Movement acceleration.
964
+ Default value of 0 indicates that the accel setting is used instead.
965
+ Requires at least Firmware 7.25.
966
+ acceleration_unit: Units of acceleration.
967
+ """
968
+ request = dto.DeviceMoveRequest(
969
+ interface_id=self.device.connection.interface_id,
970
+ device=self.device.device_address,
971
+ axis=self.axis_number,
972
+ type=dto.AxisMoveType.INDEX,
973
+ arg_int=index,
974
+ wait_until_idle=wait_until_idle,
975
+ velocity=velocity,
976
+ velocity_unit=velocity_unit,
977
+ acceleration=acceleration,
978
+ acceleration_unit=acceleration_unit,
979
+ )
980
+ await call_async("device/move", request)
981
+
982
+ def generic_command(
983
+ self,
984
+ command: str,
985
+ check_errors: bool = True,
986
+ timeout: int = 0
987
+ ) -> Response:
988
+ """
989
+ Sends a generic ASCII command to this axis.
990
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
991
+
992
+ Args:
993
+ command: Command and its parameters.
994
+ check_errors: Controls whether to throw an exception when the device rejects the command.
995
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
996
+ Overrides the connection default request timeout.
997
+
998
+ Returns:
999
+ A response to the command.
1000
+ """
1001
+ request = dto.GenericCommandRequest(
1002
+ interface_id=self.device.connection.interface_id,
1003
+ device=self.device.device_address,
1004
+ axis=self.axis_number,
1005
+ command=command,
1006
+ check_errors=check_errors,
1007
+ timeout=timeout,
1008
+ )
1009
+ response = call(
1010
+ "interface/generic_command",
1011
+ request,
1012
+ Response.from_binary)
1013
+ return response
1014
+
1015
+ async def generic_command_async(
1016
+ self,
1017
+ command: str,
1018
+ check_errors: bool = True,
1019
+ timeout: int = 0
1020
+ ) -> Response:
1021
+ """
1022
+ Sends a generic ASCII command to this axis.
1023
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1024
+
1025
+ Args:
1026
+ command: Command and its parameters.
1027
+ check_errors: Controls whether to throw an exception when the device rejects the command.
1028
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
1029
+ Overrides the connection default request timeout.
1030
+
1031
+ Returns:
1032
+ A response to the command.
1033
+ """
1034
+ request = dto.GenericCommandRequest(
1035
+ interface_id=self.device.connection.interface_id,
1036
+ device=self.device.device_address,
1037
+ axis=self.axis_number,
1038
+ command=command,
1039
+ check_errors=check_errors,
1040
+ timeout=timeout,
1041
+ )
1042
+ response = await call_async(
1043
+ "interface/generic_command",
1044
+ request,
1045
+ Response.from_binary)
1046
+ return response
1047
+
1048
+ def generic_command_multi_response(
1049
+ self,
1050
+ command: str,
1051
+ check_errors: bool = True,
1052
+ timeout: int = 0
1053
+ ) -> List[Response]:
1054
+ """
1055
+ Sends a generic ASCII command to this axis and expect multiple responses.
1056
+ Responses are returned in order of arrival.
1057
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1058
+
1059
+ Args:
1060
+ command: Command and its parameters.
1061
+ check_errors: Controls whether to throw an exception when a device rejects the command.
1062
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
1063
+ Overrides the connection default request timeout.
1064
+
1065
+ Returns:
1066
+ All responses to the command.
1067
+ """
1068
+ request = dto.GenericCommandRequest(
1069
+ interface_id=self.device.connection.interface_id,
1070
+ device=self.device.device_address,
1071
+ axis=self.axis_number,
1072
+ command=command,
1073
+ check_errors=check_errors,
1074
+ timeout=timeout,
1075
+ )
1076
+ response = call(
1077
+ "interface/generic_command_multi_response",
1078
+ request,
1079
+ dto.GenericCommandResponseCollection.from_binary)
1080
+ return response.responses
1081
+
1082
+ async def generic_command_multi_response_async(
1083
+ self,
1084
+ command: str,
1085
+ check_errors: bool = True,
1086
+ timeout: int = 0
1087
+ ) -> List[Response]:
1088
+ """
1089
+ Sends a generic ASCII command to this axis and expect multiple responses.
1090
+ Responses are returned in order of arrival.
1091
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1092
+
1093
+ Args:
1094
+ command: Command and its parameters.
1095
+ check_errors: Controls whether to throw an exception when a device rejects the command.
1096
+ timeout: The timeout, in milliseconds, for a device to respond to the command.
1097
+ Overrides the connection default request timeout.
1098
+
1099
+ Returns:
1100
+ All responses to the command.
1101
+ """
1102
+ request = dto.GenericCommandRequest(
1103
+ interface_id=self.device.connection.interface_id,
1104
+ device=self.device.device_address,
1105
+ axis=self.axis_number,
1106
+ command=command,
1107
+ check_errors=check_errors,
1108
+ timeout=timeout,
1109
+ )
1110
+ response = await call_async(
1111
+ "interface/generic_command_multi_response",
1112
+ request,
1113
+ dto.GenericCommandResponseCollection.from_binary)
1114
+ return response.responses
1115
+
1116
+ def generic_command_no_response(
1117
+ self,
1118
+ command: str
1119
+ ) -> None:
1120
+ """
1121
+ Sends a generic ASCII command to this axis without expecting a response and without adding a message ID
1122
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1123
+
1124
+ Args:
1125
+ command: Command and its parameters.
1126
+ """
1127
+ request = dto.GenericCommandRequest(
1128
+ interface_id=self.device.connection.interface_id,
1129
+ device=self.device.device_address,
1130
+ axis=self.axis_number,
1131
+ command=command,
1132
+ )
1133
+ call("interface/generic_command_no_response", request)
1134
+
1135
+ async def generic_command_no_response_async(
1136
+ self,
1137
+ command: str
1138
+ ) -> None:
1139
+ """
1140
+ Sends a generic ASCII command to this axis without expecting a response and without adding a message ID
1141
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1142
+
1143
+ Args:
1144
+ command: Command and its parameters.
1145
+ """
1146
+ request = dto.GenericCommandRequest(
1147
+ interface_id=self.device.connection.interface_id,
1148
+ device=self.device.device_address,
1149
+ axis=self.axis_number,
1150
+ command=command,
1151
+ )
1152
+ await call_async("interface/generic_command_no_response", request)
1153
+
1154
+ def prepare_command(
1155
+ self,
1156
+ command_template: str,
1157
+ *parameters: Measurement
1158
+ ) -> str:
1159
+ """
1160
+ Formats parameters into a command and performs unit conversions.
1161
+ Parameters in the command template are denoted by a question mark.
1162
+ Command returned is only valid for this axis and this device.
1163
+ For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
1164
+
1165
+ Args:
1166
+ command_template: Template of a command to prepare. Parameters are denoted by question marks.
1167
+ parameters: Variable number of command parameters.
1168
+
1169
+ Returns:
1170
+ Command with converted parameters.
1171
+ """
1172
+ request = dto.PrepareCommandRequest(
1173
+ interface_id=self.device.connection.interface_id,
1174
+ device=self.device.device_address,
1175
+ axis=self.axis_number,
1176
+ command_template=command_template,
1177
+ parameters=list(parameters),
1178
+ )
1179
+ response = call_sync(
1180
+ "device/prepare_command",
1181
+ request,
1182
+ dto.StringResponse.from_binary)
1183
+ return response.value
1184
+
1185
+ def set_label(
1186
+ self,
1187
+ label: str
1188
+ ) -> None:
1189
+ """
1190
+ Sets the user-assigned peripheral label.
1191
+ The label is stored on the controller and recognized by other software.
1192
+
1193
+ Args:
1194
+ label: Label to set.
1195
+ """
1196
+ request = dto.DeviceSetStorageRequest(
1197
+ interface_id=self.device.connection.interface_id,
1198
+ device=self.device.device_address,
1199
+ axis=self.axis_number,
1200
+ value=label,
1201
+ )
1202
+ call("device/set_label", request)
1203
+
1204
+ async def set_label_async(
1205
+ self,
1206
+ label: str
1207
+ ) -> None:
1208
+ """
1209
+ Sets the user-assigned peripheral label.
1210
+ The label is stored on the controller and recognized by other software.
1211
+
1212
+ Args:
1213
+ label: Label to set.
1214
+ """
1215
+ request = dto.DeviceSetStorageRequest(
1216
+ interface_id=self.device.connection.interface_id,
1217
+ device=self.device.device_address,
1218
+ axis=self.axis_number,
1219
+ value=label,
1220
+ )
1221
+ await call_async("device/set_label", request)
1222
+
1223
+ def __retrieve_label(
1224
+ self
1225
+ ) -> str:
1226
+ """
1227
+ Gets the peripheral name.
1228
+
1229
+ Returns:
1230
+ The label.
1231
+ """
1232
+ request = dto.AxisEmptyRequest(
1233
+ interface_id=self.device.connection.interface_id,
1234
+ device=self.device.device_address,
1235
+ axis=self.axis_number,
1236
+ )
1237
+ response = call_sync(
1238
+ "device/get_label",
1239
+ request,
1240
+ dto.StringResponse.from_binary)
1241
+ return response.value
1242
+
1243
+ def __repr__(
1244
+ self
1245
+ ) -> str:
1246
+ """
1247
+ Returns a string that represents the axis.
1248
+
1249
+ Returns:
1250
+ A string that represents the axis.
1251
+ """
1252
+ request = dto.AxisToStringRequest(
1253
+ interface_id=self.device.connection.interface_id,
1254
+ device=self.device.device_address,
1255
+ axis=self.axis_number,
1256
+ )
1257
+ response = call_sync(
1258
+ "device/axis_to_string",
1259
+ request,
1260
+ dto.StringResponse.from_binary)
1261
+ return response.value
1262
+
1263
+ def get_state(
1264
+ self
1265
+ ) -> str:
1266
+ """
1267
+ Returns a serialization of the current axis state that can be saved and reapplied.
1268
+
1269
+ Returns:
1270
+ A serialization of the current state of the axis.
1271
+ """
1272
+ request = dto.AxisEmptyRequest(
1273
+ interface_id=self.device.connection.interface_id,
1274
+ device=self.device.device_address,
1275
+ axis=self.axis_number,
1276
+ )
1277
+ response = call(
1278
+ "device/get_state",
1279
+ request,
1280
+ dto.StringResponse.from_binary)
1281
+ return response.value
1282
+
1283
+ async def get_state_async(
1284
+ self
1285
+ ) -> str:
1286
+ """
1287
+ Returns a serialization of the current axis state that can be saved and reapplied.
1288
+
1289
+ Returns:
1290
+ A serialization of the current state of the axis.
1291
+ """
1292
+ request = dto.AxisEmptyRequest(
1293
+ interface_id=self.device.connection.interface_id,
1294
+ device=self.device.device_address,
1295
+ axis=self.axis_number,
1296
+ )
1297
+ response = await call_async(
1298
+ "device/get_state",
1299
+ request,
1300
+ dto.StringResponse.from_binary)
1301
+ return response.value
1302
+
1303
+ def set_state(
1304
+ self,
1305
+ state: str
1306
+ ) -> SetStateAxisResponse:
1307
+ """
1308
+ Applies a saved state to this axis.
1309
+
1310
+ Args:
1311
+ state: The state object to apply to this axis.
1312
+
1313
+ Returns:
1314
+ Reports of any issues that were handled, but caused the state to not be exactly restored.
1315
+ """
1316
+ request = dto.SetStateRequest(
1317
+ interface_id=self.device.connection.interface_id,
1318
+ device=self.device.device_address,
1319
+ axis=self.axis_number,
1320
+ state=state,
1321
+ )
1322
+ response = call(
1323
+ "device/set_axis_state",
1324
+ request,
1325
+ SetStateAxisResponse.from_binary)
1326
+ return response
1327
+
1328
+ async def set_state_async(
1329
+ self,
1330
+ state: str
1331
+ ) -> SetStateAxisResponse:
1332
+ """
1333
+ Applies a saved state to this axis.
1334
+
1335
+ Args:
1336
+ state: The state object to apply to this axis.
1337
+
1338
+ Returns:
1339
+ Reports of any issues that were handled, but caused the state to not be exactly restored.
1340
+ """
1341
+ request = dto.SetStateRequest(
1342
+ interface_id=self.device.connection.interface_id,
1343
+ device=self.device.device_address,
1344
+ axis=self.axis_number,
1345
+ state=state,
1346
+ )
1347
+ response = await call_async(
1348
+ "device/set_axis_state",
1349
+ request,
1350
+ SetStateAxisResponse.from_binary)
1351
+ return response
1352
+
1353
+ def can_set_state(
1354
+ self,
1355
+ state: str,
1356
+ firmware_version: Optional[FirmwareVersion] = None
1357
+ ) -> Optional[str]:
1358
+ """
1359
+ Checks if a state can be applied to this axis.
1360
+ This only covers exceptions that can be determined statically such as mismatches of ID or version,
1361
+ the process of applying the state can still fail when running.
1362
+
1363
+ Args:
1364
+ state: The state object to check against.
1365
+ firmware_version: The firmware version of the device to apply the state to.
1366
+ Use this to ensure the state will still be compatible after an update.
1367
+
1368
+ Returns:
1369
+ An explanation of why this state cannot be set to this axis.
1370
+ """
1371
+ request = dto.CanSetStateRequest(
1372
+ interface_id=self.device.connection.interface_id,
1373
+ device=self.device.device_address,
1374
+ axis=self.axis_number,
1375
+ state=state,
1376
+ firmware_version=firmware_version,
1377
+ )
1378
+ response = call(
1379
+ "device/can_set_axis_state",
1380
+ request,
1381
+ dto.CanSetStateAxisResponse.from_binary)
1382
+ return response.error
1383
+
1384
+ async def can_set_state_async(
1385
+ self,
1386
+ state: str,
1387
+ firmware_version: Optional[FirmwareVersion] = None
1388
+ ) -> Optional[str]:
1389
+ """
1390
+ Checks if a state can be applied to this axis.
1391
+ This only covers exceptions that can be determined statically such as mismatches of ID or version,
1392
+ the process of applying the state can still fail when running.
1393
+
1394
+ Args:
1395
+ state: The state object to check against.
1396
+ firmware_version: The firmware version of the device to apply the state to.
1397
+ Use this to ensure the state will still be compatible after an update.
1398
+
1399
+ Returns:
1400
+ An explanation of why this state cannot be set to this axis.
1401
+ """
1402
+ request = dto.CanSetStateRequest(
1403
+ interface_id=self.device.connection.interface_id,
1404
+ device=self.device.device_address,
1405
+ axis=self.axis_number,
1406
+ state=state,
1407
+ firmware_version=firmware_version,
1408
+ )
1409
+ response = await call_async(
1410
+ "device/can_set_axis_state",
1411
+ request,
1412
+ dto.CanSetStateAxisResponse.from_binary)
1413
+ return response.error
1414
+
1415
+ def __retrieve_identity(
1416
+ self
1417
+ ) -> AxisIdentity:
1418
+ """
1419
+ Returns identity.
1420
+
1421
+ Returns:
1422
+ Axis identity.
1423
+ """
1424
+ request = dto.AxisEmptyRequest(
1425
+ interface_id=self.device.connection.interface_id,
1426
+ device=self.device.device_address,
1427
+ axis=self.axis_number,
1428
+ )
1429
+ response = call_sync(
1430
+ "device/get_axis_identity",
1431
+ request,
1432
+ AxisIdentity.from_binary)
1433
+ return response
1434
+
1435
+ def driver_disable(
1436
+ self
1437
+ ) -> None:
1438
+ """
1439
+ Disables the driver, which prevents current from being sent to the motor or load.
1440
+ If the driver is already disabled, the driver remains disabled.
1441
+ """
1442
+ request = dto.AxisEmptyRequest(
1443
+ interface_id=self.device.connection.interface_id,
1444
+ device=self.device.device_address,
1445
+ axis=self.axis_number,
1446
+ )
1447
+ call("device/driver_disable", request)
1448
+
1449
+ async def driver_disable_async(
1450
+ self
1451
+ ) -> None:
1452
+ """
1453
+ Disables the driver, which prevents current from being sent to the motor or load.
1454
+ If the driver is already disabled, the driver remains disabled.
1455
+ """
1456
+ request = dto.AxisEmptyRequest(
1457
+ interface_id=self.device.connection.interface_id,
1458
+ device=self.device.device_address,
1459
+ axis=self.axis_number,
1460
+ )
1461
+ await call_async("device/driver_disable", request)
1462
+
1463
+ def driver_enable(
1464
+ self,
1465
+ timeout: float = 10
1466
+ ) -> None:
1467
+ """
1468
+ Attempts to enable the driver repeatedly for the specified timeout.
1469
+ If the driver is already enabled, the driver remains enabled.
1470
+
1471
+ Args:
1472
+ timeout: Timeout in seconds. Specify 0 to attempt to enable the driver once.
1473
+ """
1474
+ request = dto.DriverEnableRequest(
1475
+ interface_id=self.device.connection.interface_id,
1476
+ device=self.device.device_address,
1477
+ axis=self.axis_number,
1478
+ timeout=timeout,
1479
+ )
1480
+ call("device/driver_enable", request)
1481
+
1482
+ async def driver_enable_async(
1483
+ self,
1484
+ timeout: float = 10
1485
+ ) -> None:
1486
+ """
1487
+ Attempts to enable the driver repeatedly for the specified timeout.
1488
+ If the driver is already enabled, the driver remains enabled.
1489
+
1490
+ Args:
1491
+ timeout: Timeout in seconds. Specify 0 to attempt to enable the driver once.
1492
+ """
1493
+ request = dto.DriverEnableRequest(
1494
+ interface_id=self.device.connection.interface_id,
1495
+ device=self.device.device_address,
1496
+ axis=self.axis_number,
1497
+ timeout=timeout,
1498
+ )
1499
+ await call_async("device/driver_enable", request)
1500
+
1501
+ def activate(
1502
+ self
1503
+ ) -> None:
1504
+ """
1505
+ Activates a peripheral on this axis.
1506
+ Removes all identity information for the device.
1507
+ Run the identify method on the device after activating to refresh the information.
1508
+ """
1509
+ request = dto.AxisEmptyRequest(
1510
+ interface_id=self.device.connection.interface_id,
1511
+ device=self.device.device_address,
1512
+ axis=self.axis_number,
1513
+ )
1514
+ call("device/activate", request)
1515
+
1516
+ async def activate_async(
1517
+ self
1518
+ ) -> None:
1519
+ """
1520
+ Activates a peripheral on this axis.
1521
+ Removes all identity information for the device.
1522
+ Run the identify method on the device after activating to refresh the information.
1523
+ """
1524
+ request = dto.AxisEmptyRequest(
1525
+ interface_id=self.device.connection.interface_id,
1526
+ device=self.device.device_address,
1527
+ axis=self.axis_number,
1528
+ )
1529
+ await call_async("device/activate", request)
1530
+
1531
+ def restore(
1532
+ self
1533
+ ) -> None:
1534
+ """
1535
+ Restores all axis settings to their default values.
1536
+ Deletes all zaber axis storage keys.
1537
+ Disables lockstep if the axis is part of one. Unparks the axis.
1538
+ Preserves storage.
1539
+ The device needs to be identified again after the restore.
1540
+ """
1541
+ request = dto.DeviceRestoreRequest(
1542
+ interface_id=self.device.connection.interface_id,
1543
+ device=self.device.device_address,
1544
+ axis=self.axis_number,
1545
+ )
1546
+ call("device/restore", request)
1547
+
1548
+ async def restore_async(
1549
+ self
1550
+ ) -> None:
1551
+ """
1552
+ Restores all axis settings to their default values.
1553
+ Deletes all zaber axis storage keys.
1554
+ Disables lockstep if the axis is part of one. Unparks the axis.
1555
+ Preserves storage.
1556
+ The device needs to be identified again after the restore.
1557
+ """
1558
+ request = dto.DeviceRestoreRequest(
1559
+ interface_id=self.device.connection.interface_id,
1560
+ device=self.device.device_address,
1561
+ axis=self.axis_number,
1562
+ )
1563
+ await call_async("device/restore", request)
1564
+
1565
+ def move_sin(
1566
+ self,
1567
+ amplitude: float,
1568
+ amplitude_units: LengthUnits,
1569
+ period: float,
1570
+ period_units: TimeUnits,
1571
+ count: float = 0,
1572
+ wait_until_idle: bool = True
1573
+ ) -> None:
1574
+ """
1575
+ Moves the axis in a sinusoidal trajectory.
1576
+
1577
+ Args:
1578
+ amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
1579
+ amplitude_units: Units of position.
1580
+ period: Period of the sinusoidal motion in milliseconds.
1581
+ period_units: Units of time.
1582
+ count: Number of sinusoidal cycles to complete.
1583
+ Must be a multiple of 0.5
1584
+ If count is not specified or set to 0, the axis will move indefinitely.
1585
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
1586
+ """
1587
+ request = dto.DeviceMoveSinRequest(
1588
+ interface_id=self.device.connection.interface_id,
1589
+ device=self.device.device_address,
1590
+ axis=self.axis_number,
1591
+ amplitude=amplitude,
1592
+ amplitude_units=amplitude_units,
1593
+ period=period,
1594
+ period_units=period_units,
1595
+ count=count,
1596
+ wait_until_idle=wait_until_idle,
1597
+ )
1598
+ call("device/move_sin", request)
1599
+
1600
+ async def move_sin_async(
1601
+ self,
1602
+ amplitude: float,
1603
+ amplitude_units: LengthUnits,
1604
+ period: float,
1605
+ period_units: TimeUnits,
1606
+ count: float = 0,
1607
+ wait_until_idle: bool = True
1608
+ ) -> None:
1609
+ """
1610
+ Moves the axis in a sinusoidal trajectory.
1611
+
1612
+ Args:
1613
+ amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
1614
+ amplitude_units: Units of position.
1615
+ period: Period of the sinusoidal motion in milliseconds.
1616
+ period_units: Units of time.
1617
+ count: Number of sinusoidal cycles to complete.
1618
+ Must be a multiple of 0.5
1619
+ If count is not specified or set to 0, the axis will move indefinitely.
1620
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
1621
+ """
1622
+ request = dto.DeviceMoveSinRequest(
1623
+ interface_id=self.device.connection.interface_id,
1624
+ device=self.device.device_address,
1625
+ axis=self.axis_number,
1626
+ amplitude=amplitude,
1627
+ amplitude_units=amplitude_units,
1628
+ period=period,
1629
+ period_units=period_units,
1630
+ count=count,
1631
+ wait_until_idle=wait_until_idle,
1632
+ )
1633
+ await call_async("device/move_sin", request)
1634
+
1635
+ def move_sin_stop(
1636
+ self,
1637
+ wait_until_idle: bool = True
1638
+ ) -> None:
1639
+ """
1640
+ Stops the axis at the end of the sinusoidal trajectory.
1641
+ If the sinusoidal motion was started with an integer-plus-half cycle count,
1642
+ the motion ends at the half-way point of the sinusoidal trajectory.
1643
+
1644
+ Args:
1645
+ wait_until_idle: Determines whether function should return after the movement is finished.
1646
+ """
1647
+ request = dto.DeviceStopRequest(
1648
+ interface_id=self.device.connection.interface_id,
1649
+ device=self.device.device_address,
1650
+ axis=self.axis_number,
1651
+ wait_until_idle=wait_until_idle,
1652
+ )
1653
+ call("device/move_sin_stop", request)
1654
+
1655
+ async def move_sin_stop_async(
1656
+ self,
1657
+ wait_until_idle: bool = True
1658
+ ) -> None:
1659
+ """
1660
+ Stops the axis at the end of the sinusoidal trajectory.
1661
+ If the sinusoidal motion was started with an integer-plus-half cycle count,
1662
+ the motion ends at the half-way point of the sinusoidal trajectory.
1663
+
1664
+ Args:
1665
+ wait_until_idle: Determines whether function should return after the movement is finished.
1666
+ """
1667
+ request = dto.DeviceStopRequest(
1668
+ interface_id=self.device.connection.interface_id,
1669
+ device=self.device.device_address,
1670
+ axis=self.axis_number,
1671
+ wait_until_idle=wait_until_idle,
1672
+ )
1673
+ await call_async("device/move_sin_stop", request)