zaber-motion 7.13.0__py3-none-win_amd64.whl → 7.14.0__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. zaber_motion/__init__.py +103 -103
  2. zaber_motion/ascii/__init__.py +73 -73
  3. zaber_motion/ascii/all_axes.py +352 -352
  4. zaber_motion/ascii/axis.py +1673 -1673
  5. zaber_motion/ascii/axis_group.py +391 -391
  6. zaber_motion/ascii/axis_settings.py +752 -752
  7. zaber_motion/ascii/connection.py +1174 -1174
  8. zaber_motion/ascii/device.py +908 -908
  9. zaber_motion/ascii/device_io.py +1170 -1170
  10. zaber_motion/ascii/device_settings.py +735 -735
  11. zaber_motion/ascii/lockstep.py +1184 -1184
  12. zaber_motion/ascii/oscilloscope.py +635 -635
  13. zaber_motion/ascii/oscilloscope_data.py +240 -240
  14. zaber_motion/ascii/pvt.py +105 -105
  15. zaber_motion/ascii/pvt_buffer.py +146 -146
  16. zaber_motion/ascii/pvt_io.py +630 -630
  17. zaber_motion/ascii/pvt_sequence.py +1530 -1530
  18. zaber_motion/ascii/servo_tuner.py +637 -637
  19. zaber_motion/ascii/setting_constants.py +1755 -1755
  20. zaber_motion/ascii/storage.py +905 -905
  21. zaber_motion/ascii/stream.py +2182 -2182
  22. zaber_motion/ascii/stream_buffer.py +101 -101
  23. zaber_motion/ascii/stream_io.py +700 -700
  24. zaber_motion/ascii/streams.py +105 -105
  25. zaber_motion/ascii/transport.py +202 -202
  26. zaber_motion/ascii/trigger.py +886 -886
  27. zaber_motion/ascii/triggers.py +241 -241
  28. zaber_motion/ascii/warning_flags.py +178 -178
  29. zaber_motion/ascii/warnings.py +152 -152
  30. zaber_motion/async_utils.py +46 -46
  31. zaber_motion/binary/__init__.py +14 -14
  32. zaber_motion/binary/connection.py +648 -648
  33. zaber_motion/binary/device.py +924 -924
  34. zaber_motion/binary/device_settings.py +121 -121
  35. zaber_motion/bindings.py +50 -50
  36. zaber_motion/call.py +198 -198
  37. zaber_motion/convert_exception.py +138 -138
  38. zaber_motion/dto/__init__.py +11 -11
  39. zaber_motion/dto/ascii/__init__.py +46 -46
  40. zaber_motion/dto/ascii/alert_event.py +110 -110
  41. zaber_motion/dto/ascii/axis_identity.py +134 -134
  42. zaber_motion/dto/ascii/axis_type.py +14 -14
  43. zaber_motion/dto/ascii/can_set_state_axis_response.py +69 -69
  44. zaber_motion/dto/ascii/can_set_state_device_response.py +75 -75
  45. zaber_motion/dto/ascii/conversion_factor.py +81 -81
  46. zaber_motion/dto/ascii/device_identity.py +136 -136
  47. zaber_motion/dto/ascii/device_io_info.py +108 -108
  48. zaber_motion/dto/ascii/digital_output_action.py +13 -13
  49. zaber_motion/dto/ascii/get_axis_setting.py +64 -64
  50. zaber_motion/dto/ascii/get_axis_setting_result.py +81 -81
  51. zaber_motion/dto/ascii/get_setting.py +88 -88
  52. zaber_motion/dto/ascii/get_setting_result.py +87 -87
  53. zaber_motion/dto/ascii/io_port_label.py +84 -84
  54. zaber_motion/dto/ascii/io_port_type.py +14 -14
  55. zaber_motion/dto/ascii/lockstep_axes.py +108 -108
  56. zaber_motion/dto/ascii/measurement_sequence.py +73 -73
  57. zaber_motion/dto/ascii/message_type.py +14 -14
  58. zaber_motion/dto/ascii/optional_measurement_sequence.py +71 -71
  59. zaber_motion/dto/ascii/oscilloscope_capture_properties.py +116 -116
  60. zaber_motion/dto/ascii/oscilloscope_data_source.py +11 -11
  61. zaber_motion/dto/ascii/paramset_info.py +92 -92
  62. zaber_motion/dto/ascii/pid_tuning.py +125 -125
  63. zaber_motion/dto/ascii/pvt_axis_definition.py +70 -70
  64. zaber_motion/dto/ascii/pvt_axis_type.py +11 -11
  65. zaber_motion/dto/ascii/pvt_csv_data.py +75 -75
  66. zaber_motion/dto/ascii/pvt_mode.py +12 -12
  67. zaber_motion/dto/ascii/pvt_sequence_data.py +99 -99
  68. zaber_motion/dto/ascii/response.py +137 -137
  69. zaber_motion/dto/ascii/servo_tuning_param.py +66 -66
  70. zaber_motion/dto/ascii/servo_tuning_paramset.py +21 -21
  71. zaber_motion/dto/ascii/set_state_axis_response.py +75 -75
  72. zaber_motion/dto/ascii/set_state_device_response.py +80 -80
  73. zaber_motion/dto/ascii/simple_tuning.py +118 -118
  74. zaber_motion/dto/ascii/simple_tuning_param_definition.py +100 -100
  75. zaber_motion/dto/ascii/stream_axis_definition.py +70 -70
  76. zaber_motion/dto/ascii/stream_axis_type.py +11 -11
  77. zaber_motion/dto/ascii/stream_mode.py +13 -13
  78. zaber_motion/dto/ascii/trigger_action.py +12 -12
  79. zaber_motion/dto/ascii/trigger_condition.py +15 -15
  80. zaber_motion/dto/ascii/trigger_enabled_state.py +68 -68
  81. zaber_motion/dto/ascii/trigger_operation.py +12 -12
  82. zaber_motion/dto/ascii/trigger_state.py +114 -114
  83. zaber_motion/dto/ascii/unknown_response_event.py +137 -137
  84. zaber_motion/dto/axis_address.py +74 -74
  85. zaber_motion/dto/binary/__init__.py +11 -11
  86. zaber_motion/dto/binary/binary_settings.py +74 -74
  87. zaber_motion/dto/binary/command_code.py +106 -106
  88. zaber_motion/dto/binary/device_identity.py +156 -156
  89. zaber_motion/dto/binary/device_type.py +12 -12
  90. zaber_motion/dto/binary/error_code.py +101 -101
  91. zaber_motion/dto/binary/message.py +91 -91
  92. zaber_motion/dto/binary/reply_code.py +16 -16
  93. zaber_motion/dto/binary/reply_only_event.py +91 -91
  94. zaber_motion/dto/binary/unknown_response_event.py +91 -91
  95. zaber_motion/dto/channel_address.py +74 -74
  96. zaber_motion/dto/device_db_source.py +66 -66
  97. zaber_motion/dto/device_db_source_type.py +11 -11
  98. zaber_motion/dto/exceptions/__init__.py +24 -24
  99. zaber_motion/dto/exceptions/binary_command_failed_exception_data.py +57 -57
  100. zaber_motion/dto/exceptions/command_failed_exception_data.py +151 -151
  101. zaber_motion/dto/exceptions/command_too_long_exception_data.py +98 -98
  102. zaber_motion/dto/exceptions/device_address_conflict_exception_data.py +63 -63
  103. zaber_motion/dto/exceptions/device_db_failed_exception_data.py +74 -74
  104. zaber_motion/dto/exceptions/device_db_inner_error.py +85 -85
  105. zaber_motion/dto/exceptions/g_code_execution_exception_data.py +75 -75
  106. zaber_motion/dto/exceptions/g_code_syntax_exception_data.py +75 -75
  107. zaber_motion/dto/exceptions/invalid_packet_exception_data.py +63 -63
  108. zaber_motion/dto/exceptions/invalid_pvt_point.py +69 -69
  109. zaber_motion/dto/exceptions/invalid_response_exception_data.py +51 -51
  110. zaber_motion/dto/exceptions/movement_failed_exception_data.py +104 -104
  111. zaber_motion/dto/exceptions/movement_interrupted_exception_data.py +104 -104
  112. zaber_motion/dto/exceptions/operation_failed_exception_data.py +104 -104
  113. zaber_motion/dto/exceptions/pvt_execution_exception_data.py +86 -86
  114. zaber_motion/dto/exceptions/pvt_movement_failed_exception_data.py +69 -69
  115. zaber_motion/dto/exceptions/pvt_movement_interrupted_exception_data.py +69 -69
  116. zaber_motion/dto/exceptions/set_device_state_exception_data.py +176 -176
  117. zaber_motion/dto/exceptions/set_peripheral_state_exception_data.py +121 -121
  118. zaber_motion/dto/exceptions/stream_execution_exception_data.py +63 -63
  119. zaber_motion/dto/exceptions/stream_movement_failed_exception_data.py +69 -69
  120. zaber_motion/dto/exceptions/stream_movement_interrupted_exception_data.py +69 -69
  121. zaber_motion/dto/firmware_version.py +91 -91
  122. zaber_motion/dto/gcode/__init__.py +9 -9
  123. zaber_motion/dto/gcode/axis_definition.py +74 -74
  124. zaber_motion/dto/gcode/axis_mapping.py +69 -69
  125. zaber_motion/dto/gcode/axis_transformation.py +79 -79
  126. zaber_motion/dto/gcode/device_definition.py +99 -99
  127. zaber_motion/dto/gcode/translate_message.py +87 -87
  128. zaber_motion/dto/gcode/translate_result.py +79 -79
  129. zaber_motion/dto/gcode/translator_config.py +84 -84
  130. zaber_motion/dto/log_output_mode.py +13 -13
  131. zaber_motion/dto/measurement.py +67 -67
  132. zaber_motion/dto/microscopy/__init__.py +6 -6
  133. zaber_motion/dto/microscopy/autofocus_status.py +57 -57
  134. zaber_motion/dto/microscopy/microscope_config.py +159 -159
  135. zaber_motion/dto/microscopy/third_party_components.py +55 -55
  136. zaber_motion/dto/microscopy/wdi_autofocus_provider_status.py +57 -57
  137. zaber_motion/dto/named_parameter.py +64 -64
  138. zaber_motion/dto/product/__init__.py +5 -5
  139. zaber_motion/dto/product/process_controller_mode.py +13 -13
  140. zaber_motion/dto/product/process_controller_source.py +72 -72
  141. zaber_motion/dto/product/process_controller_source_sensor.py +11 -11
  142. zaber_motion/dto/requests/__init__.py +256 -254
  143. zaber_motion/dto/requests/alert_event_wrapper.py +82 -82
  144. zaber_motion/dto/requests/autofocus_focus_request.py +131 -131
  145. zaber_motion/dto/requests/autofocus_get_objective_params_request.py +121 -121
  146. zaber_motion/dto/requests/autofocus_get_objective_params_response.py +56 -56
  147. zaber_motion/dto/requests/autofocus_get_status_response.py +50 -50
  148. zaber_motion/dto/requests/autofocus_set_objective_params_request.py +141 -141
  149. zaber_motion/dto/requests/axes_empty_request.py +95 -95
  150. zaber_motion/dto/requests/axes_get_setting_request.py +121 -121
  151. zaber_motion/dto/requests/axes_move_request.py +114 -114
  152. zaber_motion/dto/requests/axis_empty_request.py +79 -79
  153. zaber_motion/dto/requests/axis_move_type.py +12 -12
  154. zaber_motion/dto/requests/axis_to_string_request.py +88 -88
  155. zaber_motion/dto/requests/binary_device_detect_request.py +56 -56
  156. zaber_motion/dto/requests/binary_device_detect_response.py +57 -57
  157. zaber_motion/dto/requests/binary_device_get_setting_request.py +89 -89
  158. zaber_motion/dto/requests/binary_device_home_request.py +88 -88
  159. zaber_motion/dto/requests/binary_device_move_request.py +111 -111
  160. zaber_motion/dto/requests/binary_device_set_setting_request.py +100 -100
  161. zaber_motion/dto/requests/binary_device_stop_request.py +88 -88
  162. zaber_motion/dto/requests/binary_generic_with_units_request.py +122 -122
  163. zaber_motion/dto/requests/binary_message_collection.py +56 -56
  164. zaber_motion/dto/requests/binary_reply_only_event_wrapper.py +82 -82
  165. zaber_motion/dto/requests/bool_response.py +43 -43
  166. zaber_motion/dto/requests/can_set_state_axis_response.py +60 -60
  167. zaber_motion/dto/requests/can_set_state_request.py +100 -100
  168. zaber_motion/dto/requests/channel_on.py +84 -84
  169. zaber_motion/dto/requests/channel_set_intensity.py +90 -90
  170. zaber_motion/dto/requests/check_version_request.py +54 -54
  171. zaber_motion/dto/requests/custom_interface_close_request.py +60 -60
  172. zaber_motion/dto/requests/custom_interface_open_response.py +51 -51
  173. zaber_motion/dto/requests/custom_interface_read_request.py +51 -51
  174. zaber_motion/dto/requests/custom_interface_write_request.py +60 -60
  175. zaber_motion/dto/requests/device_cancel_all_outputs_schedule_request.py +80 -80
  176. zaber_motion/dto/requests/device_cancel_output_schedule_request.py +84 -84
  177. zaber_motion/dto/requests/device_convert_setting_request.py +116 -116
  178. zaber_motion/dto/requests/device_detect_request.py +68 -68
  179. zaber_motion/dto/requests/device_detect_response.py +57 -57
  180. zaber_motion/dto/requests/device_empty_request.py +65 -65
  181. zaber_motion/dto/requests/device_get_all_analog_io_request.py +74 -74
  182. zaber_motion/dto/requests/device_get_all_analog_io_response.py +54 -54
  183. zaber_motion/dto/requests/device_get_all_digital_io_request.py +74 -74
  184. zaber_motion/dto/requests/device_get_all_digital_io_response.py +46 -46
  185. zaber_motion/dto/requests/device_get_analog_io_request.py +88 -88
  186. zaber_motion/dto/requests/device_get_digital_io_request.py +88 -88
  187. zaber_motion/dto/requests/device_get_setting_request.py +100 -100
  188. zaber_motion/dto/requests/device_get_storage_request.py +93 -93
  189. zaber_motion/dto/requests/device_get_warnings_request.py +84 -84
  190. zaber_motion/dto/requests/device_get_warnings_response.py +51 -51
  191. zaber_motion/dto/requests/device_home_request.py +84 -84
  192. zaber_motion/dto/requests/device_identify_request.py +77 -77
  193. zaber_motion/dto/requests/device_move_request.py +177 -177
  194. zaber_motion/dto/requests/device_move_sin_request.py +140 -140
  195. zaber_motion/dto/requests/device_multi_get_setting_request.py +118 -118
  196. zaber_motion/dto/requests/device_on_all_request.py +56 -56
  197. zaber_motion/dto/requests/device_on_all_response.py +57 -57
  198. zaber_motion/dto/requests/device_restore_request.py +84 -84
  199. zaber_motion/dto/requests/device_set_all_analog_outputs_request.py +82 -82
  200. zaber_motion/dto/requests/device_set_all_analog_outputs_schedule_request.py +121 -121
  201. zaber_motion/dto/requests/device_set_all_digital_outputs_request.py +83 -83
  202. zaber_motion/dto/requests/device_set_all_digital_outputs_schedule_request.py +122 -122
  203. zaber_motion/dto/requests/device_set_analog_output_request.py +90 -90
  204. zaber_motion/dto/requests/device_set_analog_output_schedule_request.py +124 -124
  205. zaber_motion/dto/requests/device_set_digital_output_request.py +91 -91
  206. zaber_motion/dto/requests/device_set_digital_output_schedule_request.py +125 -125
  207. zaber_motion/dto/requests/device_set_lowpass_filter_request.py +102 -102
  208. zaber_motion/dto/requests/device_set_setting_bool_request.py +93 -93
  209. zaber_motion/dto/requests/device_set_setting_int_request.py +102 -102
  210. zaber_motion/dto/requests/device_set_setting_request.py +111 -111
  211. zaber_motion/dto/requests/device_set_setting_str_request.py +97 -97
  212. zaber_motion/dto/requests/device_set_storage_bool_request.py +93 -93
  213. zaber_motion/dto/requests/device_set_storage_number_request.py +99 -99
  214. zaber_motion/dto/requests/device_set_storage_request.py +102 -102
  215. zaber_motion/dto/requests/device_set_unit_conversions_request.py +108 -108
  216. zaber_motion/dto/requests/device_stop_request.py +84 -84
  217. zaber_motion/dto/requests/device_storage_list_keys_request.py +88 -88
  218. zaber_motion/dto/requests/device_storage_request.py +88 -88
  219. zaber_motion/dto/requests/device_type.py +8 -8
  220. zaber_motion/dto/requests/device_wait_until_idle_request.py +84 -84
  221. zaber_motion/dto/requests/disconnected_event.py +101 -101
  222. zaber_motion/dto/requests/double_array_response.py +54 -54
  223. zaber_motion/dto/requests/double_response.py +48 -48
  224. zaber_motion/dto/requests/driver_enable_request.py +90 -90
  225. zaber_motion/dto/requests/empty_autofocus_request.py +107 -107
  226. zaber_motion/dto/requests/empty_request.py +38 -38
  227. zaber_motion/dto/requests/errors.py +68 -68
  228. zaber_motion/dto/requests/find_device_request.py +65 -65
  229. zaber_motion/dto/requests/find_device_response.py +51 -51
  230. zaber_motion/dto/requests/forget_devices_request.py +71 -71
  231. zaber_motion/dto/requests/gateway_event.py +45 -45
  232. zaber_motion/dto/requests/gateway_request.py +45 -45
  233. zaber_motion/dto/requests/gateway_response.py +69 -69
  234. zaber_motion/dto/requests/generic_binary_request.py +107 -107
  235. zaber_motion/dto/requests/generic_command_request.py +107 -107
  236. zaber_motion/dto/requests/generic_command_response_collection.py +56 -56
  237. zaber_motion/dto/requests/get_all_io_port_labels_response.py +56 -56
  238. zaber_motion/dto/requests/get_axis_setting_results.py +56 -56
  239. zaber_motion/dto/requests/get_io_port_label_request.py +91 -91
  240. zaber_motion/dto/requests/get_setting_results.py +56 -56
  241. zaber_motion/dto/requests/get_simple_tuning_param_definition_response.py +56 -56
  242. zaber_motion/dto/requests/int_64_response.py +51 -51
  243. zaber_motion/dto/requests/int_array_response.py +57 -57
  244. zaber_motion/dto/requests/int_request.py +51 -51
  245. zaber_motion/dto/requests/int_response.py +51 -51
  246. zaber_motion/dto/requests/interface_empty_request.py +51 -51
  247. zaber_motion/dto/requests/interface_type.py +11 -11
  248. zaber_motion/dto/requests/load_paramset.py +102 -102
  249. zaber_motion/dto/requests/lockstep_disable_request.py +84 -84
  250. zaber_motion/dto/requests/lockstep_empty_request.py +79 -79
  251. zaber_motion/dto/requests/lockstep_enable_request.py +99 -99
  252. zaber_motion/dto/requests/lockstep_get_axis_numbers_response.py +57 -57
  253. zaber_motion/dto/requests/lockstep_get_request.py +91 -91
  254. zaber_motion/dto/requests/lockstep_home_request.py +84 -84
  255. zaber_motion/dto/requests/lockstep_move_request.py +163 -163
  256. zaber_motion/dto/requests/lockstep_move_sin_request.py +140 -140
  257. zaber_motion/dto/requests/lockstep_set_request.py +116 -116
  258. zaber_motion/dto/requests/lockstep_stop_request.py +84 -84
  259. zaber_motion/dto/requests/lockstep_wait_until_idle_request.py +84 -84
  260. zaber_motion/dto/requests/microscope_config_response.py +50 -50
  261. zaber_motion/dto/requests/microscope_empty_request.py +65 -65
  262. zaber_motion/dto/requests/microscope_find_request.py +63 -63
  263. zaber_motion/dto/requests/microscope_init_request.py +70 -70
  264. zaber_motion/dto/requests/microscope_trigger_camera_request.py +107 -107
  265. zaber_motion/dto/requests/objective_changer_change_request.py +119 -119
  266. zaber_motion/dto/requests/objective_changer_create_response.py +79 -79
  267. zaber_motion/dto/requests/objective_changer_get_current_response.py +51 -51
  268. zaber_motion/dto/requests/objective_changer_request.py +93 -93
  269. zaber_motion/dto/requests/objective_changer_set_request.py +116 -116
  270. zaber_motion/dto/requests/open_binary_interface_request.py +100 -100
  271. zaber_motion/dto/requests/open_interface_request.py +159 -159
  272. zaber_motion/dto/requests/open_interface_response.py +51 -51
  273. zaber_motion/dto/requests/oscilloscope_add_io_channel_request.py +91 -91
  274. zaber_motion/dto/requests/oscilloscope_add_setting_channel_request.py +88 -88
  275. zaber_motion/dto/requests/oscilloscope_data_get_request.py +63 -63
  276. zaber_motion/dto/requests/oscilloscope_data_get_sample_time_request.py +77 -77
  277. zaber_motion/dto/requests/oscilloscope_data_get_samples_response.py +54 -54
  278. zaber_motion/dto/requests/oscilloscope_data_identifier.py +51 -51
  279. zaber_motion/dto/requests/oscilloscope_read_response.py +57 -57
  280. zaber_motion/dto/requests/oscilloscope_request.py +65 -65
  281. zaber_motion/dto/requests/oscilloscope_start_request.py +79 -79
  282. zaber_motion/dto/requests/prepare_command_request.py +108 -108
  283. zaber_motion/dto/requests/process_on.py +107 -107
  284. zaber_motion/dto/requests/pvt_buffer_get_sequence_data_request.py +79 -79
  285. zaber_motion/dto/requests/pvt_csv_request.py +59 -59
  286. zaber_motion/dto/requests/pvt_generate_positions_request.py +74 -74
  287. zaber_motion/dto/requests/pvt_generate_velocities_and_times_request.py +96 -96
  288. zaber_motion/dto/requests/pvt_generate_velocities_request.py +93 -93
  289. zaber_motion/dto/requests/pvt_load_csv_request.py +45 -45
  290. zaber_motion/dto/requests/pvt_point_request.py +145 -145
  291. zaber_motion/dto/requests/pvt_points_request.py +147 -147
  292. zaber_motion/dto/requests/pvt_save_csv_request.py +74 -74
  293. zaber_motion/dto/requests/pvt_submit_sequence_data_request.py +93 -93
  294. zaber_motion/dto/requests/renumber_request.py +79 -79
  295. zaber_motion/dto/requests/response_type.py +8 -8
  296. zaber_motion/dto/requests/servo_tuning_paramset_response.py +48 -48
  297. zaber_motion/dto/requests/servo_tuning_request.py +91 -91
  298. zaber_motion/dto/requests/set_device_db_layered_sources_request.py +56 -56
  299. zaber_motion/dto/requests/set_device_db_source_request.py +63 -63
  300. zaber_motion/dto/requests/set_interface_checksum_enabled_request.py +56 -56
  301. zaber_motion/dto/requests/set_interface_timeout_request.py +65 -65
  302. zaber_motion/dto/requests/set_internal_mode_request.py +43 -43
  303. zaber_motion/dto/requests/set_io_port_label_request.py +100 -100
  304. zaber_motion/dto/requests/set_log_output_request.py +57 -57
  305. zaber_motion/dto/requests/set_process_controller_source.py +93 -93
  306. zaber_motion/dto/requests/set_servo_tuning_pid_request.py +135 -135
  307. zaber_motion/dto/requests/set_servo_tuning_request.py +116 -116
  308. zaber_motion/dto/requests/set_simple_tuning.py +174 -174
  309. zaber_motion/dto/requests/set_state_request.py +93 -93
  310. zaber_motion/dto/requests/stream_arc_request.py +199 -199
  311. zaber_motion/dto/requests/stream_buffer_erase_request.py +84 -84
  312. zaber_motion/dto/requests/stream_buffer_get_content_request.py +84 -84
  313. zaber_motion/dto/requests/stream_buffer_get_content_response.py +51 -51
  314. zaber_motion/dto/requests/stream_buffer_list.py +70 -70
  315. zaber_motion/dto/requests/stream_call_request.py +112 -112
  316. zaber_motion/dto/requests/stream_cancel_all_outputs_schedule_request.py +99 -99
  317. zaber_motion/dto/requests/stream_cancel_output_schedule_request.py +103 -103
  318. zaber_motion/dto/requests/stream_circle_request.py +155 -155
  319. zaber_motion/dto/requests/stream_empty_request.py +84 -84
  320. zaber_motion/dto/requests/stream_generic_command_batch_request.py +99 -99
  321. zaber_motion/dto/requests/stream_generic_command_request.py +93 -93
  322. zaber_motion/dto/requests/stream_get_axes_response.py +75 -75
  323. zaber_motion/dto/requests/stream_get_max_centripetal_acceleration_request.py +96 -96
  324. zaber_motion/dto/requests/stream_get_max_speed_request.py +96 -96
  325. zaber_motion/dto/requests/stream_get_max_tangential_acceleration_request.py +96 -96
  326. zaber_motion/dto/requests/stream_line_request.py +135 -135
  327. zaber_motion/dto/requests/stream_mode_response.py +60 -60
  328. zaber_motion/dto/requests/stream_segment_type.py +8 -8
  329. zaber_motion/dto/requests/stream_set_all_analog_outputs_request.py +101 -101
  330. zaber_motion/dto/requests/stream_set_all_analog_outputs_schedule_request.py +140 -140
  331. zaber_motion/dto/requests/stream_set_all_digital_outputs_request.py +102 -102
  332. zaber_motion/dto/requests/stream_set_all_digital_outputs_schedule_request.py +141 -141
  333. zaber_motion/dto/requests/stream_set_analog_output_request.py +109 -109
  334. zaber_motion/dto/requests/stream_set_analog_output_schedule_request.py +143 -143
  335. zaber_motion/dto/requests/stream_set_digital_output_request.py +110 -110
  336. zaber_motion/dto/requests/stream_set_digital_output_schedule_request.py +144 -144
  337. zaber_motion/dto/requests/stream_set_hold_request.py +89 -89
  338. zaber_motion/dto/requests/stream_set_max_centripetal_acceleration_request.py +107 -107
  339. zaber_motion/dto/requests/stream_set_max_speed_request.py +107 -107
  340. zaber_motion/dto/requests/stream_set_max_tangential_acceleration_request.py +107 -107
  341. zaber_motion/dto/requests/stream_setup_live_composite_request.py +123 -123
  342. zaber_motion/dto/requests/stream_setup_live_request.py +104 -104
  343. zaber_motion/dto/requests/stream_setup_store_arbitrary_axes_request.py +126 -126
  344. zaber_motion/dto/requests/stream_setup_store_composite_request.py +151 -151
  345. zaber_motion/dto/requests/stream_setup_store_request.py +132 -132
  346. zaber_motion/dto/requests/stream_wait_analog_input_request.py +118 -118
  347. zaber_motion/dto/requests/stream_wait_digital_input_request.py +103 -103
  348. zaber_motion/dto/requests/stream_wait_request.py +107 -107
  349. zaber_motion/dto/requests/stream_wait_until_idle_request.py +89 -89
  350. zaber_motion/dto/requests/string_array_response.py +51 -51
  351. zaber_motion/dto/requests/string_response.py +45 -45
  352. zaber_motion/dto/requests/test_event.py +45 -45
  353. zaber_motion/dto/requests/test_request.py +55 -55
  354. zaber_motion/dto/requests/test_request_complex.py +57 -0
  355. zaber_motion/dto/requests/test_response.py +45 -45
  356. zaber_motion/dto/requests/test_response_long.py +51 -51
  357. zaber_motion/dto/requests/toggle_device_db_store_request.py +50 -50
  358. zaber_motion/dto/requests/tools_list_serial_ports_response.py +51 -51
  359. zaber_motion/dto/requests/translator_create_from_device_request.py +97 -97
  360. zaber_motion/dto/requests/translator_create_live_request.py +91 -91
  361. zaber_motion/dto/requests/translator_create_request.py +62 -62
  362. zaber_motion/dto/requests/translator_create_response.py +51 -51
  363. zaber_motion/dto/requests/translator_empty_request.py +51 -51
  364. zaber_motion/dto/requests/translator_flush_live_request.py +56 -56
  365. zaber_motion/dto/requests/translator_flush_response.py +51 -51
  366. zaber_motion/dto/requests/translator_get_axis_offset_request.py +81 -81
  367. zaber_motion/dto/requests/translator_get_axis_position_request.py +72 -72
  368. zaber_motion/dto/requests/translator_set_axis_position_request.py +83 -83
  369. zaber_motion/dto/requests/translator_set_feed_rate_override_request.py +62 -62
  370. zaber_motion/dto/requests/translator_set_traverse_rate_request.py +74 -74
  371. zaber_motion/dto/requests/translator_translate_request.py +60 -60
  372. zaber_motion/dto/requests/trigger_clear_action_request.py +91 -91
  373. zaber_motion/dto/requests/trigger_empty_request.py +79 -79
  374. zaber_motion/dto/requests/trigger_enable_request.py +93 -93
  375. zaber_motion/dto/requests/trigger_enabled_states.py +56 -56
  376. zaber_motion/dto/requests/trigger_fire_at_interval_request.py +102 -102
  377. zaber_motion/dto/requests/trigger_fire_when_distance_travelled_request.py +116 -116
  378. zaber_motion/dto/requests/trigger_fire_when_io_request.py +128 -128
  379. zaber_motion/dto/requests/trigger_fire_when_request.py +88 -88
  380. zaber_motion/dto/requests/trigger_fire_when_setting_request.py +137 -137
  381. zaber_motion/dto/requests/trigger_on_fire_request.py +114 -114
  382. zaber_motion/dto/requests/trigger_on_fire_set_request.py +149 -149
  383. zaber_motion/dto/requests/trigger_on_fire_set_to_setting_request.py +149 -149
  384. zaber_motion/dto/requests/trigger_set_label_request.py +88 -88
  385. zaber_motion/dto/requests/trigger_states.py +56 -56
  386. zaber_motion/dto/requests/unit_convert_unit_request.py +71 -71
  387. zaber_motion/dto/requests/unit_get_enum_request.py +45 -45
  388. zaber_motion/dto/requests/unit_get_enum_response.py +48 -48
  389. zaber_motion/dto/requests/unit_get_symbol_request.py +48 -48
  390. zaber_motion/dto/requests/unit_get_symbol_response.py +45 -45
  391. zaber_motion/dto/requests/unknown_binary_response_event_wrapper.py +82 -82
  392. zaber_motion/dto/requests/unknown_response_event_wrapper.py +82 -82
  393. zaber_motion/dto/requests/wait_to_clear_warnings_request.py +105 -105
  394. zaber_motion/dto/requests/wait_to_respond_request.py +76 -76
  395. zaber_motion/dto/requests/wdi_generic_float_request.py +119 -0
  396. zaber_motion/dto/requests/wdi_generic_request.py +136 -136
  397. zaber_motion/dto/requests/wdi_get_status_response.py +50 -50
  398. zaber_motion/dto/rotation_direction.py +13 -13
  399. zaber_motion/dto_object.py +18 -18
  400. zaber_motion/events.py +112 -112
  401. zaber_motion/exceptions/__init__.py +87 -87
  402. zaber_motion/exceptions/bad_command_exception.py +10 -10
  403. zaber_motion/exceptions/bad_data_exception.py +10 -10
  404. zaber_motion/exceptions/binary_command_failed_exception.py +27 -27
  405. zaber_motion/exceptions/command_failed_exception.py +27 -27
  406. zaber_motion/exceptions/command_preempted_exception.py +10 -10
  407. zaber_motion/exceptions/command_too_long_exception.py +27 -27
  408. zaber_motion/exceptions/connection_closed_exception.py +10 -10
  409. zaber_motion/exceptions/connection_failed_exception.py +10 -10
  410. zaber_motion/exceptions/conversion_failed_exception.py +10 -10
  411. zaber_motion/exceptions/device_address_conflict_exception.py +27 -27
  412. zaber_motion/exceptions/device_busy_exception.py +10 -10
  413. zaber_motion/exceptions/device_db_failed_exception.py +27 -27
  414. zaber_motion/exceptions/device_detection_failed_exception.py +10 -10
  415. zaber_motion/exceptions/device_failed_exception.py +11 -11
  416. zaber_motion/exceptions/device_not_identified_exception.py +10 -10
  417. zaber_motion/exceptions/driver_disabled_exception.py +10 -10
  418. zaber_motion/exceptions/g_code_execution_exception.py +27 -27
  419. zaber_motion/exceptions/g_code_syntax_exception.py +27 -27
  420. zaber_motion/exceptions/incompatible_shared_library_exception.py +11 -11
  421. zaber_motion/exceptions/internal_error_exception.py +10 -10
  422. zaber_motion/exceptions/invalid_argument_exception.py +10 -10
  423. zaber_motion/exceptions/invalid_csv_data_exception.py +10 -10
  424. zaber_motion/exceptions/invalid_data_exception.py +10 -10
  425. zaber_motion/exceptions/invalid_operation_exception.py +10 -10
  426. zaber_motion/exceptions/invalid_packet_exception.py +27 -27
  427. zaber_motion/exceptions/invalid_park_state_exception.py +10 -10
  428. zaber_motion/exceptions/invalid_request_data_exception.py +11 -11
  429. zaber_motion/exceptions/invalid_response_exception.py +27 -27
  430. zaber_motion/exceptions/io_channel_out_of_range_exception.py +10 -10
  431. zaber_motion/exceptions/io_failed_exception.py +10 -10
  432. zaber_motion/exceptions/lockstep_enabled_exception.py +10 -10
  433. zaber_motion/exceptions/lockstep_not_enabled_exception.py +10 -10
  434. zaber_motion/exceptions/motion_lib_exception.py +18 -18
  435. zaber_motion/exceptions/movement_failed_exception.py +27 -27
  436. zaber_motion/exceptions/movement_interrupted_exception.py +27 -27
  437. zaber_motion/exceptions/no_device_found_exception.py +10 -10
  438. zaber_motion/exceptions/no_value_for_key_exception.py +10 -10
  439. zaber_motion/exceptions/not_supported_exception.py +10 -10
  440. zaber_motion/exceptions/operation_failed_exception.py +27 -27
  441. zaber_motion/exceptions/os_failed_exception.py +10 -10
  442. zaber_motion/exceptions/out_of_request_ids_exception.py +10 -10
  443. zaber_motion/exceptions/pvt_discontinuity_exception.py +10 -10
  444. zaber_motion/exceptions/pvt_execution_exception.py +27 -27
  445. zaber_motion/exceptions/pvt_mode_exception.py +10 -10
  446. zaber_motion/exceptions/pvt_movement_failed_exception.py +27 -27
  447. zaber_motion/exceptions/pvt_movement_interrupted_exception.py +27 -27
  448. zaber_motion/exceptions/pvt_sequence_generation_failed_exception.py +10 -10
  449. zaber_motion/exceptions/pvt_setup_failed_exception.py +10 -10
  450. zaber_motion/exceptions/remote_mode_exception.py +11 -11
  451. zaber_motion/exceptions/request_timeout_exception.py +10 -10
  452. zaber_motion/exceptions/serial_port_busy_exception.py +10 -10
  453. zaber_motion/exceptions/set_device_state_failed_exception.py +27 -27
  454. zaber_motion/exceptions/set_peripheral_state_failed_exception.py +27 -27
  455. zaber_motion/exceptions/setting_not_found_exception.py +10 -10
  456. zaber_motion/exceptions/stream_discontinuity_exception.py +10 -10
  457. zaber_motion/exceptions/stream_execution_exception.py +27 -27
  458. zaber_motion/exceptions/stream_mode_exception.py +10 -10
  459. zaber_motion/exceptions/stream_movement_failed_exception.py +27 -27
  460. zaber_motion/exceptions/stream_movement_interrupted_exception.py +27 -27
  461. zaber_motion/exceptions/stream_setup_failed_exception.py +10 -10
  462. zaber_motion/exceptions/timeout_exception.py +10 -10
  463. zaber_motion/exceptions/transport_already_used_exception.py +10 -10
  464. zaber_motion/exceptions/unknown_request_exception.py +10 -10
  465. zaber_motion/gcode/__init__.py +11 -11
  466. zaber_motion/gcode/offline_translator.py +401 -401
  467. zaber_motion/gcode/translator.py +424 -424
  468. zaber_motion/library.py +179 -179
  469. zaber_motion/microscopy/__init__.py +14 -14
  470. zaber_motion/microscopy/autofocus.py +645 -645
  471. zaber_motion/microscopy/camera_trigger.py +108 -108
  472. zaber_motion/microscopy/filter_changer.py +167 -167
  473. zaber_motion/microscopy/illuminator.py +139 -139
  474. zaber_motion/microscopy/illuminator_channel.py +616 -616
  475. zaber_motion/microscopy/microscope.py +315 -315
  476. zaber_motion/microscopy/objective_changer.py +403 -403
  477. zaber_motion/microscopy/wdi_autofocus_provider.py +536 -396
  478. zaber_motion/product/__init__.py +7 -7
  479. zaber_motion/product/process.py +818 -818
  480. zaber_motion/product/process_controller.py +134 -134
  481. zaber_motion/serialization.py +32 -32
  482. zaber_motion/tools.py +78 -78
  483. zaber_motion/unit_table.py +86 -86
  484. zaber_motion/units.py +206 -206
  485. zaber_motion/version.py +1 -1
  486. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/LICENSE.txt +2119 -2119
  487. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/METADATA +1 -1
  488. zaber_motion-7.14.0.dist-info/RECORD +496 -0
  489. zaber_motion_bindings/zaber-motion-core-windows-amd64.dll +0 -0
  490. zaber_motion-7.13.0.dist-info/RECORD +0 -494
  491. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/WHEEL +0 -0
  492. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/top_level.txt +0 -0
@@ -1,1184 +1,1184 @@
1
- # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
- # ============== DO NOT EDIT DIRECTLY ============== #
3
- from typing import TYPE_CHECKING, List
4
- from ..dto import requests as dto
5
- from ..units import Units, LengthUnits, VelocityUnits, AccelerationUnits, TimeUnits
6
- from ..call import call, call_async, call_sync
7
- from ..dto.ascii.lockstep_axes import LockstepAxes
8
-
9
- if TYPE_CHECKING:
10
- from .device import Device
11
-
12
-
13
- class Lockstep:
14
- """
15
- Represents a lockstep group with this ID on a device.
16
- A lockstep group is a movement synchronized pair of axes on a device.
17
- Requires at least Firmware 6.15 or 7.11.
18
- """
19
-
20
- @property
21
- def device(self) -> 'Device':
22
- """
23
- Device that controls this lockstep group.
24
- """
25
- return self._device
26
-
27
- @property
28
- def lockstep_group_id(self) -> int:
29
- """
30
- The number that identifies the lockstep group on the device.
31
- """
32
- return self._lockstep_group_id
33
-
34
- def __init__(self, device: 'Device', lockstep_group_id: int):
35
- self._device: 'Device' = device
36
- self._lockstep_group_id: int = lockstep_group_id
37
-
38
- def enable(
39
- self,
40
- *axes: int
41
- ) -> None:
42
- """
43
- Activate the lockstep group on the axes specified.
44
-
45
- Args:
46
- axes: The numbers of axes in the lockstep group.
47
- """
48
- request = dto.LockstepEnableRequest(
49
- interface_id=self.device.connection.interface_id,
50
- device=self.device.device_address,
51
- lockstep_group_id=self.lockstep_group_id,
52
- axes=list(axes),
53
- )
54
- call("device/lockstep_enable", request)
55
-
56
- async def enable_async(
57
- self,
58
- *axes: int
59
- ) -> None:
60
- """
61
- Activate the lockstep group on the axes specified.
62
-
63
- Args:
64
- axes: The numbers of axes in the lockstep group.
65
- """
66
- request = dto.LockstepEnableRequest(
67
- interface_id=self.device.connection.interface_id,
68
- device=self.device.device_address,
69
- lockstep_group_id=self.lockstep_group_id,
70
- axes=list(axes),
71
- )
72
- await call_async("device/lockstep_enable", request)
73
-
74
- def disable(
75
- self
76
- ) -> None:
77
- """
78
- Disable the lockstep group.
79
- """
80
- request = dto.LockstepDisableRequest(
81
- interface_id=self.device.connection.interface_id,
82
- device=self.device.device_address,
83
- lockstep_group_id=self.lockstep_group_id,
84
- )
85
- call("device/lockstep_disable", request)
86
-
87
- async def disable_async(
88
- self
89
- ) -> None:
90
- """
91
- Disable the lockstep group.
92
- """
93
- request = dto.LockstepDisableRequest(
94
- interface_id=self.device.connection.interface_id,
95
- device=self.device.device_address,
96
- lockstep_group_id=self.lockstep_group_id,
97
- )
98
- await call_async("device/lockstep_disable", request)
99
-
100
- def stop(
101
- self,
102
- wait_until_idle: bool = True
103
- ) -> None:
104
- """
105
- Stops ongoing lockstep group movement. Decelerates until zero speed.
106
-
107
- Args:
108
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
109
- """
110
- request = dto.LockstepStopRequest(
111
- interface_id=self.device.connection.interface_id,
112
- device=self.device.device_address,
113
- lockstep_group_id=self.lockstep_group_id,
114
- wait_until_idle=wait_until_idle,
115
- )
116
- call("device/lockstep_stop", request)
117
-
118
- async def stop_async(
119
- self,
120
- wait_until_idle: bool = True
121
- ) -> None:
122
- """
123
- Stops ongoing lockstep group movement. Decelerates until zero speed.
124
-
125
- Args:
126
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
127
- """
128
- request = dto.LockstepStopRequest(
129
- interface_id=self.device.connection.interface_id,
130
- device=self.device.device_address,
131
- lockstep_group_id=self.lockstep_group_id,
132
- wait_until_idle=wait_until_idle,
133
- )
134
- await call_async("device/lockstep_stop", request)
135
-
136
- def home(
137
- self,
138
- wait_until_idle: bool = True
139
- ) -> None:
140
- """
141
- Retracts the axes of the lockstep group until a home associated with an individual axis is detected.
142
-
143
- Args:
144
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
145
- """
146
- request = dto.LockstepHomeRequest(
147
- interface_id=self.device.connection.interface_id,
148
- device=self.device.device_address,
149
- lockstep_group_id=self.lockstep_group_id,
150
- wait_until_idle=wait_until_idle,
151
- )
152
- call("device/lockstep_home", request)
153
-
154
- async def home_async(
155
- self,
156
- wait_until_idle: bool = True
157
- ) -> None:
158
- """
159
- Retracts the axes of the lockstep group until a home associated with an individual axis is detected.
160
-
161
- Args:
162
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
163
- """
164
- request = dto.LockstepHomeRequest(
165
- interface_id=self.device.connection.interface_id,
166
- device=self.device.device_address,
167
- lockstep_group_id=self.lockstep_group_id,
168
- wait_until_idle=wait_until_idle,
169
- )
170
- await call_async("device/lockstep_home", request)
171
-
172
- def move_absolute(
173
- self,
174
- position: float,
175
- unit: LengthUnits = Units.NATIVE,
176
- wait_until_idle: bool = True,
177
- velocity: float = 0,
178
- velocity_unit: VelocityUnits = Units.NATIVE,
179
- acceleration: float = 0,
180
- acceleration_unit: AccelerationUnits = Units.NATIVE
181
- ) -> None:
182
- """
183
- Move the first axis of the lockstep group to an absolute position.
184
- The other axes in the lockstep group maintain their offsets throughout movement.
185
-
186
- Args:
187
- position: Absolute position.
188
- unit: Units of position.
189
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
190
- velocity: Movement velocity.
191
- Default value of 0 indicates that the maxspeed setting is used instead.
192
- Requires at least Firmware 7.25.
193
- velocity_unit: Units of velocity.
194
- acceleration: Movement acceleration.
195
- Default value of 0 indicates that the accel setting is used instead.
196
- Requires at least Firmware 7.25.
197
- acceleration_unit: Units of acceleration.
198
- """
199
- request = dto.LockstepMoveRequest(
200
- interface_id=self.device.connection.interface_id,
201
- device=self.device.device_address,
202
- lockstep_group_id=self.lockstep_group_id,
203
- type=dto.AxisMoveType.ABS,
204
- arg=position,
205
- unit=unit,
206
- wait_until_idle=wait_until_idle,
207
- velocity=velocity,
208
- velocity_unit=velocity_unit,
209
- acceleration=acceleration,
210
- acceleration_unit=acceleration_unit,
211
- )
212
- call("device/lockstep_move", request)
213
-
214
- async def move_absolute_async(
215
- self,
216
- position: float,
217
- unit: LengthUnits = Units.NATIVE,
218
- wait_until_idle: bool = True,
219
- velocity: float = 0,
220
- velocity_unit: VelocityUnits = Units.NATIVE,
221
- acceleration: float = 0,
222
- acceleration_unit: AccelerationUnits = Units.NATIVE
223
- ) -> None:
224
- """
225
- Move the first axis of the lockstep group to an absolute position.
226
- The other axes in the lockstep group maintain their offsets throughout movement.
227
-
228
- Args:
229
- position: Absolute position.
230
- unit: Units of position.
231
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
232
- velocity: Movement velocity.
233
- Default value of 0 indicates that the maxspeed setting is used instead.
234
- Requires at least Firmware 7.25.
235
- velocity_unit: Units of velocity.
236
- acceleration: Movement acceleration.
237
- Default value of 0 indicates that the accel setting is used instead.
238
- Requires at least Firmware 7.25.
239
- acceleration_unit: Units of acceleration.
240
- """
241
- request = dto.LockstepMoveRequest(
242
- interface_id=self.device.connection.interface_id,
243
- device=self.device.device_address,
244
- lockstep_group_id=self.lockstep_group_id,
245
- type=dto.AxisMoveType.ABS,
246
- arg=position,
247
- unit=unit,
248
- wait_until_idle=wait_until_idle,
249
- velocity=velocity,
250
- velocity_unit=velocity_unit,
251
- acceleration=acceleration,
252
- acceleration_unit=acceleration_unit,
253
- )
254
- await call_async("device/lockstep_move", request)
255
-
256
- def move_relative(
257
- self,
258
- position: float,
259
- unit: LengthUnits = Units.NATIVE,
260
- wait_until_idle: bool = True,
261
- velocity: float = 0,
262
- velocity_unit: VelocityUnits = Units.NATIVE,
263
- acceleration: float = 0,
264
- acceleration_unit: AccelerationUnits = Units.NATIVE
265
- ) -> None:
266
- """
267
- Move the first axis of the lockstep group to a position relative to its current position.
268
- The other axes in the lockstep group maintain their offsets throughout movement.
269
-
270
- Args:
271
- position: Relative position.
272
- unit: Units of position.
273
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
274
- velocity: Movement velocity.
275
- Default value of 0 indicates that the maxspeed setting is used instead.
276
- Requires at least Firmware 7.25.
277
- velocity_unit: Units of velocity.
278
- acceleration: Movement acceleration.
279
- Default value of 0 indicates that the accel setting is used instead.
280
- Requires at least Firmware 7.25.
281
- acceleration_unit: Units of acceleration.
282
- """
283
- request = dto.LockstepMoveRequest(
284
- interface_id=self.device.connection.interface_id,
285
- device=self.device.device_address,
286
- lockstep_group_id=self.lockstep_group_id,
287
- type=dto.AxisMoveType.REL,
288
- arg=position,
289
- unit=unit,
290
- wait_until_idle=wait_until_idle,
291
- velocity=velocity,
292
- velocity_unit=velocity_unit,
293
- acceleration=acceleration,
294
- acceleration_unit=acceleration_unit,
295
- )
296
- call("device/lockstep_move", request)
297
-
298
- async def move_relative_async(
299
- self,
300
- position: float,
301
- unit: LengthUnits = Units.NATIVE,
302
- wait_until_idle: bool = True,
303
- velocity: float = 0,
304
- velocity_unit: VelocityUnits = Units.NATIVE,
305
- acceleration: float = 0,
306
- acceleration_unit: AccelerationUnits = Units.NATIVE
307
- ) -> None:
308
- """
309
- Move the first axis of the lockstep group to a position relative to its current position.
310
- The other axes in the lockstep group maintain their offsets throughout movement.
311
-
312
- Args:
313
- position: Relative position.
314
- unit: Units of position.
315
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
316
- velocity: Movement velocity.
317
- Default value of 0 indicates that the maxspeed setting is used instead.
318
- Requires at least Firmware 7.25.
319
- velocity_unit: Units of velocity.
320
- acceleration: Movement acceleration.
321
- Default value of 0 indicates that the accel setting is used instead.
322
- Requires at least Firmware 7.25.
323
- acceleration_unit: Units of acceleration.
324
- """
325
- request = dto.LockstepMoveRequest(
326
- interface_id=self.device.connection.interface_id,
327
- device=self.device.device_address,
328
- lockstep_group_id=self.lockstep_group_id,
329
- type=dto.AxisMoveType.REL,
330
- arg=position,
331
- unit=unit,
332
- wait_until_idle=wait_until_idle,
333
- velocity=velocity,
334
- velocity_unit=velocity_unit,
335
- acceleration=acceleration,
336
- acceleration_unit=acceleration_unit,
337
- )
338
- await call_async("device/lockstep_move", request)
339
-
340
- def move_velocity(
341
- self,
342
- velocity: float,
343
- unit: VelocityUnits = Units.NATIVE,
344
- acceleration: float = 0,
345
- acceleration_unit: AccelerationUnits = Units.NATIVE
346
- ) -> None:
347
- """
348
- Moves the first axis of the lockstep group at the specified speed.
349
- The other axes in the lockstep group maintain their offsets throughout movement.
350
-
351
- Args:
352
- velocity: Movement velocity.
353
- unit: Units of velocity.
354
- acceleration: Movement acceleration.
355
- Default value of 0 indicates that the accel setting is used instead.
356
- Requires at least Firmware 7.25.
357
- acceleration_unit: Units of acceleration.
358
- """
359
- request = dto.LockstepMoveRequest(
360
- interface_id=self.device.connection.interface_id,
361
- device=self.device.device_address,
362
- lockstep_group_id=self.lockstep_group_id,
363
- type=dto.AxisMoveType.VEL,
364
- arg=velocity,
365
- unit=unit,
366
- acceleration=acceleration,
367
- acceleration_unit=acceleration_unit,
368
- )
369
- call("device/lockstep_move", request)
370
-
371
- async def move_velocity_async(
372
- self,
373
- velocity: float,
374
- unit: VelocityUnits = Units.NATIVE,
375
- acceleration: float = 0,
376
- acceleration_unit: AccelerationUnits = Units.NATIVE
377
- ) -> None:
378
- """
379
- Moves the first axis of the lockstep group at the specified speed.
380
- The other axes in the lockstep group maintain their offsets throughout movement.
381
-
382
- Args:
383
- velocity: Movement velocity.
384
- unit: Units of velocity.
385
- acceleration: Movement acceleration.
386
- Default value of 0 indicates that the accel setting is used instead.
387
- Requires at least Firmware 7.25.
388
- acceleration_unit: Units of acceleration.
389
- """
390
- request = dto.LockstepMoveRequest(
391
- interface_id=self.device.connection.interface_id,
392
- device=self.device.device_address,
393
- lockstep_group_id=self.lockstep_group_id,
394
- type=dto.AxisMoveType.VEL,
395
- arg=velocity,
396
- unit=unit,
397
- acceleration=acceleration,
398
- acceleration_unit=acceleration_unit,
399
- )
400
- await call_async("device/lockstep_move", request)
401
-
402
- def move_sin(
403
- self,
404
- amplitude: float,
405
- amplitude_units: LengthUnits,
406
- period: float,
407
- period_units: TimeUnits,
408
- count: float = 0,
409
- wait_until_idle: bool = True
410
- ) -> None:
411
- """
412
- Moves the first axis of the lockstep group in a sinusoidal trajectory.
413
- The other axes in the lockstep group maintain their offsets throughout movement.
414
-
415
- Args:
416
- amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
417
- amplitude_units: Units of position.
418
- period: Period of the sinusoidal motion in milliseconds.
419
- period_units: Units of time.
420
- count: Number of sinusoidal cycles to complete.
421
- Must be a multiple of 0.5
422
- If count is not specified or set to 0, the axis will move indefinitely.
423
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
424
- """
425
- request = dto.LockstepMoveSinRequest(
426
- interface_id=self.device.connection.interface_id,
427
- device=self.device.device_address,
428
- lockstep_group_id=self.lockstep_group_id,
429
- amplitude=amplitude,
430
- amplitude_units=amplitude_units,
431
- period=period,
432
- period_units=period_units,
433
- count=count,
434
- wait_until_idle=wait_until_idle,
435
- )
436
- call("device/lockstep_move_sin", request)
437
-
438
- async def move_sin_async(
439
- self,
440
- amplitude: float,
441
- amplitude_units: LengthUnits,
442
- period: float,
443
- period_units: TimeUnits,
444
- count: float = 0,
445
- wait_until_idle: bool = True
446
- ) -> None:
447
- """
448
- Moves the first axis of the lockstep group in a sinusoidal trajectory.
449
- The other axes in the lockstep group maintain their offsets throughout movement.
450
-
451
- Args:
452
- amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
453
- amplitude_units: Units of position.
454
- period: Period of the sinusoidal motion in milliseconds.
455
- period_units: Units of time.
456
- count: Number of sinusoidal cycles to complete.
457
- Must be a multiple of 0.5
458
- If count is not specified or set to 0, the axis will move indefinitely.
459
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
460
- """
461
- request = dto.LockstepMoveSinRequest(
462
- interface_id=self.device.connection.interface_id,
463
- device=self.device.device_address,
464
- lockstep_group_id=self.lockstep_group_id,
465
- amplitude=amplitude,
466
- amplitude_units=amplitude_units,
467
- period=period,
468
- period_units=period_units,
469
- count=count,
470
- wait_until_idle=wait_until_idle,
471
- )
472
- await call_async("device/lockstep_move_sin", request)
473
-
474
- def move_sin_stop(
475
- self,
476
- wait_until_idle: bool = True
477
- ) -> None:
478
- """
479
- Stops the lockstep group at the end of the sinusoidal trajectory for the first axis.
480
- If the sinusoidal motion was started with an integer-plus-half cycle count,
481
- the motion ends at the half-way point of the sinusoidal trajectory.
482
-
483
- Args:
484
- wait_until_idle: Determines whether function should return after the movement is finished.
485
- """
486
- request = dto.LockstepStopRequest(
487
- interface_id=self.device.connection.interface_id,
488
- device=self.device.device_address,
489
- lockstep_group_id=self.lockstep_group_id,
490
- wait_until_idle=wait_until_idle,
491
- )
492
- call("device/lockstep_move_sin_stop", request)
493
-
494
- async def move_sin_stop_async(
495
- self,
496
- wait_until_idle: bool = True
497
- ) -> None:
498
- """
499
- Stops the lockstep group at the end of the sinusoidal trajectory for the first axis.
500
- If the sinusoidal motion was started with an integer-plus-half cycle count,
501
- the motion ends at the half-way point of the sinusoidal trajectory.
502
-
503
- Args:
504
- wait_until_idle: Determines whether function should return after the movement is finished.
505
- """
506
- request = dto.LockstepStopRequest(
507
- interface_id=self.device.connection.interface_id,
508
- device=self.device.device_address,
509
- lockstep_group_id=self.lockstep_group_id,
510
- wait_until_idle=wait_until_idle,
511
- )
512
- await call_async("device/lockstep_move_sin_stop", request)
513
-
514
- def move_max(
515
- self,
516
- wait_until_idle: bool = True,
517
- velocity: float = 0,
518
- velocity_unit: VelocityUnits = Units.NATIVE,
519
- acceleration: float = 0,
520
- acceleration_unit: AccelerationUnits = Units.NATIVE
521
- ) -> None:
522
- """
523
- Moves the axes to the maximum valid position.
524
- The axes in the lockstep group maintain their offsets throughout movement.
525
- Respects lim.max for all axes in the group.
526
-
527
- Args:
528
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
529
- velocity: Movement velocity.
530
- Default value of 0 indicates that the maxspeed setting is used instead.
531
- Requires at least Firmware 7.25.
532
- velocity_unit: Units of velocity.
533
- acceleration: Movement acceleration.
534
- Default value of 0 indicates that the accel setting is used instead.
535
- Requires at least Firmware 7.25.
536
- acceleration_unit: Units of acceleration.
537
- """
538
- request = dto.LockstepMoveRequest(
539
- interface_id=self.device.connection.interface_id,
540
- device=self.device.device_address,
541
- lockstep_group_id=self.lockstep_group_id,
542
- type=dto.AxisMoveType.MAX,
543
- wait_until_idle=wait_until_idle,
544
- velocity=velocity,
545
- velocity_unit=velocity_unit,
546
- acceleration=acceleration,
547
- acceleration_unit=acceleration_unit,
548
- )
549
- call("device/lockstep_move", request)
550
-
551
- async def move_max_async(
552
- self,
553
- wait_until_idle: bool = True,
554
- velocity: float = 0,
555
- velocity_unit: VelocityUnits = Units.NATIVE,
556
- acceleration: float = 0,
557
- acceleration_unit: AccelerationUnits = Units.NATIVE
558
- ) -> None:
559
- """
560
- Moves the axes to the maximum valid position.
561
- The axes in the lockstep group maintain their offsets throughout movement.
562
- Respects lim.max for all axes in the group.
563
-
564
- Args:
565
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
566
- velocity: Movement velocity.
567
- Default value of 0 indicates that the maxspeed setting is used instead.
568
- Requires at least Firmware 7.25.
569
- velocity_unit: Units of velocity.
570
- acceleration: Movement acceleration.
571
- Default value of 0 indicates that the accel setting is used instead.
572
- Requires at least Firmware 7.25.
573
- acceleration_unit: Units of acceleration.
574
- """
575
- request = dto.LockstepMoveRequest(
576
- interface_id=self.device.connection.interface_id,
577
- device=self.device.device_address,
578
- lockstep_group_id=self.lockstep_group_id,
579
- type=dto.AxisMoveType.MAX,
580
- wait_until_idle=wait_until_idle,
581
- velocity=velocity,
582
- velocity_unit=velocity_unit,
583
- acceleration=acceleration,
584
- acceleration_unit=acceleration_unit,
585
- )
586
- await call_async("device/lockstep_move", request)
587
-
588
- def move_min(
589
- self,
590
- wait_until_idle: bool = True,
591
- velocity: float = 0,
592
- velocity_unit: VelocityUnits = Units.NATIVE,
593
- acceleration: float = 0,
594
- acceleration_unit: AccelerationUnits = Units.NATIVE
595
- ) -> None:
596
- """
597
- Moves the axes to the minimum valid position.
598
- The axes in the lockstep group maintain their offsets throughout movement.
599
- Respects lim.min for all axes in the group.
600
-
601
- Args:
602
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
603
- velocity: Movement velocity.
604
- Default value of 0 indicates that the maxspeed setting is used instead.
605
- Requires at least Firmware 7.25.
606
- velocity_unit: Units of velocity.
607
- acceleration: Movement acceleration.
608
- Default value of 0 indicates that the accel setting is used instead.
609
- Requires at least Firmware 7.25.
610
- acceleration_unit: Units of acceleration.
611
- """
612
- request = dto.LockstepMoveRequest(
613
- interface_id=self.device.connection.interface_id,
614
- device=self.device.device_address,
615
- lockstep_group_id=self.lockstep_group_id,
616
- type=dto.AxisMoveType.MIN,
617
- wait_until_idle=wait_until_idle,
618
- velocity=velocity,
619
- velocity_unit=velocity_unit,
620
- acceleration=acceleration,
621
- acceleration_unit=acceleration_unit,
622
- )
623
- call("device/lockstep_move", request)
624
-
625
- async def move_min_async(
626
- self,
627
- wait_until_idle: bool = True,
628
- velocity: float = 0,
629
- velocity_unit: VelocityUnits = Units.NATIVE,
630
- acceleration: float = 0,
631
- acceleration_unit: AccelerationUnits = Units.NATIVE
632
- ) -> None:
633
- """
634
- Moves the axes to the minimum valid position.
635
- The axes in the lockstep group maintain their offsets throughout movement.
636
- Respects lim.min for all axes in the group.
637
-
638
- Args:
639
- wait_until_idle: Determines whether function should return after the movement is finished or just started.
640
- velocity: Movement velocity.
641
- Default value of 0 indicates that the maxspeed setting is used instead.
642
- Requires at least Firmware 7.25.
643
- velocity_unit: Units of velocity.
644
- acceleration: Movement acceleration.
645
- Default value of 0 indicates that the accel setting is used instead.
646
- Requires at least Firmware 7.25.
647
- acceleration_unit: Units of acceleration.
648
- """
649
- request = dto.LockstepMoveRequest(
650
- interface_id=self.device.connection.interface_id,
651
- device=self.device.device_address,
652
- lockstep_group_id=self.lockstep_group_id,
653
- type=dto.AxisMoveType.MIN,
654
- wait_until_idle=wait_until_idle,
655
- velocity=velocity,
656
- velocity_unit=velocity_unit,
657
- acceleration=acceleration,
658
- acceleration_unit=acceleration_unit,
659
- )
660
- await call_async("device/lockstep_move", request)
661
-
662
- def wait_until_idle(
663
- self,
664
- throw_error_on_fault: bool = True
665
- ) -> None:
666
- """
667
- Waits until the lockstep group stops moving.
668
-
669
- Args:
670
- throw_error_on_fault: Determines whether to throw error when fault is observed.
671
- """
672
- request = dto.LockstepWaitUntilIdleRequest(
673
- interface_id=self.device.connection.interface_id,
674
- device=self.device.device_address,
675
- lockstep_group_id=self.lockstep_group_id,
676
- throw_error_on_fault=throw_error_on_fault,
677
- )
678
- call("device/lockstep_wait_until_idle", request)
679
-
680
- async def wait_until_idle_async(
681
- self,
682
- throw_error_on_fault: bool = True
683
- ) -> None:
684
- """
685
- Waits until the lockstep group stops moving.
686
-
687
- Args:
688
- throw_error_on_fault: Determines whether to throw error when fault is observed.
689
- """
690
- request = dto.LockstepWaitUntilIdleRequest(
691
- interface_id=self.device.connection.interface_id,
692
- device=self.device.device_address,
693
- lockstep_group_id=self.lockstep_group_id,
694
- throw_error_on_fault=throw_error_on_fault,
695
- )
696
- await call_async("device/lockstep_wait_until_idle", request)
697
-
698
- def is_busy(
699
- self
700
- ) -> bool:
701
- """
702
- Returns bool indicating whether the lockstep group is executing a motion command.
703
-
704
- Returns:
705
- True if the axes are currently executing a motion command.
706
- """
707
- request = dto.LockstepEmptyRequest(
708
- interface_id=self.device.connection.interface_id,
709
- device=self.device.device_address,
710
- lockstep_group_id=self.lockstep_group_id,
711
- )
712
- response = call(
713
- "device/lockstep_is_busy",
714
- request,
715
- dto.BoolResponse.from_binary)
716
- return response.value
717
-
718
- async def is_busy_async(
719
- self
720
- ) -> bool:
721
- """
722
- Returns bool indicating whether the lockstep group is executing a motion command.
723
-
724
- Returns:
725
- True if the axes are currently executing a motion command.
726
- """
727
- request = dto.LockstepEmptyRequest(
728
- interface_id=self.device.connection.interface_id,
729
- device=self.device.device_address,
730
- lockstep_group_id=self.lockstep_group_id,
731
- )
732
- response = await call_async(
733
- "device/lockstep_is_busy",
734
- request,
735
- dto.BoolResponse.from_binary)
736
- return response.value
737
-
738
- def get_axes(
739
- self
740
- ) -> LockstepAxes:
741
- """
742
- Deprecated: Use GetAxisNumbers instead.
743
-
744
- Gets the axes of the lockstep group.
745
-
746
- Returns:
747
- LockstepAxes instance which contains the axes numbers of the lockstep group.
748
- """
749
- request = dto.LockstepEmptyRequest(
750
- interface_id=self.device.connection.interface_id,
751
- device=self.device.device_address,
752
- lockstep_group_id=self.lockstep_group_id,
753
- )
754
- response = call(
755
- "device/lockstep_get_axes",
756
- request,
757
- LockstepAxes.from_binary)
758
- return response
759
-
760
- async def get_axes_async(
761
- self
762
- ) -> LockstepAxes:
763
- """
764
- Deprecated: Use GetAxisNumbers instead.
765
-
766
- Gets the axes of the lockstep group.
767
-
768
- Returns:
769
- LockstepAxes instance which contains the axes numbers of the lockstep group.
770
- """
771
- request = dto.LockstepEmptyRequest(
772
- interface_id=self.device.connection.interface_id,
773
- device=self.device.device_address,
774
- lockstep_group_id=self.lockstep_group_id,
775
- )
776
- response = await call_async(
777
- "device/lockstep_get_axes",
778
- request,
779
- LockstepAxes.from_binary)
780
- return response
781
-
782
- def get_axis_numbers(
783
- self
784
- ) -> List[int]:
785
- """
786
- Gets the axis numbers of the lockstep group.
787
-
788
- Returns:
789
- Axis numbers in order specified when enabling lockstep.
790
- """
791
- request = dto.LockstepEmptyRequest(
792
- interface_id=self.device.connection.interface_id,
793
- device=self.device.device_address,
794
- lockstep_group_id=self.lockstep_group_id,
795
- )
796
- response = call(
797
- "device/lockstep_get_axis_numbers",
798
- request,
799
- dto.LockstepGetAxisNumbersResponse.from_binary)
800
- return response.axes
801
-
802
- async def get_axis_numbers_async(
803
- self
804
- ) -> List[int]:
805
- """
806
- Gets the axis numbers of the lockstep group.
807
-
808
- Returns:
809
- Axis numbers in order specified when enabling lockstep.
810
- """
811
- request = dto.LockstepEmptyRequest(
812
- interface_id=self.device.connection.interface_id,
813
- device=self.device.device_address,
814
- lockstep_group_id=self.lockstep_group_id,
815
- )
816
- response = await call_async(
817
- "device/lockstep_get_axis_numbers",
818
- request,
819
- dto.LockstepGetAxisNumbersResponse.from_binary)
820
- return response.axes
821
-
822
- def get_offsets(
823
- self,
824
- unit: LengthUnits = Units.NATIVE
825
- ) -> List[float]:
826
- """
827
- Gets the initial offsets of secondary axes of an enabled lockstep group.
828
-
829
- Args:
830
- unit: Units of position.
831
- Uses primary axis unit conversion.
832
-
833
- Returns:
834
- Initial offset for each axis of the lockstep group.
835
- """
836
- request = dto.LockstepGetRequest(
837
- interface_id=self.device.connection.interface_id,
838
- device=self.device.device_address,
839
- lockstep_group_id=self.lockstep_group_id,
840
- unit=unit,
841
- )
842
- response = call(
843
- "device/lockstep_get_offsets",
844
- request,
845
- dto.DoubleArrayResponse.from_binary)
846
- return response.values
847
-
848
- async def get_offsets_async(
849
- self,
850
- unit: LengthUnits = Units.NATIVE
851
- ) -> List[float]:
852
- """
853
- Gets the initial offsets of secondary axes of an enabled lockstep group.
854
-
855
- Args:
856
- unit: Units of position.
857
- Uses primary axis unit conversion.
858
-
859
- Returns:
860
- Initial offset for each axis of the lockstep group.
861
- """
862
- request = dto.LockstepGetRequest(
863
- interface_id=self.device.connection.interface_id,
864
- device=self.device.device_address,
865
- lockstep_group_id=self.lockstep_group_id,
866
- unit=unit,
867
- )
868
- response = await call_async(
869
- "device/lockstep_get_offsets",
870
- request,
871
- dto.DoubleArrayResponse.from_binary)
872
- return response.values
873
-
874
- def get_twists(
875
- self,
876
- unit: LengthUnits = Units.NATIVE
877
- ) -> List[float]:
878
- """
879
- Gets the twists of secondary axes of an enabled lockstep group.
880
-
881
- Args:
882
- unit: Units of position.
883
- Uses primary axis unit conversion.
884
-
885
- Returns:
886
- Difference between the initial offset and the actual offset for each axis of the lockstep group.
887
- """
888
- request = dto.LockstepGetRequest(
889
- interface_id=self.device.connection.interface_id,
890
- device=self.device.device_address,
891
- lockstep_group_id=self.lockstep_group_id,
892
- unit=unit,
893
- )
894
- response = call(
895
- "device/lockstep_get_twists",
896
- request,
897
- dto.DoubleArrayResponse.from_binary)
898
- return response.values
899
-
900
- async def get_twists_async(
901
- self,
902
- unit: LengthUnits = Units.NATIVE
903
- ) -> List[float]:
904
- """
905
- Gets the twists of secondary axes of an enabled lockstep group.
906
-
907
- Args:
908
- unit: Units of position.
909
- Uses primary axis unit conversion.
910
-
911
- Returns:
912
- Difference between the initial offset and the actual offset for each axis of the lockstep group.
913
- """
914
- request = dto.LockstepGetRequest(
915
- interface_id=self.device.connection.interface_id,
916
- device=self.device.device_address,
917
- lockstep_group_id=self.lockstep_group_id,
918
- unit=unit,
919
- )
920
- response = await call_async(
921
- "device/lockstep_get_twists",
922
- request,
923
- dto.DoubleArrayResponse.from_binary)
924
- return response.values
925
-
926
- def get_position(
927
- self,
928
- unit: LengthUnits = Units.NATIVE
929
- ) -> float:
930
- """
931
- Returns current position of the primary axis.
932
-
933
- Args:
934
- unit: Units of the position.
935
-
936
- Returns:
937
- Primary axis position.
938
- """
939
- request = dto.LockstepGetRequest(
940
- interface_id=self.device.connection.interface_id,
941
- device=self.device.device_address,
942
- lockstep_group_id=self.lockstep_group_id,
943
- unit=unit,
944
- )
945
- response = call(
946
- "device/lockstep_get_pos",
947
- request,
948
- dto.DoubleResponse.from_binary)
949
- return response.value
950
-
951
- async def get_position_async(
952
- self,
953
- unit: LengthUnits = Units.NATIVE
954
- ) -> float:
955
- """
956
- Returns current position of the primary axis.
957
-
958
- Args:
959
- unit: Units of the position.
960
-
961
- Returns:
962
- Primary axis position.
963
- """
964
- request = dto.LockstepGetRequest(
965
- interface_id=self.device.connection.interface_id,
966
- device=self.device.device_address,
967
- lockstep_group_id=self.lockstep_group_id,
968
- unit=unit,
969
- )
970
- response = await call_async(
971
- "device/lockstep_get_pos",
972
- request,
973
- dto.DoubleResponse.from_binary)
974
- return response.value
975
-
976
- def set_tolerance(
977
- self,
978
- tolerance: float,
979
- unit: LengthUnits = Units.NATIVE,
980
- axis_index: int = 0
981
- ) -> None:
982
- """
983
- Sets lockstep twist tolerance.
984
- Twist tolerances that do not match the system configuration can reduce performance or damage the system.
985
-
986
- Args:
987
- tolerance: Twist tolerance.
988
- unit: Units of the tolerance.
989
- Uses primary axis unit conversion when setting to all axes,
990
- otherwise uses specified secondary axis unit conversion.
991
- axis_index: Optional index of a secondary axis to set the tolerance for.
992
- If left empty or set to 0, the tolerance is set to all the secondary axes.
993
- """
994
- request = dto.LockstepSetRequest(
995
- interface_id=self.device.connection.interface_id,
996
- device=self.device.device_address,
997
- lockstep_group_id=self.lockstep_group_id,
998
- value=tolerance,
999
- unit=unit,
1000
- axis_index=axis_index,
1001
- )
1002
- call("device/lockstep_set_tolerance", request)
1003
-
1004
- async def set_tolerance_async(
1005
- self,
1006
- tolerance: float,
1007
- unit: LengthUnits = Units.NATIVE,
1008
- axis_index: int = 0
1009
- ) -> None:
1010
- """
1011
- Sets lockstep twist tolerance.
1012
- Twist tolerances that do not match the system configuration can reduce performance or damage the system.
1013
-
1014
- Args:
1015
- tolerance: Twist tolerance.
1016
- unit: Units of the tolerance.
1017
- Uses primary axis unit conversion when setting to all axes,
1018
- otherwise uses specified secondary axis unit conversion.
1019
- axis_index: Optional index of a secondary axis to set the tolerance for.
1020
- If left empty or set to 0, the tolerance is set to all the secondary axes.
1021
- """
1022
- request = dto.LockstepSetRequest(
1023
- interface_id=self.device.connection.interface_id,
1024
- device=self.device.device_address,
1025
- lockstep_group_id=self.lockstep_group_id,
1026
- value=tolerance,
1027
- unit=unit,
1028
- axis_index=axis_index,
1029
- )
1030
- await call_async("device/lockstep_set_tolerance", request)
1031
-
1032
- def is_enabled(
1033
- self
1034
- ) -> bool:
1035
- """
1036
- Checks if the lockstep group is currently enabled on the device.
1037
-
1038
- Returns:
1039
- True if a lockstep group with this ID is enabled on the device.
1040
- """
1041
- request = dto.LockstepEmptyRequest(
1042
- interface_id=self.device.connection.interface_id,
1043
- device=self.device.device_address,
1044
- lockstep_group_id=self.lockstep_group_id,
1045
- )
1046
- response = call(
1047
- "device/lockstep_is_enabled",
1048
- request,
1049
- dto.BoolResponse.from_binary)
1050
- return response.value
1051
-
1052
- async def is_enabled_async(
1053
- self
1054
- ) -> bool:
1055
- """
1056
- Checks if the lockstep group is currently enabled on the device.
1057
-
1058
- Returns:
1059
- True if a lockstep group with this ID is enabled on the device.
1060
- """
1061
- request = dto.LockstepEmptyRequest(
1062
- interface_id=self.device.connection.interface_id,
1063
- device=self.device.device_address,
1064
- lockstep_group_id=self.lockstep_group_id,
1065
- )
1066
- response = await call_async(
1067
- "device/lockstep_is_enabled",
1068
- request,
1069
- dto.BoolResponse.from_binary)
1070
- return response.value
1071
-
1072
- def __repr__(
1073
- self
1074
- ) -> str:
1075
- """
1076
- Returns a string which represents the enabled lockstep group.
1077
-
1078
- Returns:
1079
- String which represents the enabled lockstep group.
1080
- """
1081
- request = dto.LockstepEmptyRequest(
1082
- interface_id=self.device.connection.interface_id,
1083
- device=self.device.device_address,
1084
- lockstep_group_id=self.lockstep_group_id,
1085
- )
1086
- response = call_sync(
1087
- "device/lockstep_to_string",
1088
- request,
1089
- dto.StringResponse.from_binary)
1090
- return response.value
1091
-
1092
- def park(
1093
- self
1094
- ) -> None:
1095
- """
1096
- Parks lockstep group in anticipation of turning the power off.
1097
- It can later be powered on, unparked, and moved without first having to home it.
1098
- """
1099
- request = dto.LockstepEmptyRequest(
1100
- interface_id=self.device.connection.interface_id,
1101
- device=self.device.device_address,
1102
- lockstep_group_id=self.lockstep_group_id,
1103
- )
1104
- call("device/lockstep_park", request)
1105
-
1106
- async def park_async(
1107
- self
1108
- ) -> None:
1109
- """
1110
- Parks lockstep group in anticipation of turning the power off.
1111
- It can later be powered on, unparked, and moved without first having to home it.
1112
- """
1113
- request = dto.LockstepEmptyRequest(
1114
- interface_id=self.device.connection.interface_id,
1115
- device=self.device.device_address,
1116
- lockstep_group_id=self.lockstep_group_id,
1117
- )
1118
- await call_async("device/lockstep_park", request)
1119
-
1120
- def unpark(
1121
- self
1122
- ) -> None:
1123
- """
1124
- Unparks lockstep group. Lockstep group will now be able to move.
1125
- """
1126
- request = dto.LockstepEmptyRequest(
1127
- interface_id=self.device.connection.interface_id,
1128
- device=self.device.device_address,
1129
- lockstep_group_id=self.lockstep_group_id,
1130
- )
1131
- call("device/lockstep_unpark", request)
1132
-
1133
- async def unpark_async(
1134
- self
1135
- ) -> None:
1136
- """
1137
- Unparks lockstep group. Lockstep group will now be able to move.
1138
- """
1139
- request = dto.LockstepEmptyRequest(
1140
- interface_id=self.device.connection.interface_id,
1141
- device=self.device.device_address,
1142
- lockstep_group_id=self.lockstep_group_id,
1143
- )
1144
- await call_async("device/lockstep_unpark", request)
1145
-
1146
- def is_parked(
1147
- self
1148
- ) -> bool:
1149
- """
1150
- Returns bool indicating whether the axis is parked or not.
1151
-
1152
- Returns:
1153
- True if lockstep group is parked.
1154
- """
1155
- request = dto.LockstepEmptyRequest(
1156
- interface_id=self.device.connection.interface_id,
1157
- device=self.device.device_address,
1158
- lockstep_group_id=self.lockstep_group_id,
1159
- )
1160
- response = call(
1161
- "device/lockstep_is_parked",
1162
- request,
1163
- dto.BoolResponse.from_binary)
1164
- return response.value
1165
-
1166
- async def is_parked_async(
1167
- self
1168
- ) -> bool:
1169
- """
1170
- Returns bool indicating whether the axis is parked or not.
1171
-
1172
- Returns:
1173
- True if lockstep group is parked.
1174
- """
1175
- request = dto.LockstepEmptyRequest(
1176
- interface_id=self.device.connection.interface_id,
1177
- device=self.device.device_address,
1178
- lockstep_group_id=self.lockstep_group_id,
1179
- )
1180
- response = await call_async(
1181
- "device/lockstep_is_parked",
1182
- request,
1183
- dto.BoolResponse.from_binary)
1184
- return response.value
1
+ # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
+ # ============== DO NOT EDIT DIRECTLY ============== #
3
+ from typing import TYPE_CHECKING, List
4
+ from ..dto import requests as dto
5
+ from ..units import Units, LengthUnits, VelocityUnits, AccelerationUnits, TimeUnits
6
+ from ..call import call, call_async, call_sync
7
+ from ..dto.ascii.lockstep_axes import LockstepAxes
8
+
9
+ if TYPE_CHECKING:
10
+ from .device import Device
11
+
12
+
13
+ class Lockstep:
14
+ """
15
+ Represents a lockstep group with this ID on a device.
16
+ A lockstep group is a movement synchronized pair of axes on a device.
17
+ Requires at least Firmware 6.15 or 7.11.
18
+ """
19
+
20
+ @property
21
+ def device(self) -> 'Device':
22
+ """
23
+ Device that controls this lockstep group.
24
+ """
25
+ return self._device
26
+
27
+ @property
28
+ def lockstep_group_id(self) -> int:
29
+ """
30
+ The number that identifies the lockstep group on the device.
31
+ """
32
+ return self._lockstep_group_id
33
+
34
+ def __init__(self, device: 'Device', lockstep_group_id: int):
35
+ self._device: 'Device' = device
36
+ self._lockstep_group_id: int = lockstep_group_id
37
+
38
+ def enable(
39
+ self,
40
+ *axes: int
41
+ ) -> None:
42
+ """
43
+ Activate the lockstep group on the axes specified.
44
+
45
+ Args:
46
+ axes: The numbers of axes in the lockstep group.
47
+ """
48
+ request = dto.LockstepEnableRequest(
49
+ interface_id=self.device.connection.interface_id,
50
+ device=self.device.device_address,
51
+ lockstep_group_id=self.lockstep_group_id,
52
+ axes=list(axes),
53
+ )
54
+ call("device/lockstep_enable", request)
55
+
56
+ async def enable_async(
57
+ self,
58
+ *axes: int
59
+ ) -> None:
60
+ """
61
+ Activate the lockstep group on the axes specified.
62
+
63
+ Args:
64
+ axes: The numbers of axes in the lockstep group.
65
+ """
66
+ request = dto.LockstepEnableRequest(
67
+ interface_id=self.device.connection.interface_id,
68
+ device=self.device.device_address,
69
+ lockstep_group_id=self.lockstep_group_id,
70
+ axes=list(axes),
71
+ )
72
+ await call_async("device/lockstep_enable", request)
73
+
74
+ def disable(
75
+ self
76
+ ) -> None:
77
+ """
78
+ Disable the lockstep group.
79
+ """
80
+ request = dto.LockstepDisableRequest(
81
+ interface_id=self.device.connection.interface_id,
82
+ device=self.device.device_address,
83
+ lockstep_group_id=self.lockstep_group_id,
84
+ )
85
+ call("device/lockstep_disable", request)
86
+
87
+ async def disable_async(
88
+ self
89
+ ) -> None:
90
+ """
91
+ Disable the lockstep group.
92
+ """
93
+ request = dto.LockstepDisableRequest(
94
+ interface_id=self.device.connection.interface_id,
95
+ device=self.device.device_address,
96
+ lockstep_group_id=self.lockstep_group_id,
97
+ )
98
+ await call_async("device/lockstep_disable", request)
99
+
100
+ def stop(
101
+ self,
102
+ wait_until_idle: bool = True
103
+ ) -> None:
104
+ """
105
+ Stops ongoing lockstep group movement. Decelerates until zero speed.
106
+
107
+ Args:
108
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
109
+ """
110
+ request = dto.LockstepStopRequest(
111
+ interface_id=self.device.connection.interface_id,
112
+ device=self.device.device_address,
113
+ lockstep_group_id=self.lockstep_group_id,
114
+ wait_until_idle=wait_until_idle,
115
+ )
116
+ call("device/lockstep_stop", request)
117
+
118
+ async def stop_async(
119
+ self,
120
+ wait_until_idle: bool = True
121
+ ) -> None:
122
+ """
123
+ Stops ongoing lockstep group movement. Decelerates until zero speed.
124
+
125
+ Args:
126
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
127
+ """
128
+ request = dto.LockstepStopRequest(
129
+ interface_id=self.device.connection.interface_id,
130
+ device=self.device.device_address,
131
+ lockstep_group_id=self.lockstep_group_id,
132
+ wait_until_idle=wait_until_idle,
133
+ )
134
+ await call_async("device/lockstep_stop", request)
135
+
136
+ def home(
137
+ self,
138
+ wait_until_idle: bool = True
139
+ ) -> None:
140
+ """
141
+ Retracts the axes of the lockstep group until a home associated with an individual axis is detected.
142
+
143
+ Args:
144
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
145
+ """
146
+ request = dto.LockstepHomeRequest(
147
+ interface_id=self.device.connection.interface_id,
148
+ device=self.device.device_address,
149
+ lockstep_group_id=self.lockstep_group_id,
150
+ wait_until_idle=wait_until_idle,
151
+ )
152
+ call("device/lockstep_home", request)
153
+
154
+ async def home_async(
155
+ self,
156
+ wait_until_idle: bool = True
157
+ ) -> None:
158
+ """
159
+ Retracts the axes of the lockstep group until a home associated with an individual axis is detected.
160
+
161
+ Args:
162
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
163
+ """
164
+ request = dto.LockstepHomeRequest(
165
+ interface_id=self.device.connection.interface_id,
166
+ device=self.device.device_address,
167
+ lockstep_group_id=self.lockstep_group_id,
168
+ wait_until_idle=wait_until_idle,
169
+ )
170
+ await call_async("device/lockstep_home", request)
171
+
172
+ def move_absolute(
173
+ self,
174
+ position: float,
175
+ unit: LengthUnits = Units.NATIVE,
176
+ wait_until_idle: bool = True,
177
+ velocity: float = 0,
178
+ velocity_unit: VelocityUnits = Units.NATIVE,
179
+ acceleration: float = 0,
180
+ acceleration_unit: AccelerationUnits = Units.NATIVE
181
+ ) -> None:
182
+ """
183
+ Move the first axis of the lockstep group to an absolute position.
184
+ The other axes in the lockstep group maintain their offsets throughout movement.
185
+
186
+ Args:
187
+ position: Absolute position.
188
+ unit: Units of position.
189
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
190
+ velocity: Movement velocity.
191
+ Default value of 0 indicates that the maxspeed setting is used instead.
192
+ Requires at least Firmware 7.25.
193
+ velocity_unit: Units of velocity.
194
+ acceleration: Movement acceleration.
195
+ Default value of 0 indicates that the accel setting is used instead.
196
+ Requires at least Firmware 7.25.
197
+ acceleration_unit: Units of acceleration.
198
+ """
199
+ request = dto.LockstepMoveRequest(
200
+ interface_id=self.device.connection.interface_id,
201
+ device=self.device.device_address,
202
+ lockstep_group_id=self.lockstep_group_id,
203
+ type=dto.AxisMoveType.ABS,
204
+ arg=position,
205
+ unit=unit,
206
+ wait_until_idle=wait_until_idle,
207
+ velocity=velocity,
208
+ velocity_unit=velocity_unit,
209
+ acceleration=acceleration,
210
+ acceleration_unit=acceleration_unit,
211
+ )
212
+ call("device/lockstep_move", request)
213
+
214
+ async def move_absolute_async(
215
+ self,
216
+ position: float,
217
+ unit: LengthUnits = Units.NATIVE,
218
+ wait_until_idle: bool = True,
219
+ velocity: float = 0,
220
+ velocity_unit: VelocityUnits = Units.NATIVE,
221
+ acceleration: float = 0,
222
+ acceleration_unit: AccelerationUnits = Units.NATIVE
223
+ ) -> None:
224
+ """
225
+ Move the first axis of the lockstep group to an absolute position.
226
+ The other axes in the lockstep group maintain their offsets throughout movement.
227
+
228
+ Args:
229
+ position: Absolute position.
230
+ unit: Units of position.
231
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
232
+ velocity: Movement velocity.
233
+ Default value of 0 indicates that the maxspeed setting is used instead.
234
+ Requires at least Firmware 7.25.
235
+ velocity_unit: Units of velocity.
236
+ acceleration: Movement acceleration.
237
+ Default value of 0 indicates that the accel setting is used instead.
238
+ Requires at least Firmware 7.25.
239
+ acceleration_unit: Units of acceleration.
240
+ """
241
+ request = dto.LockstepMoveRequest(
242
+ interface_id=self.device.connection.interface_id,
243
+ device=self.device.device_address,
244
+ lockstep_group_id=self.lockstep_group_id,
245
+ type=dto.AxisMoveType.ABS,
246
+ arg=position,
247
+ unit=unit,
248
+ wait_until_idle=wait_until_idle,
249
+ velocity=velocity,
250
+ velocity_unit=velocity_unit,
251
+ acceleration=acceleration,
252
+ acceleration_unit=acceleration_unit,
253
+ )
254
+ await call_async("device/lockstep_move", request)
255
+
256
+ def move_relative(
257
+ self,
258
+ position: float,
259
+ unit: LengthUnits = Units.NATIVE,
260
+ wait_until_idle: bool = True,
261
+ velocity: float = 0,
262
+ velocity_unit: VelocityUnits = Units.NATIVE,
263
+ acceleration: float = 0,
264
+ acceleration_unit: AccelerationUnits = Units.NATIVE
265
+ ) -> None:
266
+ """
267
+ Move the first axis of the lockstep group to a position relative to its current position.
268
+ The other axes in the lockstep group maintain their offsets throughout movement.
269
+
270
+ Args:
271
+ position: Relative position.
272
+ unit: Units of position.
273
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
274
+ velocity: Movement velocity.
275
+ Default value of 0 indicates that the maxspeed setting is used instead.
276
+ Requires at least Firmware 7.25.
277
+ velocity_unit: Units of velocity.
278
+ acceleration: Movement acceleration.
279
+ Default value of 0 indicates that the accel setting is used instead.
280
+ Requires at least Firmware 7.25.
281
+ acceleration_unit: Units of acceleration.
282
+ """
283
+ request = dto.LockstepMoveRequest(
284
+ interface_id=self.device.connection.interface_id,
285
+ device=self.device.device_address,
286
+ lockstep_group_id=self.lockstep_group_id,
287
+ type=dto.AxisMoveType.REL,
288
+ arg=position,
289
+ unit=unit,
290
+ wait_until_idle=wait_until_idle,
291
+ velocity=velocity,
292
+ velocity_unit=velocity_unit,
293
+ acceleration=acceleration,
294
+ acceleration_unit=acceleration_unit,
295
+ )
296
+ call("device/lockstep_move", request)
297
+
298
+ async def move_relative_async(
299
+ self,
300
+ position: float,
301
+ unit: LengthUnits = Units.NATIVE,
302
+ wait_until_idle: bool = True,
303
+ velocity: float = 0,
304
+ velocity_unit: VelocityUnits = Units.NATIVE,
305
+ acceleration: float = 0,
306
+ acceleration_unit: AccelerationUnits = Units.NATIVE
307
+ ) -> None:
308
+ """
309
+ Move the first axis of the lockstep group to a position relative to its current position.
310
+ The other axes in the lockstep group maintain their offsets throughout movement.
311
+
312
+ Args:
313
+ position: Relative position.
314
+ unit: Units of position.
315
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
316
+ velocity: Movement velocity.
317
+ Default value of 0 indicates that the maxspeed setting is used instead.
318
+ Requires at least Firmware 7.25.
319
+ velocity_unit: Units of velocity.
320
+ acceleration: Movement acceleration.
321
+ Default value of 0 indicates that the accel setting is used instead.
322
+ Requires at least Firmware 7.25.
323
+ acceleration_unit: Units of acceleration.
324
+ """
325
+ request = dto.LockstepMoveRequest(
326
+ interface_id=self.device.connection.interface_id,
327
+ device=self.device.device_address,
328
+ lockstep_group_id=self.lockstep_group_id,
329
+ type=dto.AxisMoveType.REL,
330
+ arg=position,
331
+ unit=unit,
332
+ wait_until_idle=wait_until_idle,
333
+ velocity=velocity,
334
+ velocity_unit=velocity_unit,
335
+ acceleration=acceleration,
336
+ acceleration_unit=acceleration_unit,
337
+ )
338
+ await call_async("device/lockstep_move", request)
339
+
340
+ def move_velocity(
341
+ self,
342
+ velocity: float,
343
+ unit: VelocityUnits = Units.NATIVE,
344
+ acceleration: float = 0,
345
+ acceleration_unit: AccelerationUnits = Units.NATIVE
346
+ ) -> None:
347
+ """
348
+ Moves the first axis of the lockstep group at the specified speed.
349
+ The other axes in the lockstep group maintain their offsets throughout movement.
350
+
351
+ Args:
352
+ velocity: Movement velocity.
353
+ unit: Units of velocity.
354
+ acceleration: Movement acceleration.
355
+ Default value of 0 indicates that the accel setting is used instead.
356
+ Requires at least Firmware 7.25.
357
+ acceleration_unit: Units of acceleration.
358
+ """
359
+ request = dto.LockstepMoveRequest(
360
+ interface_id=self.device.connection.interface_id,
361
+ device=self.device.device_address,
362
+ lockstep_group_id=self.lockstep_group_id,
363
+ type=dto.AxisMoveType.VEL,
364
+ arg=velocity,
365
+ unit=unit,
366
+ acceleration=acceleration,
367
+ acceleration_unit=acceleration_unit,
368
+ )
369
+ call("device/lockstep_move", request)
370
+
371
+ async def move_velocity_async(
372
+ self,
373
+ velocity: float,
374
+ unit: VelocityUnits = Units.NATIVE,
375
+ acceleration: float = 0,
376
+ acceleration_unit: AccelerationUnits = Units.NATIVE
377
+ ) -> None:
378
+ """
379
+ Moves the first axis of the lockstep group at the specified speed.
380
+ The other axes in the lockstep group maintain their offsets throughout movement.
381
+
382
+ Args:
383
+ velocity: Movement velocity.
384
+ unit: Units of velocity.
385
+ acceleration: Movement acceleration.
386
+ Default value of 0 indicates that the accel setting is used instead.
387
+ Requires at least Firmware 7.25.
388
+ acceleration_unit: Units of acceleration.
389
+ """
390
+ request = dto.LockstepMoveRequest(
391
+ interface_id=self.device.connection.interface_id,
392
+ device=self.device.device_address,
393
+ lockstep_group_id=self.lockstep_group_id,
394
+ type=dto.AxisMoveType.VEL,
395
+ arg=velocity,
396
+ unit=unit,
397
+ acceleration=acceleration,
398
+ acceleration_unit=acceleration_unit,
399
+ )
400
+ await call_async("device/lockstep_move", request)
401
+
402
+ def move_sin(
403
+ self,
404
+ amplitude: float,
405
+ amplitude_units: LengthUnits,
406
+ period: float,
407
+ period_units: TimeUnits,
408
+ count: float = 0,
409
+ wait_until_idle: bool = True
410
+ ) -> None:
411
+ """
412
+ Moves the first axis of the lockstep group in a sinusoidal trajectory.
413
+ The other axes in the lockstep group maintain their offsets throughout movement.
414
+
415
+ Args:
416
+ amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
417
+ amplitude_units: Units of position.
418
+ period: Period of the sinusoidal motion in milliseconds.
419
+ period_units: Units of time.
420
+ count: Number of sinusoidal cycles to complete.
421
+ Must be a multiple of 0.5
422
+ If count is not specified or set to 0, the axis will move indefinitely.
423
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
424
+ """
425
+ request = dto.LockstepMoveSinRequest(
426
+ interface_id=self.device.connection.interface_id,
427
+ device=self.device.device_address,
428
+ lockstep_group_id=self.lockstep_group_id,
429
+ amplitude=amplitude,
430
+ amplitude_units=amplitude_units,
431
+ period=period,
432
+ period_units=period_units,
433
+ count=count,
434
+ wait_until_idle=wait_until_idle,
435
+ )
436
+ call("device/lockstep_move_sin", request)
437
+
438
+ async def move_sin_async(
439
+ self,
440
+ amplitude: float,
441
+ amplitude_units: LengthUnits,
442
+ period: float,
443
+ period_units: TimeUnits,
444
+ count: float = 0,
445
+ wait_until_idle: bool = True
446
+ ) -> None:
447
+ """
448
+ Moves the first axis of the lockstep group in a sinusoidal trajectory.
449
+ The other axes in the lockstep group maintain their offsets throughout movement.
450
+
451
+ Args:
452
+ amplitude: Amplitude of the sinusoidal motion (half of the motion's peak-to-peak range).
453
+ amplitude_units: Units of position.
454
+ period: Period of the sinusoidal motion in milliseconds.
455
+ period_units: Units of time.
456
+ count: Number of sinusoidal cycles to complete.
457
+ Must be a multiple of 0.5
458
+ If count is not specified or set to 0, the axis will move indefinitely.
459
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
460
+ """
461
+ request = dto.LockstepMoveSinRequest(
462
+ interface_id=self.device.connection.interface_id,
463
+ device=self.device.device_address,
464
+ lockstep_group_id=self.lockstep_group_id,
465
+ amplitude=amplitude,
466
+ amplitude_units=amplitude_units,
467
+ period=period,
468
+ period_units=period_units,
469
+ count=count,
470
+ wait_until_idle=wait_until_idle,
471
+ )
472
+ await call_async("device/lockstep_move_sin", request)
473
+
474
+ def move_sin_stop(
475
+ self,
476
+ wait_until_idle: bool = True
477
+ ) -> None:
478
+ """
479
+ Stops the lockstep group at the end of the sinusoidal trajectory for the first axis.
480
+ If the sinusoidal motion was started with an integer-plus-half cycle count,
481
+ the motion ends at the half-way point of the sinusoidal trajectory.
482
+
483
+ Args:
484
+ wait_until_idle: Determines whether function should return after the movement is finished.
485
+ """
486
+ request = dto.LockstepStopRequest(
487
+ interface_id=self.device.connection.interface_id,
488
+ device=self.device.device_address,
489
+ lockstep_group_id=self.lockstep_group_id,
490
+ wait_until_idle=wait_until_idle,
491
+ )
492
+ call("device/lockstep_move_sin_stop", request)
493
+
494
+ async def move_sin_stop_async(
495
+ self,
496
+ wait_until_idle: bool = True
497
+ ) -> None:
498
+ """
499
+ Stops the lockstep group at the end of the sinusoidal trajectory for the first axis.
500
+ If the sinusoidal motion was started with an integer-plus-half cycle count,
501
+ the motion ends at the half-way point of the sinusoidal trajectory.
502
+
503
+ Args:
504
+ wait_until_idle: Determines whether function should return after the movement is finished.
505
+ """
506
+ request = dto.LockstepStopRequest(
507
+ interface_id=self.device.connection.interface_id,
508
+ device=self.device.device_address,
509
+ lockstep_group_id=self.lockstep_group_id,
510
+ wait_until_idle=wait_until_idle,
511
+ )
512
+ await call_async("device/lockstep_move_sin_stop", request)
513
+
514
+ def move_max(
515
+ self,
516
+ wait_until_idle: bool = True,
517
+ velocity: float = 0,
518
+ velocity_unit: VelocityUnits = Units.NATIVE,
519
+ acceleration: float = 0,
520
+ acceleration_unit: AccelerationUnits = Units.NATIVE
521
+ ) -> None:
522
+ """
523
+ Moves the axes to the maximum valid position.
524
+ The axes in the lockstep group maintain their offsets throughout movement.
525
+ Respects lim.max for all axes in the group.
526
+
527
+ Args:
528
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
529
+ velocity: Movement velocity.
530
+ Default value of 0 indicates that the maxspeed setting is used instead.
531
+ Requires at least Firmware 7.25.
532
+ velocity_unit: Units of velocity.
533
+ acceleration: Movement acceleration.
534
+ Default value of 0 indicates that the accel setting is used instead.
535
+ Requires at least Firmware 7.25.
536
+ acceleration_unit: Units of acceleration.
537
+ """
538
+ request = dto.LockstepMoveRequest(
539
+ interface_id=self.device.connection.interface_id,
540
+ device=self.device.device_address,
541
+ lockstep_group_id=self.lockstep_group_id,
542
+ type=dto.AxisMoveType.MAX,
543
+ wait_until_idle=wait_until_idle,
544
+ velocity=velocity,
545
+ velocity_unit=velocity_unit,
546
+ acceleration=acceleration,
547
+ acceleration_unit=acceleration_unit,
548
+ )
549
+ call("device/lockstep_move", request)
550
+
551
+ async def move_max_async(
552
+ self,
553
+ wait_until_idle: bool = True,
554
+ velocity: float = 0,
555
+ velocity_unit: VelocityUnits = Units.NATIVE,
556
+ acceleration: float = 0,
557
+ acceleration_unit: AccelerationUnits = Units.NATIVE
558
+ ) -> None:
559
+ """
560
+ Moves the axes to the maximum valid position.
561
+ The axes in the lockstep group maintain their offsets throughout movement.
562
+ Respects lim.max for all axes in the group.
563
+
564
+ Args:
565
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
566
+ velocity: Movement velocity.
567
+ Default value of 0 indicates that the maxspeed setting is used instead.
568
+ Requires at least Firmware 7.25.
569
+ velocity_unit: Units of velocity.
570
+ acceleration: Movement acceleration.
571
+ Default value of 0 indicates that the accel setting is used instead.
572
+ Requires at least Firmware 7.25.
573
+ acceleration_unit: Units of acceleration.
574
+ """
575
+ request = dto.LockstepMoveRequest(
576
+ interface_id=self.device.connection.interface_id,
577
+ device=self.device.device_address,
578
+ lockstep_group_id=self.lockstep_group_id,
579
+ type=dto.AxisMoveType.MAX,
580
+ wait_until_idle=wait_until_idle,
581
+ velocity=velocity,
582
+ velocity_unit=velocity_unit,
583
+ acceleration=acceleration,
584
+ acceleration_unit=acceleration_unit,
585
+ )
586
+ await call_async("device/lockstep_move", request)
587
+
588
+ def move_min(
589
+ self,
590
+ wait_until_idle: bool = True,
591
+ velocity: float = 0,
592
+ velocity_unit: VelocityUnits = Units.NATIVE,
593
+ acceleration: float = 0,
594
+ acceleration_unit: AccelerationUnits = Units.NATIVE
595
+ ) -> None:
596
+ """
597
+ Moves the axes to the minimum valid position.
598
+ The axes in the lockstep group maintain their offsets throughout movement.
599
+ Respects lim.min for all axes in the group.
600
+
601
+ Args:
602
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
603
+ velocity: Movement velocity.
604
+ Default value of 0 indicates that the maxspeed setting is used instead.
605
+ Requires at least Firmware 7.25.
606
+ velocity_unit: Units of velocity.
607
+ acceleration: Movement acceleration.
608
+ Default value of 0 indicates that the accel setting is used instead.
609
+ Requires at least Firmware 7.25.
610
+ acceleration_unit: Units of acceleration.
611
+ """
612
+ request = dto.LockstepMoveRequest(
613
+ interface_id=self.device.connection.interface_id,
614
+ device=self.device.device_address,
615
+ lockstep_group_id=self.lockstep_group_id,
616
+ type=dto.AxisMoveType.MIN,
617
+ wait_until_idle=wait_until_idle,
618
+ velocity=velocity,
619
+ velocity_unit=velocity_unit,
620
+ acceleration=acceleration,
621
+ acceleration_unit=acceleration_unit,
622
+ )
623
+ call("device/lockstep_move", request)
624
+
625
+ async def move_min_async(
626
+ self,
627
+ wait_until_idle: bool = True,
628
+ velocity: float = 0,
629
+ velocity_unit: VelocityUnits = Units.NATIVE,
630
+ acceleration: float = 0,
631
+ acceleration_unit: AccelerationUnits = Units.NATIVE
632
+ ) -> None:
633
+ """
634
+ Moves the axes to the minimum valid position.
635
+ The axes in the lockstep group maintain their offsets throughout movement.
636
+ Respects lim.min for all axes in the group.
637
+
638
+ Args:
639
+ wait_until_idle: Determines whether function should return after the movement is finished or just started.
640
+ velocity: Movement velocity.
641
+ Default value of 0 indicates that the maxspeed setting is used instead.
642
+ Requires at least Firmware 7.25.
643
+ velocity_unit: Units of velocity.
644
+ acceleration: Movement acceleration.
645
+ Default value of 0 indicates that the accel setting is used instead.
646
+ Requires at least Firmware 7.25.
647
+ acceleration_unit: Units of acceleration.
648
+ """
649
+ request = dto.LockstepMoveRequest(
650
+ interface_id=self.device.connection.interface_id,
651
+ device=self.device.device_address,
652
+ lockstep_group_id=self.lockstep_group_id,
653
+ type=dto.AxisMoveType.MIN,
654
+ wait_until_idle=wait_until_idle,
655
+ velocity=velocity,
656
+ velocity_unit=velocity_unit,
657
+ acceleration=acceleration,
658
+ acceleration_unit=acceleration_unit,
659
+ )
660
+ await call_async("device/lockstep_move", request)
661
+
662
+ def wait_until_idle(
663
+ self,
664
+ throw_error_on_fault: bool = True
665
+ ) -> None:
666
+ """
667
+ Waits until the lockstep group stops moving.
668
+
669
+ Args:
670
+ throw_error_on_fault: Determines whether to throw error when fault is observed.
671
+ """
672
+ request = dto.LockstepWaitUntilIdleRequest(
673
+ interface_id=self.device.connection.interface_id,
674
+ device=self.device.device_address,
675
+ lockstep_group_id=self.lockstep_group_id,
676
+ throw_error_on_fault=throw_error_on_fault,
677
+ )
678
+ call("device/lockstep_wait_until_idle", request)
679
+
680
+ async def wait_until_idle_async(
681
+ self,
682
+ throw_error_on_fault: bool = True
683
+ ) -> None:
684
+ """
685
+ Waits until the lockstep group stops moving.
686
+
687
+ Args:
688
+ throw_error_on_fault: Determines whether to throw error when fault is observed.
689
+ """
690
+ request = dto.LockstepWaitUntilIdleRequest(
691
+ interface_id=self.device.connection.interface_id,
692
+ device=self.device.device_address,
693
+ lockstep_group_id=self.lockstep_group_id,
694
+ throw_error_on_fault=throw_error_on_fault,
695
+ )
696
+ await call_async("device/lockstep_wait_until_idle", request)
697
+
698
+ def is_busy(
699
+ self
700
+ ) -> bool:
701
+ """
702
+ Returns bool indicating whether the lockstep group is executing a motion command.
703
+
704
+ Returns:
705
+ True if the axes are currently executing a motion command.
706
+ """
707
+ request = dto.LockstepEmptyRequest(
708
+ interface_id=self.device.connection.interface_id,
709
+ device=self.device.device_address,
710
+ lockstep_group_id=self.lockstep_group_id,
711
+ )
712
+ response = call(
713
+ "device/lockstep_is_busy",
714
+ request,
715
+ dto.BoolResponse.from_binary)
716
+ return response.value
717
+
718
+ async def is_busy_async(
719
+ self
720
+ ) -> bool:
721
+ """
722
+ Returns bool indicating whether the lockstep group is executing a motion command.
723
+
724
+ Returns:
725
+ True if the axes are currently executing a motion command.
726
+ """
727
+ request = dto.LockstepEmptyRequest(
728
+ interface_id=self.device.connection.interface_id,
729
+ device=self.device.device_address,
730
+ lockstep_group_id=self.lockstep_group_id,
731
+ )
732
+ response = await call_async(
733
+ "device/lockstep_is_busy",
734
+ request,
735
+ dto.BoolResponse.from_binary)
736
+ return response.value
737
+
738
+ def get_axes(
739
+ self
740
+ ) -> LockstepAxes:
741
+ """
742
+ Deprecated: Use GetAxisNumbers instead.
743
+
744
+ Gets the axes of the lockstep group.
745
+
746
+ Returns:
747
+ LockstepAxes instance which contains the axes numbers of the lockstep group.
748
+ """
749
+ request = dto.LockstepEmptyRequest(
750
+ interface_id=self.device.connection.interface_id,
751
+ device=self.device.device_address,
752
+ lockstep_group_id=self.lockstep_group_id,
753
+ )
754
+ response = call(
755
+ "device/lockstep_get_axes",
756
+ request,
757
+ LockstepAxes.from_binary)
758
+ return response
759
+
760
+ async def get_axes_async(
761
+ self
762
+ ) -> LockstepAxes:
763
+ """
764
+ Deprecated: Use GetAxisNumbers instead.
765
+
766
+ Gets the axes of the lockstep group.
767
+
768
+ Returns:
769
+ LockstepAxes instance which contains the axes numbers of the lockstep group.
770
+ """
771
+ request = dto.LockstepEmptyRequest(
772
+ interface_id=self.device.connection.interface_id,
773
+ device=self.device.device_address,
774
+ lockstep_group_id=self.lockstep_group_id,
775
+ )
776
+ response = await call_async(
777
+ "device/lockstep_get_axes",
778
+ request,
779
+ LockstepAxes.from_binary)
780
+ return response
781
+
782
+ def get_axis_numbers(
783
+ self
784
+ ) -> List[int]:
785
+ """
786
+ Gets the axis numbers of the lockstep group.
787
+
788
+ Returns:
789
+ Axis numbers in order specified when enabling lockstep.
790
+ """
791
+ request = dto.LockstepEmptyRequest(
792
+ interface_id=self.device.connection.interface_id,
793
+ device=self.device.device_address,
794
+ lockstep_group_id=self.lockstep_group_id,
795
+ )
796
+ response = call(
797
+ "device/lockstep_get_axis_numbers",
798
+ request,
799
+ dto.LockstepGetAxisNumbersResponse.from_binary)
800
+ return response.axes
801
+
802
+ async def get_axis_numbers_async(
803
+ self
804
+ ) -> List[int]:
805
+ """
806
+ Gets the axis numbers of the lockstep group.
807
+
808
+ Returns:
809
+ Axis numbers in order specified when enabling lockstep.
810
+ """
811
+ request = dto.LockstepEmptyRequest(
812
+ interface_id=self.device.connection.interface_id,
813
+ device=self.device.device_address,
814
+ lockstep_group_id=self.lockstep_group_id,
815
+ )
816
+ response = await call_async(
817
+ "device/lockstep_get_axis_numbers",
818
+ request,
819
+ dto.LockstepGetAxisNumbersResponse.from_binary)
820
+ return response.axes
821
+
822
+ def get_offsets(
823
+ self,
824
+ unit: LengthUnits = Units.NATIVE
825
+ ) -> List[float]:
826
+ """
827
+ Gets the initial offsets of secondary axes of an enabled lockstep group.
828
+
829
+ Args:
830
+ unit: Units of position.
831
+ Uses primary axis unit conversion.
832
+
833
+ Returns:
834
+ Initial offset for each axis of the lockstep group.
835
+ """
836
+ request = dto.LockstepGetRequest(
837
+ interface_id=self.device.connection.interface_id,
838
+ device=self.device.device_address,
839
+ lockstep_group_id=self.lockstep_group_id,
840
+ unit=unit,
841
+ )
842
+ response = call(
843
+ "device/lockstep_get_offsets",
844
+ request,
845
+ dto.DoubleArrayResponse.from_binary)
846
+ return response.values
847
+
848
+ async def get_offsets_async(
849
+ self,
850
+ unit: LengthUnits = Units.NATIVE
851
+ ) -> List[float]:
852
+ """
853
+ Gets the initial offsets of secondary axes of an enabled lockstep group.
854
+
855
+ Args:
856
+ unit: Units of position.
857
+ Uses primary axis unit conversion.
858
+
859
+ Returns:
860
+ Initial offset for each axis of the lockstep group.
861
+ """
862
+ request = dto.LockstepGetRequest(
863
+ interface_id=self.device.connection.interface_id,
864
+ device=self.device.device_address,
865
+ lockstep_group_id=self.lockstep_group_id,
866
+ unit=unit,
867
+ )
868
+ response = await call_async(
869
+ "device/lockstep_get_offsets",
870
+ request,
871
+ dto.DoubleArrayResponse.from_binary)
872
+ return response.values
873
+
874
+ def get_twists(
875
+ self,
876
+ unit: LengthUnits = Units.NATIVE
877
+ ) -> List[float]:
878
+ """
879
+ Gets the twists of secondary axes of an enabled lockstep group.
880
+
881
+ Args:
882
+ unit: Units of position.
883
+ Uses primary axis unit conversion.
884
+
885
+ Returns:
886
+ Difference between the initial offset and the actual offset for each axis of the lockstep group.
887
+ """
888
+ request = dto.LockstepGetRequest(
889
+ interface_id=self.device.connection.interface_id,
890
+ device=self.device.device_address,
891
+ lockstep_group_id=self.lockstep_group_id,
892
+ unit=unit,
893
+ )
894
+ response = call(
895
+ "device/lockstep_get_twists",
896
+ request,
897
+ dto.DoubleArrayResponse.from_binary)
898
+ return response.values
899
+
900
+ async def get_twists_async(
901
+ self,
902
+ unit: LengthUnits = Units.NATIVE
903
+ ) -> List[float]:
904
+ """
905
+ Gets the twists of secondary axes of an enabled lockstep group.
906
+
907
+ Args:
908
+ unit: Units of position.
909
+ Uses primary axis unit conversion.
910
+
911
+ Returns:
912
+ Difference between the initial offset and the actual offset for each axis of the lockstep group.
913
+ """
914
+ request = dto.LockstepGetRequest(
915
+ interface_id=self.device.connection.interface_id,
916
+ device=self.device.device_address,
917
+ lockstep_group_id=self.lockstep_group_id,
918
+ unit=unit,
919
+ )
920
+ response = await call_async(
921
+ "device/lockstep_get_twists",
922
+ request,
923
+ dto.DoubleArrayResponse.from_binary)
924
+ return response.values
925
+
926
+ def get_position(
927
+ self,
928
+ unit: LengthUnits = Units.NATIVE
929
+ ) -> float:
930
+ """
931
+ Returns current position of the primary axis.
932
+
933
+ Args:
934
+ unit: Units of the position.
935
+
936
+ Returns:
937
+ Primary axis position.
938
+ """
939
+ request = dto.LockstepGetRequest(
940
+ interface_id=self.device.connection.interface_id,
941
+ device=self.device.device_address,
942
+ lockstep_group_id=self.lockstep_group_id,
943
+ unit=unit,
944
+ )
945
+ response = call(
946
+ "device/lockstep_get_pos",
947
+ request,
948
+ dto.DoubleResponse.from_binary)
949
+ return response.value
950
+
951
+ async def get_position_async(
952
+ self,
953
+ unit: LengthUnits = Units.NATIVE
954
+ ) -> float:
955
+ """
956
+ Returns current position of the primary axis.
957
+
958
+ Args:
959
+ unit: Units of the position.
960
+
961
+ Returns:
962
+ Primary axis position.
963
+ """
964
+ request = dto.LockstepGetRequest(
965
+ interface_id=self.device.connection.interface_id,
966
+ device=self.device.device_address,
967
+ lockstep_group_id=self.lockstep_group_id,
968
+ unit=unit,
969
+ )
970
+ response = await call_async(
971
+ "device/lockstep_get_pos",
972
+ request,
973
+ dto.DoubleResponse.from_binary)
974
+ return response.value
975
+
976
+ def set_tolerance(
977
+ self,
978
+ tolerance: float,
979
+ unit: LengthUnits = Units.NATIVE,
980
+ axis_index: int = 0
981
+ ) -> None:
982
+ """
983
+ Sets lockstep twist tolerance.
984
+ Twist tolerances that do not match the system configuration can reduce performance or damage the system.
985
+
986
+ Args:
987
+ tolerance: Twist tolerance.
988
+ unit: Units of the tolerance.
989
+ Uses primary axis unit conversion when setting to all axes,
990
+ otherwise uses specified secondary axis unit conversion.
991
+ axis_index: Optional index of a secondary axis to set the tolerance for.
992
+ If left empty or set to 0, the tolerance is set to all the secondary axes.
993
+ """
994
+ request = dto.LockstepSetRequest(
995
+ interface_id=self.device.connection.interface_id,
996
+ device=self.device.device_address,
997
+ lockstep_group_id=self.lockstep_group_id,
998
+ value=tolerance,
999
+ unit=unit,
1000
+ axis_index=axis_index,
1001
+ )
1002
+ call("device/lockstep_set_tolerance", request)
1003
+
1004
+ async def set_tolerance_async(
1005
+ self,
1006
+ tolerance: float,
1007
+ unit: LengthUnits = Units.NATIVE,
1008
+ axis_index: int = 0
1009
+ ) -> None:
1010
+ """
1011
+ Sets lockstep twist tolerance.
1012
+ Twist tolerances that do not match the system configuration can reduce performance or damage the system.
1013
+
1014
+ Args:
1015
+ tolerance: Twist tolerance.
1016
+ unit: Units of the tolerance.
1017
+ Uses primary axis unit conversion when setting to all axes,
1018
+ otherwise uses specified secondary axis unit conversion.
1019
+ axis_index: Optional index of a secondary axis to set the tolerance for.
1020
+ If left empty or set to 0, the tolerance is set to all the secondary axes.
1021
+ """
1022
+ request = dto.LockstepSetRequest(
1023
+ interface_id=self.device.connection.interface_id,
1024
+ device=self.device.device_address,
1025
+ lockstep_group_id=self.lockstep_group_id,
1026
+ value=tolerance,
1027
+ unit=unit,
1028
+ axis_index=axis_index,
1029
+ )
1030
+ await call_async("device/lockstep_set_tolerance", request)
1031
+
1032
+ def is_enabled(
1033
+ self
1034
+ ) -> bool:
1035
+ """
1036
+ Checks if the lockstep group is currently enabled on the device.
1037
+
1038
+ Returns:
1039
+ True if a lockstep group with this ID is enabled on the device.
1040
+ """
1041
+ request = dto.LockstepEmptyRequest(
1042
+ interface_id=self.device.connection.interface_id,
1043
+ device=self.device.device_address,
1044
+ lockstep_group_id=self.lockstep_group_id,
1045
+ )
1046
+ response = call(
1047
+ "device/lockstep_is_enabled",
1048
+ request,
1049
+ dto.BoolResponse.from_binary)
1050
+ return response.value
1051
+
1052
+ async def is_enabled_async(
1053
+ self
1054
+ ) -> bool:
1055
+ """
1056
+ Checks if the lockstep group is currently enabled on the device.
1057
+
1058
+ Returns:
1059
+ True if a lockstep group with this ID is enabled on the device.
1060
+ """
1061
+ request = dto.LockstepEmptyRequest(
1062
+ interface_id=self.device.connection.interface_id,
1063
+ device=self.device.device_address,
1064
+ lockstep_group_id=self.lockstep_group_id,
1065
+ )
1066
+ response = await call_async(
1067
+ "device/lockstep_is_enabled",
1068
+ request,
1069
+ dto.BoolResponse.from_binary)
1070
+ return response.value
1071
+
1072
+ def __repr__(
1073
+ self
1074
+ ) -> str:
1075
+ """
1076
+ Returns a string which represents the enabled lockstep group.
1077
+
1078
+ Returns:
1079
+ String which represents the enabled lockstep group.
1080
+ """
1081
+ request = dto.LockstepEmptyRequest(
1082
+ interface_id=self.device.connection.interface_id,
1083
+ device=self.device.device_address,
1084
+ lockstep_group_id=self.lockstep_group_id,
1085
+ )
1086
+ response = call_sync(
1087
+ "device/lockstep_to_string",
1088
+ request,
1089
+ dto.StringResponse.from_binary)
1090
+ return response.value
1091
+
1092
+ def park(
1093
+ self
1094
+ ) -> None:
1095
+ """
1096
+ Parks lockstep group in anticipation of turning the power off.
1097
+ It can later be powered on, unparked, and moved without first having to home it.
1098
+ """
1099
+ request = dto.LockstepEmptyRequest(
1100
+ interface_id=self.device.connection.interface_id,
1101
+ device=self.device.device_address,
1102
+ lockstep_group_id=self.lockstep_group_id,
1103
+ )
1104
+ call("device/lockstep_park", request)
1105
+
1106
+ async def park_async(
1107
+ self
1108
+ ) -> None:
1109
+ """
1110
+ Parks lockstep group in anticipation of turning the power off.
1111
+ It can later be powered on, unparked, and moved without first having to home it.
1112
+ """
1113
+ request = dto.LockstepEmptyRequest(
1114
+ interface_id=self.device.connection.interface_id,
1115
+ device=self.device.device_address,
1116
+ lockstep_group_id=self.lockstep_group_id,
1117
+ )
1118
+ await call_async("device/lockstep_park", request)
1119
+
1120
+ def unpark(
1121
+ self
1122
+ ) -> None:
1123
+ """
1124
+ Unparks lockstep group. Lockstep group will now be able to move.
1125
+ """
1126
+ request = dto.LockstepEmptyRequest(
1127
+ interface_id=self.device.connection.interface_id,
1128
+ device=self.device.device_address,
1129
+ lockstep_group_id=self.lockstep_group_id,
1130
+ )
1131
+ call("device/lockstep_unpark", request)
1132
+
1133
+ async def unpark_async(
1134
+ self
1135
+ ) -> None:
1136
+ """
1137
+ Unparks lockstep group. Lockstep group will now be able to move.
1138
+ """
1139
+ request = dto.LockstepEmptyRequest(
1140
+ interface_id=self.device.connection.interface_id,
1141
+ device=self.device.device_address,
1142
+ lockstep_group_id=self.lockstep_group_id,
1143
+ )
1144
+ await call_async("device/lockstep_unpark", request)
1145
+
1146
+ def is_parked(
1147
+ self
1148
+ ) -> bool:
1149
+ """
1150
+ Returns bool indicating whether the axis is parked or not.
1151
+
1152
+ Returns:
1153
+ True if lockstep group is parked.
1154
+ """
1155
+ request = dto.LockstepEmptyRequest(
1156
+ interface_id=self.device.connection.interface_id,
1157
+ device=self.device.device_address,
1158
+ lockstep_group_id=self.lockstep_group_id,
1159
+ )
1160
+ response = call(
1161
+ "device/lockstep_is_parked",
1162
+ request,
1163
+ dto.BoolResponse.from_binary)
1164
+ return response.value
1165
+
1166
+ async def is_parked_async(
1167
+ self
1168
+ ) -> bool:
1169
+ """
1170
+ Returns bool indicating whether the axis is parked or not.
1171
+
1172
+ Returns:
1173
+ True if lockstep group is parked.
1174
+ """
1175
+ request = dto.LockstepEmptyRequest(
1176
+ interface_id=self.device.connection.interface_id,
1177
+ device=self.device.device_address,
1178
+ lockstep_group_id=self.lockstep_group_id,
1179
+ )
1180
+ response = await call_async(
1181
+ "device/lockstep_is_parked",
1182
+ request,
1183
+ dto.BoolResponse.from_binary)
1184
+ return response.value