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