zaber-motion 7.13.0__py3-none-win32.whl → 7.14.0__py3-none-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -1673
- 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 -134
- 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.13.0.dist-info → zaber_motion-7.14.0.dist-info}/LICENSE.txt +2119 -2119
- {zaber_motion-7.13.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-386.dll +0 -0
- zaber_motion-7.13.0.dist-info/RECORD +0 -494
- {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/WHEEL +0 -0
- {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/top_level.txt +0 -0
zaber_motion/product/process.py
CHANGED
|
@@ -1,818 +1,818 @@
|
|
|
1
|
-
# ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
|
|
2
|
-
# ============== DO NOT EDIT DIRECTLY ============== #
|
|
3
|
-
|
|
4
|
-
from typing import TYPE_CHECKING, List, Optional
|
|
5
|
-
from ..call import call, call_async, call_sync
|
|
6
|
-
|
|
7
|
-
from ..units import Units, TimeUnits
|
|
8
|
-
from ..dto import requests as dto
|
|
9
|
-
from ..ascii.warnings import Warnings
|
|
10
|
-
from ..dto.ascii.response import Response
|
|
11
|
-
from ..dto.measurement import Measurement
|
|
12
|
-
from ..ascii.axis import Axis
|
|
13
|
-
from ..ascii.axis_settings import AxisSettings
|
|
14
|
-
from ..ascii.storage import AxisStorage
|
|
15
|
-
from ..dto.product.process_controller_mode import ProcessControllerMode
|
|
16
|
-
from ..dto.product.process_controller_source import ProcessControllerSource
|
|
17
|
-
from ..dto.ascii.set_state_axis_response import SetStateAxisResponse
|
|
18
|
-
from ..dto.firmware_version import FirmwareVersion
|
|
19
|
-
|
|
20
|
-
if TYPE_CHECKING:
|
|
21
|
-
from .process_controller import ProcessController
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class Process:
|
|
25
|
-
"""
|
|
26
|
-
Use to drive voltage for a process such as a heater, valve, Peltier device, etc.
|
|
27
|
-
Requires at least Firmware 7.35.
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
@property
|
|
31
|
-
def controller(self) -> 'ProcessController':
|
|
32
|
-
"""
|
|
33
|
-
Controller for this process.
|
|
34
|
-
"""
|
|
35
|
-
return self._controller
|
|
36
|
-
|
|
37
|
-
@property
|
|
38
|
-
def process_number(self) -> int:
|
|
39
|
-
"""
|
|
40
|
-
The process number identifies the process on the controller.
|
|
41
|
-
"""
|
|
42
|
-
return self._process_number
|
|
43
|
-
|
|
44
|
-
@property
|
|
45
|
-
def settings(self) -> AxisSettings:
|
|
46
|
-
"""
|
|
47
|
-
Settings and properties of this process.
|
|
48
|
-
"""
|
|
49
|
-
return self._settings
|
|
50
|
-
|
|
51
|
-
@property
|
|
52
|
-
def storage(self) -> AxisStorage:
|
|
53
|
-
"""
|
|
54
|
-
Key-value storage of this process.
|
|
55
|
-
"""
|
|
56
|
-
return self._storage
|
|
57
|
-
|
|
58
|
-
@property
|
|
59
|
-
def warnings(self) -> Warnings:
|
|
60
|
-
"""
|
|
61
|
-
Warnings and faults of this process.
|
|
62
|
-
"""
|
|
63
|
-
return self._warnings
|
|
64
|
-
|
|
65
|
-
def __init__(self, controller: 'ProcessController', process_number: int):
|
|
66
|
-
self._controller: 'ProcessController' = controller
|
|
67
|
-
self._process_number: int = process_number
|
|
68
|
-
self._axis: Axis = Axis(controller.device, process_number)
|
|
69
|
-
self._settings: AxisSettings = AxisSettings(self._axis)
|
|
70
|
-
self._storage: AxisStorage = AxisStorage(self._axis)
|
|
71
|
-
self._warnings: Warnings = Warnings(controller.device, process_number)
|
|
72
|
-
|
|
73
|
-
def enable(
|
|
74
|
-
self,
|
|
75
|
-
enabled: bool = True
|
|
76
|
-
) -> None:
|
|
77
|
-
"""
|
|
78
|
-
Sets the enabled state of the driver.
|
|
79
|
-
|
|
80
|
-
Args:
|
|
81
|
-
enabled: If true (default) enables drive. If false disables.
|
|
82
|
-
"""
|
|
83
|
-
request = dto.ProcessOn(
|
|
84
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
85
|
-
device=self.controller.device.device_address,
|
|
86
|
-
axis=self.process_number,
|
|
87
|
-
on=enabled,
|
|
88
|
-
)
|
|
89
|
-
call("process-controller/enable", request)
|
|
90
|
-
|
|
91
|
-
async def enable_async(
|
|
92
|
-
self,
|
|
93
|
-
enabled: bool = True
|
|
94
|
-
) -> None:
|
|
95
|
-
"""
|
|
96
|
-
Sets the enabled state of the driver.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
enabled: If true (default) enables drive. If false disables.
|
|
100
|
-
"""
|
|
101
|
-
request = dto.ProcessOn(
|
|
102
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
103
|
-
device=self.controller.device.device_address,
|
|
104
|
-
axis=self.process_number,
|
|
105
|
-
on=enabled,
|
|
106
|
-
)
|
|
107
|
-
await call_async("process-controller/enable", request)
|
|
108
|
-
|
|
109
|
-
def on(
|
|
110
|
-
self,
|
|
111
|
-
duration: float = 0,
|
|
112
|
-
unit: TimeUnits = Units.NATIVE
|
|
113
|
-
) -> None:
|
|
114
|
-
"""
|
|
115
|
-
Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
|
|
116
|
-
|
|
117
|
-
Args:
|
|
118
|
-
duration: How long to leave the process on.
|
|
119
|
-
unit: Units of time.
|
|
120
|
-
"""
|
|
121
|
-
request = dto.ProcessOn(
|
|
122
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
123
|
-
device=self.controller.device.device_address,
|
|
124
|
-
axis=self.process_number,
|
|
125
|
-
on=True,
|
|
126
|
-
duration=duration,
|
|
127
|
-
unit=unit,
|
|
128
|
-
)
|
|
129
|
-
call("process-controller/on", request)
|
|
130
|
-
|
|
131
|
-
async def on_async(
|
|
132
|
-
self,
|
|
133
|
-
duration: float = 0,
|
|
134
|
-
unit: TimeUnits = Units.NATIVE
|
|
135
|
-
) -> None:
|
|
136
|
-
"""
|
|
137
|
-
Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
|
|
138
|
-
|
|
139
|
-
Args:
|
|
140
|
-
duration: How long to leave the process on.
|
|
141
|
-
unit: Units of time.
|
|
142
|
-
"""
|
|
143
|
-
request = dto.ProcessOn(
|
|
144
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
145
|
-
device=self.controller.device.device_address,
|
|
146
|
-
axis=self.process_number,
|
|
147
|
-
on=True,
|
|
148
|
-
duration=duration,
|
|
149
|
-
unit=unit,
|
|
150
|
-
)
|
|
151
|
-
await call_async("process-controller/on", request)
|
|
152
|
-
|
|
153
|
-
def off(
|
|
154
|
-
self
|
|
155
|
-
) -> None:
|
|
156
|
-
"""
|
|
157
|
-
Turns this process off.
|
|
158
|
-
"""
|
|
159
|
-
request = dto.ProcessOn(
|
|
160
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
161
|
-
device=self.controller.device.device_address,
|
|
162
|
-
axis=self.process_number,
|
|
163
|
-
on=False,
|
|
164
|
-
)
|
|
165
|
-
call("process-controller/on", request)
|
|
166
|
-
|
|
167
|
-
async def off_async(
|
|
168
|
-
self
|
|
169
|
-
) -> None:
|
|
170
|
-
"""
|
|
171
|
-
Turns this process off.
|
|
172
|
-
"""
|
|
173
|
-
request = dto.ProcessOn(
|
|
174
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
175
|
-
device=self.controller.device.device_address,
|
|
176
|
-
axis=self.process_number,
|
|
177
|
-
on=False,
|
|
178
|
-
)
|
|
179
|
-
await call_async("process-controller/on", request)
|
|
180
|
-
|
|
181
|
-
def set_mode(
|
|
182
|
-
self,
|
|
183
|
-
mode: ProcessControllerMode
|
|
184
|
-
) -> None:
|
|
185
|
-
"""
|
|
186
|
-
Sets the control mode of this process.
|
|
187
|
-
|
|
188
|
-
Args:
|
|
189
|
-
mode: Mode to set this process to.
|
|
190
|
-
"""
|
|
191
|
-
request = dto.DeviceSetSettingRequest(
|
|
192
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
193
|
-
device=self.controller.device.device_address,
|
|
194
|
-
axis=self.process_number,
|
|
195
|
-
setting="process.control.mode",
|
|
196
|
-
value=mode.value,
|
|
197
|
-
)
|
|
198
|
-
call("device/set_setting", request)
|
|
199
|
-
|
|
200
|
-
async def set_mode_async(
|
|
201
|
-
self,
|
|
202
|
-
mode: ProcessControllerMode
|
|
203
|
-
) -> None:
|
|
204
|
-
"""
|
|
205
|
-
Sets the control mode of this process.
|
|
206
|
-
|
|
207
|
-
Args:
|
|
208
|
-
mode: Mode to set this process to.
|
|
209
|
-
"""
|
|
210
|
-
request = dto.DeviceSetSettingRequest(
|
|
211
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
212
|
-
device=self.controller.device.device_address,
|
|
213
|
-
axis=self.process_number,
|
|
214
|
-
setting="process.control.mode",
|
|
215
|
-
value=mode.value,
|
|
216
|
-
)
|
|
217
|
-
await call_async("device/set_setting", request)
|
|
218
|
-
|
|
219
|
-
def get_mode(
|
|
220
|
-
self
|
|
221
|
-
) -> ProcessControllerMode:
|
|
222
|
-
"""
|
|
223
|
-
Gets the control mode of this process.
|
|
224
|
-
|
|
225
|
-
Returns:
|
|
226
|
-
Control mode.
|
|
227
|
-
"""
|
|
228
|
-
request = dto.DeviceGetSettingRequest(
|
|
229
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
230
|
-
device=self.controller.device.device_address,
|
|
231
|
-
axis=self.process_number,
|
|
232
|
-
setting="process.control.mode",
|
|
233
|
-
)
|
|
234
|
-
response = call(
|
|
235
|
-
"device/get_setting",
|
|
236
|
-
request,
|
|
237
|
-
dto.DoubleResponse.from_binary)
|
|
238
|
-
return ProcessControllerMode(response.value)
|
|
239
|
-
|
|
240
|
-
async def get_mode_async(
|
|
241
|
-
self
|
|
242
|
-
) -> ProcessControllerMode:
|
|
243
|
-
"""
|
|
244
|
-
Gets the control mode of this process.
|
|
245
|
-
|
|
246
|
-
Returns:
|
|
247
|
-
Control mode.
|
|
248
|
-
"""
|
|
249
|
-
request = dto.DeviceGetSettingRequest(
|
|
250
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
251
|
-
device=self.controller.device.device_address,
|
|
252
|
-
axis=self.process_number,
|
|
253
|
-
setting="process.control.mode",
|
|
254
|
-
)
|
|
255
|
-
response = await call_async(
|
|
256
|
-
"device/get_setting",
|
|
257
|
-
request,
|
|
258
|
-
dto.DoubleResponse.from_binary)
|
|
259
|
-
return ProcessControllerMode(response.value)
|
|
260
|
-
|
|
261
|
-
def get_source(
|
|
262
|
-
self
|
|
263
|
-
) -> ProcessControllerSource:
|
|
264
|
-
"""
|
|
265
|
-
Gets the source used to control this process.
|
|
266
|
-
|
|
267
|
-
Returns:
|
|
268
|
-
The source providing feedback for this process.
|
|
269
|
-
"""
|
|
270
|
-
request = dto.AxisEmptyRequest(
|
|
271
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
272
|
-
device=self.controller.device.device_address,
|
|
273
|
-
axis=self.process_number,
|
|
274
|
-
)
|
|
275
|
-
response = call(
|
|
276
|
-
"process_controller/get_source",
|
|
277
|
-
request,
|
|
278
|
-
ProcessControllerSource.from_binary)
|
|
279
|
-
return response
|
|
280
|
-
|
|
281
|
-
async def get_source_async(
|
|
282
|
-
self
|
|
283
|
-
) -> ProcessControllerSource:
|
|
284
|
-
"""
|
|
285
|
-
Gets the source used to control this process.
|
|
286
|
-
|
|
287
|
-
Returns:
|
|
288
|
-
The source providing feedback for this process.
|
|
289
|
-
"""
|
|
290
|
-
request = dto.AxisEmptyRequest(
|
|
291
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
292
|
-
device=self.controller.device.device_address,
|
|
293
|
-
axis=self.process_number,
|
|
294
|
-
)
|
|
295
|
-
response = await call_async(
|
|
296
|
-
"process_controller/get_source",
|
|
297
|
-
request,
|
|
298
|
-
ProcessControllerSource.from_binary)
|
|
299
|
-
return response
|
|
300
|
-
|
|
301
|
-
def set_source(
|
|
302
|
-
self,
|
|
303
|
-
source: ProcessControllerSource
|
|
304
|
-
) -> None:
|
|
305
|
-
"""
|
|
306
|
-
Sets the source used to control this process.
|
|
307
|
-
|
|
308
|
-
Args:
|
|
309
|
-
source: Sets the source that should provide feedback for this process.
|
|
310
|
-
"""
|
|
311
|
-
request = dto.SetProcessControllerSource(
|
|
312
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
313
|
-
device=self.controller.device.device_address,
|
|
314
|
-
axis=self.process_number,
|
|
315
|
-
source=source,
|
|
316
|
-
)
|
|
317
|
-
call("process_controller/set_source", request)
|
|
318
|
-
|
|
319
|
-
async def set_source_async(
|
|
320
|
-
self,
|
|
321
|
-
source: ProcessControllerSource
|
|
322
|
-
) -> None:
|
|
323
|
-
"""
|
|
324
|
-
Sets the source used to control this process.
|
|
325
|
-
|
|
326
|
-
Args:
|
|
327
|
-
source: Sets the source that should provide feedback for this process.
|
|
328
|
-
"""
|
|
329
|
-
request = dto.SetProcessControllerSource(
|
|
330
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
331
|
-
device=self.controller.device.device_address,
|
|
332
|
-
axis=self.process_number,
|
|
333
|
-
source=source,
|
|
334
|
-
)
|
|
335
|
-
await call_async("process_controller/set_source", request)
|
|
336
|
-
|
|
337
|
-
def get_input(
|
|
338
|
-
self
|
|
339
|
-
) -> Measurement:
|
|
340
|
-
"""
|
|
341
|
-
Gets the current value of the source used to control this process.
|
|
342
|
-
|
|
343
|
-
Returns:
|
|
344
|
-
The current value of this process's controlling source.
|
|
345
|
-
"""
|
|
346
|
-
request = dto.AxisEmptyRequest(
|
|
347
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
348
|
-
device=self.controller.device.device_address,
|
|
349
|
-
axis=self.process_number,
|
|
350
|
-
)
|
|
351
|
-
response = call(
|
|
352
|
-
"process_controller/get_input",
|
|
353
|
-
request,
|
|
354
|
-
Measurement.from_binary)
|
|
355
|
-
return response
|
|
356
|
-
|
|
357
|
-
async def get_input_async(
|
|
358
|
-
self
|
|
359
|
-
) -> Measurement:
|
|
360
|
-
"""
|
|
361
|
-
Gets the current value of the source used to control this process.
|
|
362
|
-
|
|
363
|
-
Returns:
|
|
364
|
-
The current value of this process's controlling source.
|
|
365
|
-
"""
|
|
366
|
-
request = dto.AxisEmptyRequest(
|
|
367
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
368
|
-
device=self.controller.device.device_address,
|
|
369
|
-
axis=self.process_number,
|
|
370
|
-
)
|
|
371
|
-
response = await call_async(
|
|
372
|
-
"process_controller/get_input",
|
|
373
|
-
request,
|
|
374
|
-
Measurement.from_binary)
|
|
375
|
-
return response
|
|
376
|
-
|
|
377
|
-
def bridge(
|
|
378
|
-
self
|
|
379
|
-
) -> None:
|
|
380
|
-
"""
|
|
381
|
-
Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
|
|
382
|
-
"""
|
|
383
|
-
request = dto.ProcessOn(
|
|
384
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
385
|
-
device=self.controller.device.device_address,
|
|
386
|
-
axis=self.process_number,
|
|
387
|
-
on=True,
|
|
388
|
-
)
|
|
389
|
-
call("process_controller/bridge", request)
|
|
390
|
-
|
|
391
|
-
async def bridge_async(
|
|
392
|
-
self
|
|
393
|
-
) -> None:
|
|
394
|
-
"""
|
|
395
|
-
Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
|
|
396
|
-
"""
|
|
397
|
-
request = dto.ProcessOn(
|
|
398
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
399
|
-
device=self.controller.device.device_address,
|
|
400
|
-
axis=self.process_number,
|
|
401
|
-
on=True,
|
|
402
|
-
)
|
|
403
|
-
await call_async("process_controller/bridge", request)
|
|
404
|
-
|
|
405
|
-
def unbridge(
|
|
406
|
-
self
|
|
407
|
-
) -> None:
|
|
408
|
-
"""
|
|
409
|
-
Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
|
|
410
|
-
This method is only callable on axis 1 and 3.
|
|
411
|
-
"""
|
|
412
|
-
request = dto.ProcessOn(
|
|
413
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
414
|
-
device=self.controller.device.device_address,
|
|
415
|
-
axis=self.process_number,
|
|
416
|
-
on=False,
|
|
417
|
-
)
|
|
418
|
-
call("process_controller/bridge", request)
|
|
419
|
-
|
|
420
|
-
async def unbridge_async(
|
|
421
|
-
self
|
|
422
|
-
) -> None:
|
|
423
|
-
"""
|
|
424
|
-
Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
|
|
425
|
-
This method is only callable on axis 1 and 3.
|
|
426
|
-
"""
|
|
427
|
-
request = dto.ProcessOn(
|
|
428
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
429
|
-
device=self.controller.device.device_address,
|
|
430
|
-
axis=self.process_number,
|
|
431
|
-
on=False,
|
|
432
|
-
)
|
|
433
|
-
await call_async("process_controller/bridge", request)
|
|
434
|
-
|
|
435
|
-
def is_bridge(
|
|
436
|
-
self
|
|
437
|
-
) -> bool:
|
|
438
|
-
"""
|
|
439
|
-
Detects if the given process is in bridging mode.
|
|
440
|
-
|
|
441
|
-
Returns:
|
|
442
|
-
Whether this process is bridged with its neighbor.
|
|
443
|
-
"""
|
|
444
|
-
request = dto.AxisEmptyRequest(
|
|
445
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
446
|
-
device=self.controller.device.device_address,
|
|
447
|
-
axis=self.process_number,
|
|
448
|
-
)
|
|
449
|
-
response = call(
|
|
450
|
-
"process_controller/is_bridge",
|
|
451
|
-
request,
|
|
452
|
-
dto.BoolResponse.from_binary)
|
|
453
|
-
return response.value
|
|
454
|
-
|
|
455
|
-
async def is_bridge_async(
|
|
456
|
-
self
|
|
457
|
-
) -> bool:
|
|
458
|
-
"""
|
|
459
|
-
Detects if the given process is in bridging mode.
|
|
460
|
-
|
|
461
|
-
Returns:
|
|
462
|
-
Whether this process is bridged with its neighbor.
|
|
463
|
-
"""
|
|
464
|
-
request = dto.AxisEmptyRequest(
|
|
465
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
466
|
-
device=self.controller.device.device_address,
|
|
467
|
-
axis=self.process_number,
|
|
468
|
-
)
|
|
469
|
-
response = await call_async(
|
|
470
|
-
"process_controller/is_bridge",
|
|
471
|
-
request,
|
|
472
|
-
dto.BoolResponse.from_binary)
|
|
473
|
-
return response.value
|
|
474
|
-
|
|
475
|
-
def generic_command(
|
|
476
|
-
self,
|
|
477
|
-
command: str,
|
|
478
|
-
check_errors: bool = True,
|
|
479
|
-
timeout: int = 0
|
|
480
|
-
) -> Response:
|
|
481
|
-
"""
|
|
482
|
-
Sends a generic ASCII command to this process' underlying axis.
|
|
483
|
-
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
484
|
-
|
|
485
|
-
Args:
|
|
486
|
-
command: Command and its parameters.
|
|
487
|
-
check_errors: Controls whether to throw an exception when the device rejects the command.
|
|
488
|
-
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
489
|
-
Overrides the connection default request timeout.
|
|
490
|
-
|
|
491
|
-
Returns:
|
|
492
|
-
A response to the command.
|
|
493
|
-
"""
|
|
494
|
-
request = dto.GenericCommandRequest(
|
|
495
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
496
|
-
device=self.controller.device.device_address,
|
|
497
|
-
axis=self.process_number,
|
|
498
|
-
command=command,
|
|
499
|
-
check_errors=check_errors,
|
|
500
|
-
timeout=timeout,
|
|
501
|
-
)
|
|
502
|
-
response = call(
|
|
503
|
-
"interface/generic_command",
|
|
504
|
-
request,
|
|
505
|
-
Response.from_binary)
|
|
506
|
-
return response
|
|
507
|
-
|
|
508
|
-
async def generic_command_async(
|
|
509
|
-
self,
|
|
510
|
-
command: str,
|
|
511
|
-
check_errors: bool = True,
|
|
512
|
-
timeout: int = 0
|
|
513
|
-
) -> Response:
|
|
514
|
-
"""
|
|
515
|
-
Sends a generic ASCII command to this process' underlying axis.
|
|
516
|
-
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
517
|
-
|
|
518
|
-
Args:
|
|
519
|
-
command: Command and its parameters.
|
|
520
|
-
check_errors: Controls whether to throw an exception when the device rejects the command.
|
|
521
|
-
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
522
|
-
Overrides the connection default request timeout.
|
|
523
|
-
|
|
524
|
-
Returns:
|
|
525
|
-
A response to the command.
|
|
526
|
-
"""
|
|
527
|
-
request = dto.GenericCommandRequest(
|
|
528
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
529
|
-
device=self.controller.device.device_address,
|
|
530
|
-
axis=self.process_number,
|
|
531
|
-
command=command,
|
|
532
|
-
check_errors=check_errors,
|
|
533
|
-
timeout=timeout,
|
|
534
|
-
)
|
|
535
|
-
response = await call_async(
|
|
536
|
-
"interface/generic_command",
|
|
537
|
-
request,
|
|
538
|
-
Response.from_binary)
|
|
539
|
-
return response
|
|
540
|
-
|
|
541
|
-
def generic_command_multi_response(
|
|
542
|
-
self,
|
|
543
|
-
command: str,
|
|
544
|
-
check_errors: bool = True,
|
|
545
|
-
timeout: int = 0
|
|
546
|
-
) -> List[Response]:
|
|
547
|
-
"""
|
|
548
|
-
Sends a generic ASCII command to this process and expect multiple responses.
|
|
549
|
-
Responses are returned in order of arrival.
|
|
550
|
-
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
551
|
-
|
|
552
|
-
Args:
|
|
553
|
-
command: Command and its parameters.
|
|
554
|
-
check_errors: Controls whether to throw an exception when a device rejects the command.
|
|
555
|
-
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
556
|
-
Overrides the connection default request timeout.
|
|
557
|
-
|
|
558
|
-
Returns:
|
|
559
|
-
All responses to the command.
|
|
560
|
-
"""
|
|
561
|
-
request = dto.GenericCommandRequest(
|
|
562
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
563
|
-
device=self.controller.device.device_address,
|
|
564
|
-
axis=self.process_number,
|
|
565
|
-
command=command,
|
|
566
|
-
check_errors=check_errors,
|
|
567
|
-
timeout=timeout,
|
|
568
|
-
)
|
|
569
|
-
response = call(
|
|
570
|
-
"interface/generic_command_multi_response",
|
|
571
|
-
request,
|
|
572
|
-
dto.GenericCommandResponseCollection.from_binary)
|
|
573
|
-
return response.responses
|
|
574
|
-
|
|
575
|
-
async def generic_command_multi_response_async(
|
|
576
|
-
self,
|
|
577
|
-
command: str,
|
|
578
|
-
check_errors: bool = True,
|
|
579
|
-
timeout: int = 0
|
|
580
|
-
) -> List[Response]:
|
|
581
|
-
"""
|
|
582
|
-
Sends a generic ASCII command to this process and expect multiple responses.
|
|
583
|
-
Responses are returned in order of arrival.
|
|
584
|
-
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
585
|
-
|
|
586
|
-
Args:
|
|
587
|
-
command: Command and its parameters.
|
|
588
|
-
check_errors: Controls whether to throw an exception when a device rejects the command.
|
|
589
|
-
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
590
|
-
Overrides the connection default request timeout.
|
|
591
|
-
|
|
592
|
-
Returns:
|
|
593
|
-
All responses to the command.
|
|
594
|
-
"""
|
|
595
|
-
request = dto.GenericCommandRequest(
|
|
596
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
597
|
-
device=self.controller.device.device_address,
|
|
598
|
-
axis=self.process_number,
|
|
599
|
-
command=command,
|
|
600
|
-
check_errors=check_errors,
|
|
601
|
-
timeout=timeout,
|
|
602
|
-
)
|
|
603
|
-
response = await call_async(
|
|
604
|
-
"interface/generic_command_multi_response",
|
|
605
|
-
request,
|
|
606
|
-
dto.GenericCommandResponseCollection.from_binary)
|
|
607
|
-
return response.responses
|
|
608
|
-
|
|
609
|
-
def generic_command_no_response(
|
|
610
|
-
self,
|
|
611
|
-
command: str
|
|
612
|
-
) -> None:
|
|
613
|
-
"""
|
|
614
|
-
Sends a generic ASCII command to this process without expecting a response and without adding a message ID
|
|
615
|
-
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
616
|
-
|
|
617
|
-
Args:
|
|
618
|
-
command: Command and its parameters.
|
|
619
|
-
"""
|
|
620
|
-
request = dto.GenericCommandRequest(
|
|
621
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
622
|
-
device=self.controller.device.device_address,
|
|
623
|
-
axis=self.process_number,
|
|
624
|
-
command=command,
|
|
625
|
-
)
|
|
626
|
-
call("interface/generic_command_no_response", request)
|
|
627
|
-
|
|
628
|
-
async def generic_command_no_response_async(
|
|
629
|
-
self,
|
|
630
|
-
command: str
|
|
631
|
-
) -> None:
|
|
632
|
-
"""
|
|
633
|
-
Sends a generic ASCII command to this process without expecting a response and without adding a message ID
|
|
634
|
-
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
635
|
-
|
|
636
|
-
Args:
|
|
637
|
-
command: Command and its parameters.
|
|
638
|
-
"""
|
|
639
|
-
request = dto.GenericCommandRequest(
|
|
640
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
641
|
-
device=self.controller.device.device_address,
|
|
642
|
-
axis=self.process_number,
|
|
643
|
-
command=command,
|
|
644
|
-
)
|
|
645
|
-
await call_async("interface/generic_command_no_response", request)
|
|
646
|
-
|
|
647
|
-
def get_state(
|
|
648
|
-
self
|
|
649
|
-
) -> str:
|
|
650
|
-
"""
|
|
651
|
-
Returns a serialization of the current process state that can be saved and reapplied.
|
|
652
|
-
|
|
653
|
-
Returns:
|
|
654
|
-
A serialization of the current state of the process.
|
|
655
|
-
"""
|
|
656
|
-
request = dto.AxisEmptyRequest(
|
|
657
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
658
|
-
device=self.controller.device.device_address,
|
|
659
|
-
axis=self.process_number,
|
|
660
|
-
)
|
|
661
|
-
response = call(
|
|
662
|
-
"device/get_state",
|
|
663
|
-
request,
|
|
664
|
-
dto.StringResponse.from_binary)
|
|
665
|
-
return response.value
|
|
666
|
-
|
|
667
|
-
async def get_state_async(
|
|
668
|
-
self
|
|
669
|
-
) -> str:
|
|
670
|
-
"""
|
|
671
|
-
Returns a serialization of the current process state that can be saved and reapplied.
|
|
672
|
-
|
|
673
|
-
Returns:
|
|
674
|
-
A serialization of the current state of the process.
|
|
675
|
-
"""
|
|
676
|
-
request = dto.AxisEmptyRequest(
|
|
677
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
678
|
-
device=self.controller.device.device_address,
|
|
679
|
-
axis=self.process_number,
|
|
680
|
-
)
|
|
681
|
-
response = await call_async(
|
|
682
|
-
"device/get_state",
|
|
683
|
-
request,
|
|
684
|
-
dto.StringResponse.from_binary)
|
|
685
|
-
return response.value
|
|
686
|
-
|
|
687
|
-
def set_state(
|
|
688
|
-
self,
|
|
689
|
-
state: str
|
|
690
|
-
) -> SetStateAxisResponse:
|
|
691
|
-
"""
|
|
692
|
-
Applies a saved state to this process.
|
|
693
|
-
|
|
694
|
-
Args:
|
|
695
|
-
state: The state object to apply to this process.
|
|
696
|
-
|
|
697
|
-
Returns:
|
|
698
|
-
Reports of any issues that were handled, but caused the state to not be exactly restored.
|
|
699
|
-
"""
|
|
700
|
-
request = dto.SetStateRequest(
|
|
701
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
702
|
-
device=self.controller.device.device_address,
|
|
703
|
-
axis=self.process_number,
|
|
704
|
-
state=state,
|
|
705
|
-
)
|
|
706
|
-
response = call(
|
|
707
|
-
"device/set_axis_state",
|
|
708
|
-
request,
|
|
709
|
-
SetStateAxisResponse.from_binary)
|
|
710
|
-
return response
|
|
711
|
-
|
|
712
|
-
async def set_state_async(
|
|
713
|
-
self,
|
|
714
|
-
state: str
|
|
715
|
-
) -> SetStateAxisResponse:
|
|
716
|
-
"""
|
|
717
|
-
Applies a saved state to this process.
|
|
718
|
-
|
|
719
|
-
Args:
|
|
720
|
-
state: The state object to apply to this process.
|
|
721
|
-
|
|
722
|
-
Returns:
|
|
723
|
-
Reports of any issues that were handled, but caused the state to not be exactly restored.
|
|
724
|
-
"""
|
|
725
|
-
request = dto.SetStateRequest(
|
|
726
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
727
|
-
device=self.controller.device.device_address,
|
|
728
|
-
axis=self.process_number,
|
|
729
|
-
state=state,
|
|
730
|
-
)
|
|
731
|
-
response = await call_async(
|
|
732
|
-
"device/set_axis_state",
|
|
733
|
-
request,
|
|
734
|
-
SetStateAxisResponse.from_binary)
|
|
735
|
-
return response
|
|
736
|
-
|
|
737
|
-
def can_set_state(
|
|
738
|
-
self,
|
|
739
|
-
state: str,
|
|
740
|
-
firmware_version: Optional[FirmwareVersion] = None
|
|
741
|
-
) -> Optional[str]:
|
|
742
|
-
"""
|
|
743
|
-
Checks if a state can be applied to this process.
|
|
744
|
-
This only covers exceptions that can be determined statically such as mismatches of ID or version,
|
|
745
|
-
the process of applying the state can still fail when running.
|
|
746
|
-
|
|
747
|
-
Args:
|
|
748
|
-
state: The state object to check against.
|
|
749
|
-
firmware_version: The firmware version of the device to apply the state to.
|
|
750
|
-
Use this to ensure the state will still be compatible after an update.
|
|
751
|
-
|
|
752
|
-
Returns:
|
|
753
|
-
An explanation of why this state cannot be set to this process.
|
|
754
|
-
"""
|
|
755
|
-
request = dto.CanSetStateRequest(
|
|
756
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
757
|
-
device=self.controller.device.device_address,
|
|
758
|
-
axis=self.process_number,
|
|
759
|
-
state=state,
|
|
760
|
-
firmware_version=firmware_version,
|
|
761
|
-
)
|
|
762
|
-
response = call(
|
|
763
|
-
"device/can_set_axis_state",
|
|
764
|
-
request,
|
|
765
|
-
dto.CanSetStateAxisResponse.from_binary)
|
|
766
|
-
return response.error
|
|
767
|
-
|
|
768
|
-
async def can_set_state_async(
|
|
769
|
-
self,
|
|
770
|
-
state: str,
|
|
771
|
-
firmware_version: Optional[FirmwareVersion] = None
|
|
772
|
-
) -> Optional[str]:
|
|
773
|
-
"""
|
|
774
|
-
Checks if a state can be applied to this process.
|
|
775
|
-
This only covers exceptions that can be determined statically such as mismatches of ID or version,
|
|
776
|
-
the process of applying the state can still fail when running.
|
|
777
|
-
|
|
778
|
-
Args:
|
|
779
|
-
state: The state object to check against.
|
|
780
|
-
firmware_version: The firmware version of the device to apply the state to.
|
|
781
|
-
Use this to ensure the state will still be compatible after an update.
|
|
782
|
-
|
|
783
|
-
Returns:
|
|
784
|
-
An explanation of why this state cannot be set to this process.
|
|
785
|
-
"""
|
|
786
|
-
request = dto.CanSetStateRequest(
|
|
787
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
788
|
-
device=self.controller.device.device_address,
|
|
789
|
-
axis=self.process_number,
|
|
790
|
-
state=state,
|
|
791
|
-
firmware_version=firmware_version,
|
|
792
|
-
)
|
|
793
|
-
response = await call_async(
|
|
794
|
-
"device/can_set_axis_state",
|
|
795
|
-
request,
|
|
796
|
-
dto.CanSetStateAxisResponse.from_binary)
|
|
797
|
-
return response.error
|
|
798
|
-
|
|
799
|
-
def __repr__(
|
|
800
|
-
self
|
|
801
|
-
) -> str:
|
|
802
|
-
"""
|
|
803
|
-
Returns a string that represents the process.
|
|
804
|
-
|
|
805
|
-
Returns:
|
|
806
|
-
A string that represents the process.
|
|
807
|
-
"""
|
|
808
|
-
request = dto.AxisToStringRequest(
|
|
809
|
-
interface_id=self.controller.device.connection.interface_id,
|
|
810
|
-
device=self.controller.device.device_address,
|
|
811
|
-
axis=self.process_number,
|
|
812
|
-
type_override="Process",
|
|
813
|
-
)
|
|
814
|
-
response = call_sync(
|
|
815
|
-
"device/axis_to_string",
|
|
816
|
-
request,
|
|
817
|
-
dto.StringResponse.from_binary)
|
|
818
|
-
return response.value
|
|
1
|
+
# ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
|
|
2
|
+
# ============== DO NOT EDIT DIRECTLY ============== #
|
|
3
|
+
|
|
4
|
+
from typing import TYPE_CHECKING, List, Optional
|
|
5
|
+
from ..call import call, call_async, call_sync
|
|
6
|
+
|
|
7
|
+
from ..units import Units, TimeUnits
|
|
8
|
+
from ..dto import requests as dto
|
|
9
|
+
from ..ascii.warnings import Warnings
|
|
10
|
+
from ..dto.ascii.response import Response
|
|
11
|
+
from ..dto.measurement import Measurement
|
|
12
|
+
from ..ascii.axis import Axis
|
|
13
|
+
from ..ascii.axis_settings import AxisSettings
|
|
14
|
+
from ..ascii.storage import AxisStorage
|
|
15
|
+
from ..dto.product.process_controller_mode import ProcessControllerMode
|
|
16
|
+
from ..dto.product.process_controller_source import ProcessControllerSource
|
|
17
|
+
from ..dto.ascii.set_state_axis_response import SetStateAxisResponse
|
|
18
|
+
from ..dto.firmware_version import FirmwareVersion
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from .process_controller import ProcessController
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Process:
|
|
25
|
+
"""
|
|
26
|
+
Use to drive voltage for a process such as a heater, valve, Peltier device, etc.
|
|
27
|
+
Requires at least Firmware 7.35.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def controller(self) -> 'ProcessController':
|
|
32
|
+
"""
|
|
33
|
+
Controller for this process.
|
|
34
|
+
"""
|
|
35
|
+
return self._controller
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def process_number(self) -> int:
|
|
39
|
+
"""
|
|
40
|
+
The process number identifies the process on the controller.
|
|
41
|
+
"""
|
|
42
|
+
return self._process_number
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def settings(self) -> AxisSettings:
|
|
46
|
+
"""
|
|
47
|
+
Settings and properties of this process.
|
|
48
|
+
"""
|
|
49
|
+
return self._settings
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def storage(self) -> AxisStorage:
|
|
53
|
+
"""
|
|
54
|
+
Key-value storage of this process.
|
|
55
|
+
"""
|
|
56
|
+
return self._storage
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def warnings(self) -> Warnings:
|
|
60
|
+
"""
|
|
61
|
+
Warnings and faults of this process.
|
|
62
|
+
"""
|
|
63
|
+
return self._warnings
|
|
64
|
+
|
|
65
|
+
def __init__(self, controller: 'ProcessController', process_number: int):
|
|
66
|
+
self._controller: 'ProcessController' = controller
|
|
67
|
+
self._process_number: int = process_number
|
|
68
|
+
self._axis: Axis = Axis(controller.device, process_number)
|
|
69
|
+
self._settings: AxisSettings = AxisSettings(self._axis)
|
|
70
|
+
self._storage: AxisStorage = AxisStorage(self._axis)
|
|
71
|
+
self._warnings: Warnings = Warnings(controller.device, process_number)
|
|
72
|
+
|
|
73
|
+
def enable(
|
|
74
|
+
self,
|
|
75
|
+
enabled: bool = True
|
|
76
|
+
) -> None:
|
|
77
|
+
"""
|
|
78
|
+
Sets the enabled state of the driver.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
enabled: If true (default) enables drive. If false disables.
|
|
82
|
+
"""
|
|
83
|
+
request = dto.ProcessOn(
|
|
84
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
85
|
+
device=self.controller.device.device_address,
|
|
86
|
+
axis=self.process_number,
|
|
87
|
+
on=enabled,
|
|
88
|
+
)
|
|
89
|
+
call("process-controller/enable", request)
|
|
90
|
+
|
|
91
|
+
async def enable_async(
|
|
92
|
+
self,
|
|
93
|
+
enabled: bool = True
|
|
94
|
+
) -> None:
|
|
95
|
+
"""
|
|
96
|
+
Sets the enabled state of the driver.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
enabled: If true (default) enables drive. If false disables.
|
|
100
|
+
"""
|
|
101
|
+
request = dto.ProcessOn(
|
|
102
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
103
|
+
device=self.controller.device.device_address,
|
|
104
|
+
axis=self.process_number,
|
|
105
|
+
on=enabled,
|
|
106
|
+
)
|
|
107
|
+
await call_async("process-controller/enable", request)
|
|
108
|
+
|
|
109
|
+
def on(
|
|
110
|
+
self,
|
|
111
|
+
duration: float = 0,
|
|
112
|
+
unit: TimeUnits = Units.NATIVE
|
|
113
|
+
) -> None:
|
|
114
|
+
"""
|
|
115
|
+
Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
duration: How long to leave the process on.
|
|
119
|
+
unit: Units of time.
|
|
120
|
+
"""
|
|
121
|
+
request = dto.ProcessOn(
|
|
122
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
123
|
+
device=self.controller.device.device_address,
|
|
124
|
+
axis=self.process_number,
|
|
125
|
+
on=True,
|
|
126
|
+
duration=duration,
|
|
127
|
+
unit=unit,
|
|
128
|
+
)
|
|
129
|
+
call("process-controller/on", request)
|
|
130
|
+
|
|
131
|
+
async def on_async(
|
|
132
|
+
self,
|
|
133
|
+
duration: float = 0,
|
|
134
|
+
unit: TimeUnits = Units.NATIVE
|
|
135
|
+
) -> None:
|
|
136
|
+
"""
|
|
137
|
+
Turns this process on. In manual mode, this supplies voltage; in controlled mode, it starts the control loop.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
duration: How long to leave the process on.
|
|
141
|
+
unit: Units of time.
|
|
142
|
+
"""
|
|
143
|
+
request = dto.ProcessOn(
|
|
144
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
145
|
+
device=self.controller.device.device_address,
|
|
146
|
+
axis=self.process_number,
|
|
147
|
+
on=True,
|
|
148
|
+
duration=duration,
|
|
149
|
+
unit=unit,
|
|
150
|
+
)
|
|
151
|
+
await call_async("process-controller/on", request)
|
|
152
|
+
|
|
153
|
+
def off(
|
|
154
|
+
self
|
|
155
|
+
) -> None:
|
|
156
|
+
"""
|
|
157
|
+
Turns this process off.
|
|
158
|
+
"""
|
|
159
|
+
request = dto.ProcessOn(
|
|
160
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
161
|
+
device=self.controller.device.device_address,
|
|
162
|
+
axis=self.process_number,
|
|
163
|
+
on=False,
|
|
164
|
+
)
|
|
165
|
+
call("process-controller/on", request)
|
|
166
|
+
|
|
167
|
+
async def off_async(
|
|
168
|
+
self
|
|
169
|
+
) -> None:
|
|
170
|
+
"""
|
|
171
|
+
Turns this process off.
|
|
172
|
+
"""
|
|
173
|
+
request = dto.ProcessOn(
|
|
174
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
175
|
+
device=self.controller.device.device_address,
|
|
176
|
+
axis=self.process_number,
|
|
177
|
+
on=False,
|
|
178
|
+
)
|
|
179
|
+
await call_async("process-controller/on", request)
|
|
180
|
+
|
|
181
|
+
def set_mode(
|
|
182
|
+
self,
|
|
183
|
+
mode: ProcessControllerMode
|
|
184
|
+
) -> None:
|
|
185
|
+
"""
|
|
186
|
+
Sets the control mode of this process.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
mode: Mode to set this process to.
|
|
190
|
+
"""
|
|
191
|
+
request = dto.DeviceSetSettingRequest(
|
|
192
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
193
|
+
device=self.controller.device.device_address,
|
|
194
|
+
axis=self.process_number,
|
|
195
|
+
setting="process.control.mode",
|
|
196
|
+
value=mode.value,
|
|
197
|
+
)
|
|
198
|
+
call("device/set_setting", request)
|
|
199
|
+
|
|
200
|
+
async def set_mode_async(
|
|
201
|
+
self,
|
|
202
|
+
mode: ProcessControllerMode
|
|
203
|
+
) -> None:
|
|
204
|
+
"""
|
|
205
|
+
Sets the control mode of this process.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
mode: Mode to set this process to.
|
|
209
|
+
"""
|
|
210
|
+
request = dto.DeviceSetSettingRequest(
|
|
211
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
212
|
+
device=self.controller.device.device_address,
|
|
213
|
+
axis=self.process_number,
|
|
214
|
+
setting="process.control.mode",
|
|
215
|
+
value=mode.value,
|
|
216
|
+
)
|
|
217
|
+
await call_async("device/set_setting", request)
|
|
218
|
+
|
|
219
|
+
def get_mode(
|
|
220
|
+
self
|
|
221
|
+
) -> ProcessControllerMode:
|
|
222
|
+
"""
|
|
223
|
+
Gets the control mode of this process.
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
Control mode.
|
|
227
|
+
"""
|
|
228
|
+
request = dto.DeviceGetSettingRequest(
|
|
229
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
230
|
+
device=self.controller.device.device_address,
|
|
231
|
+
axis=self.process_number,
|
|
232
|
+
setting="process.control.mode",
|
|
233
|
+
)
|
|
234
|
+
response = call(
|
|
235
|
+
"device/get_setting",
|
|
236
|
+
request,
|
|
237
|
+
dto.DoubleResponse.from_binary)
|
|
238
|
+
return ProcessControllerMode(response.value)
|
|
239
|
+
|
|
240
|
+
async def get_mode_async(
|
|
241
|
+
self
|
|
242
|
+
) -> ProcessControllerMode:
|
|
243
|
+
"""
|
|
244
|
+
Gets the control mode of this process.
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
Control mode.
|
|
248
|
+
"""
|
|
249
|
+
request = dto.DeviceGetSettingRequest(
|
|
250
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
251
|
+
device=self.controller.device.device_address,
|
|
252
|
+
axis=self.process_number,
|
|
253
|
+
setting="process.control.mode",
|
|
254
|
+
)
|
|
255
|
+
response = await call_async(
|
|
256
|
+
"device/get_setting",
|
|
257
|
+
request,
|
|
258
|
+
dto.DoubleResponse.from_binary)
|
|
259
|
+
return ProcessControllerMode(response.value)
|
|
260
|
+
|
|
261
|
+
def get_source(
|
|
262
|
+
self
|
|
263
|
+
) -> ProcessControllerSource:
|
|
264
|
+
"""
|
|
265
|
+
Gets the source used to control this process.
|
|
266
|
+
|
|
267
|
+
Returns:
|
|
268
|
+
The source providing feedback for this process.
|
|
269
|
+
"""
|
|
270
|
+
request = dto.AxisEmptyRequest(
|
|
271
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
272
|
+
device=self.controller.device.device_address,
|
|
273
|
+
axis=self.process_number,
|
|
274
|
+
)
|
|
275
|
+
response = call(
|
|
276
|
+
"process_controller/get_source",
|
|
277
|
+
request,
|
|
278
|
+
ProcessControllerSource.from_binary)
|
|
279
|
+
return response
|
|
280
|
+
|
|
281
|
+
async def get_source_async(
|
|
282
|
+
self
|
|
283
|
+
) -> ProcessControllerSource:
|
|
284
|
+
"""
|
|
285
|
+
Gets the source used to control this process.
|
|
286
|
+
|
|
287
|
+
Returns:
|
|
288
|
+
The source providing feedback for this process.
|
|
289
|
+
"""
|
|
290
|
+
request = dto.AxisEmptyRequest(
|
|
291
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
292
|
+
device=self.controller.device.device_address,
|
|
293
|
+
axis=self.process_number,
|
|
294
|
+
)
|
|
295
|
+
response = await call_async(
|
|
296
|
+
"process_controller/get_source",
|
|
297
|
+
request,
|
|
298
|
+
ProcessControllerSource.from_binary)
|
|
299
|
+
return response
|
|
300
|
+
|
|
301
|
+
def set_source(
|
|
302
|
+
self,
|
|
303
|
+
source: ProcessControllerSource
|
|
304
|
+
) -> None:
|
|
305
|
+
"""
|
|
306
|
+
Sets the source used to control this process.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
source: Sets the source that should provide feedback for this process.
|
|
310
|
+
"""
|
|
311
|
+
request = dto.SetProcessControllerSource(
|
|
312
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
313
|
+
device=self.controller.device.device_address,
|
|
314
|
+
axis=self.process_number,
|
|
315
|
+
source=source,
|
|
316
|
+
)
|
|
317
|
+
call("process_controller/set_source", request)
|
|
318
|
+
|
|
319
|
+
async def set_source_async(
|
|
320
|
+
self,
|
|
321
|
+
source: ProcessControllerSource
|
|
322
|
+
) -> None:
|
|
323
|
+
"""
|
|
324
|
+
Sets the source used to control this process.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
source: Sets the source that should provide feedback for this process.
|
|
328
|
+
"""
|
|
329
|
+
request = dto.SetProcessControllerSource(
|
|
330
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
331
|
+
device=self.controller.device.device_address,
|
|
332
|
+
axis=self.process_number,
|
|
333
|
+
source=source,
|
|
334
|
+
)
|
|
335
|
+
await call_async("process_controller/set_source", request)
|
|
336
|
+
|
|
337
|
+
def get_input(
|
|
338
|
+
self
|
|
339
|
+
) -> Measurement:
|
|
340
|
+
"""
|
|
341
|
+
Gets the current value of the source used to control this process.
|
|
342
|
+
|
|
343
|
+
Returns:
|
|
344
|
+
The current value of this process's controlling source.
|
|
345
|
+
"""
|
|
346
|
+
request = dto.AxisEmptyRequest(
|
|
347
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
348
|
+
device=self.controller.device.device_address,
|
|
349
|
+
axis=self.process_number,
|
|
350
|
+
)
|
|
351
|
+
response = call(
|
|
352
|
+
"process_controller/get_input",
|
|
353
|
+
request,
|
|
354
|
+
Measurement.from_binary)
|
|
355
|
+
return response
|
|
356
|
+
|
|
357
|
+
async def get_input_async(
|
|
358
|
+
self
|
|
359
|
+
) -> Measurement:
|
|
360
|
+
"""
|
|
361
|
+
Gets the current value of the source used to control this process.
|
|
362
|
+
|
|
363
|
+
Returns:
|
|
364
|
+
The current value of this process's controlling source.
|
|
365
|
+
"""
|
|
366
|
+
request = dto.AxisEmptyRequest(
|
|
367
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
368
|
+
device=self.controller.device.device_address,
|
|
369
|
+
axis=self.process_number,
|
|
370
|
+
)
|
|
371
|
+
response = await call_async(
|
|
372
|
+
"process_controller/get_input",
|
|
373
|
+
request,
|
|
374
|
+
Measurement.from_binary)
|
|
375
|
+
return response
|
|
376
|
+
|
|
377
|
+
def bridge(
|
|
378
|
+
self
|
|
379
|
+
) -> None:
|
|
380
|
+
"""
|
|
381
|
+
Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
|
|
382
|
+
"""
|
|
383
|
+
request = dto.ProcessOn(
|
|
384
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
385
|
+
device=self.controller.device.device_address,
|
|
386
|
+
axis=self.process_number,
|
|
387
|
+
on=True,
|
|
388
|
+
)
|
|
389
|
+
call("process_controller/bridge", request)
|
|
390
|
+
|
|
391
|
+
async def bridge_async(
|
|
392
|
+
self
|
|
393
|
+
) -> None:
|
|
394
|
+
"""
|
|
395
|
+
Creates an H-bridge between this process and its neighbor. This method is only callable on axis 1 and 3.
|
|
396
|
+
"""
|
|
397
|
+
request = dto.ProcessOn(
|
|
398
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
399
|
+
device=self.controller.device.device_address,
|
|
400
|
+
axis=self.process_number,
|
|
401
|
+
on=True,
|
|
402
|
+
)
|
|
403
|
+
await call_async("process_controller/bridge", request)
|
|
404
|
+
|
|
405
|
+
def unbridge(
|
|
406
|
+
self
|
|
407
|
+
) -> None:
|
|
408
|
+
"""
|
|
409
|
+
Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
|
|
410
|
+
This method is only callable on axis 1 and 3.
|
|
411
|
+
"""
|
|
412
|
+
request = dto.ProcessOn(
|
|
413
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
414
|
+
device=self.controller.device.device_address,
|
|
415
|
+
axis=self.process_number,
|
|
416
|
+
on=False,
|
|
417
|
+
)
|
|
418
|
+
call("process_controller/bridge", request)
|
|
419
|
+
|
|
420
|
+
async def unbridge_async(
|
|
421
|
+
self
|
|
422
|
+
) -> None:
|
|
423
|
+
"""
|
|
424
|
+
Breaks the H-bridge between this process and its neighbor, allowing them to be independently controlled.
|
|
425
|
+
This method is only callable on axis 1 and 3.
|
|
426
|
+
"""
|
|
427
|
+
request = dto.ProcessOn(
|
|
428
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
429
|
+
device=self.controller.device.device_address,
|
|
430
|
+
axis=self.process_number,
|
|
431
|
+
on=False,
|
|
432
|
+
)
|
|
433
|
+
await call_async("process_controller/bridge", request)
|
|
434
|
+
|
|
435
|
+
def is_bridge(
|
|
436
|
+
self
|
|
437
|
+
) -> bool:
|
|
438
|
+
"""
|
|
439
|
+
Detects if the given process is in bridging mode.
|
|
440
|
+
|
|
441
|
+
Returns:
|
|
442
|
+
Whether this process is bridged with its neighbor.
|
|
443
|
+
"""
|
|
444
|
+
request = dto.AxisEmptyRequest(
|
|
445
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
446
|
+
device=self.controller.device.device_address,
|
|
447
|
+
axis=self.process_number,
|
|
448
|
+
)
|
|
449
|
+
response = call(
|
|
450
|
+
"process_controller/is_bridge",
|
|
451
|
+
request,
|
|
452
|
+
dto.BoolResponse.from_binary)
|
|
453
|
+
return response.value
|
|
454
|
+
|
|
455
|
+
async def is_bridge_async(
|
|
456
|
+
self
|
|
457
|
+
) -> bool:
|
|
458
|
+
"""
|
|
459
|
+
Detects if the given process is in bridging mode.
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
Whether this process is bridged with its neighbor.
|
|
463
|
+
"""
|
|
464
|
+
request = dto.AxisEmptyRequest(
|
|
465
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
466
|
+
device=self.controller.device.device_address,
|
|
467
|
+
axis=self.process_number,
|
|
468
|
+
)
|
|
469
|
+
response = await call_async(
|
|
470
|
+
"process_controller/is_bridge",
|
|
471
|
+
request,
|
|
472
|
+
dto.BoolResponse.from_binary)
|
|
473
|
+
return response.value
|
|
474
|
+
|
|
475
|
+
def generic_command(
|
|
476
|
+
self,
|
|
477
|
+
command: str,
|
|
478
|
+
check_errors: bool = True,
|
|
479
|
+
timeout: int = 0
|
|
480
|
+
) -> Response:
|
|
481
|
+
"""
|
|
482
|
+
Sends a generic ASCII command to this process' underlying axis.
|
|
483
|
+
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
484
|
+
|
|
485
|
+
Args:
|
|
486
|
+
command: Command and its parameters.
|
|
487
|
+
check_errors: Controls whether to throw an exception when the device rejects the command.
|
|
488
|
+
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
489
|
+
Overrides the connection default request timeout.
|
|
490
|
+
|
|
491
|
+
Returns:
|
|
492
|
+
A response to the command.
|
|
493
|
+
"""
|
|
494
|
+
request = dto.GenericCommandRequest(
|
|
495
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
496
|
+
device=self.controller.device.device_address,
|
|
497
|
+
axis=self.process_number,
|
|
498
|
+
command=command,
|
|
499
|
+
check_errors=check_errors,
|
|
500
|
+
timeout=timeout,
|
|
501
|
+
)
|
|
502
|
+
response = call(
|
|
503
|
+
"interface/generic_command",
|
|
504
|
+
request,
|
|
505
|
+
Response.from_binary)
|
|
506
|
+
return response
|
|
507
|
+
|
|
508
|
+
async def generic_command_async(
|
|
509
|
+
self,
|
|
510
|
+
command: str,
|
|
511
|
+
check_errors: bool = True,
|
|
512
|
+
timeout: int = 0
|
|
513
|
+
) -> Response:
|
|
514
|
+
"""
|
|
515
|
+
Sends a generic ASCII command to this process' underlying axis.
|
|
516
|
+
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
517
|
+
|
|
518
|
+
Args:
|
|
519
|
+
command: Command and its parameters.
|
|
520
|
+
check_errors: Controls whether to throw an exception when the device rejects the command.
|
|
521
|
+
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
522
|
+
Overrides the connection default request timeout.
|
|
523
|
+
|
|
524
|
+
Returns:
|
|
525
|
+
A response to the command.
|
|
526
|
+
"""
|
|
527
|
+
request = dto.GenericCommandRequest(
|
|
528
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
529
|
+
device=self.controller.device.device_address,
|
|
530
|
+
axis=self.process_number,
|
|
531
|
+
command=command,
|
|
532
|
+
check_errors=check_errors,
|
|
533
|
+
timeout=timeout,
|
|
534
|
+
)
|
|
535
|
+
response = await call_async(
|
|
536
|
+
"interface/generic_command",
|
|
537
|
+
request,
|
|
538
|
+
Response.from_binary)
|
|
539
|
+
return response
|
|
540
|
+
|
|
541
|
+
def generic_command_multi_response(
|
|
542
|
+
self,
|
|
543
|
+
command: str,
|
|
544
|
+
check_errors: bool = True,
|
|
545
|
+
timeout: int = 0
|
|
546
|
+
) -> List[Response]:
|
|
547
|
+
"""
|
|
548
|
+
Sends a generic ASCII command to this process and expect multiple responses.
|
|
549
|
+
Responses are returned in order of arrival.
|
|
550
|
+
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
551
|
+
|
|
552
|
+
Args:
|
|
553
|
+
command: Command and its parameters.
|
|
554
|
+
check_errors: Controls whether to throw an exception when a device rejects the command.
|
|
555
|
+
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
556
|
+
Overrides the connection default request timeout.
|
|
557
|
+
|
|
558
|
+
Returns:
|
|
559
|
+
All responses to the command.
|
|
560
|
+
"""
|
|
561
|
+
request = dto.GenericCommandRequest(
|
|
562
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
563
|
+
device=self.controller.device.device_address,
|
|
564
|
+
axis=self.process_number,
|
|
565
|
+
command=command,
|
|
566
|
+
check_errors=check_errors,
|
|
567
|
+
timeout=timeout,
|
|
568
|
+
)
|
|
569
|
+
response = call(
|
|
570
|
+
"interface/generic_command_multi_response",
|
|
571
|
+
request,
|
|
572
|
+
dto.GenericCommandResponseCollection.from_binary)
|
|
573
|
+
return response.responses
|
|
574
|
+
|
|
575
|
+
async def generic_command_multi_response_async(
|
|
576
|
+
self,
|
|
577
|
+
command: str,
|
|
578
|
+
check_errors: bool = True,
|
|
579
|
+
timeout: int = 0
|
|
580
|
+
) -> List[Response]:
|
|
581
|
+
"""
|
|
582
|
+
Sends a generic ASCII command to this process and expect multiple responses.
|
|
583
|
+
Responses are returned in order of arrival.
|
|
584
|
+
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
585
|
+
|
|
586
|
+
Args:
|
|
587
|
+
command: Command and its parameters.
|
|
588
|
+
check_errors: Controls whether to throw an exception when a device rejects the command.
|
|
589
|
+
timeout: The timeout, in milliseconds, for a device to respond to the command.
|
|
590
|
+
Overrides the connection default request timeout.
|
|
591
|
+
|
|
592
|
+
Returns:
|
|
593
|
+
All responses to the command.
|
|
594
|
+
"""
|
|
595
|
+
request = dto.GenericCommandRequest(
|
|
596
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
597
|
+
device=self.controller.device.device_address,
|
|
598
|
+
axis=self.process_number,
|
|
599
|
+
command=command,
|
|
600
|
+
check_errors=check_errors,
|
|
601
|
+
timeout=timeout,
|
|
602
|
+
)
|
|
603
|
+
response = await call_async(
|
|
604
|
+
"interface/generic_command_multi_response",
|
|
605
|
+
request,
|
|
606
|
+
dto.GenericCommandResponseCollection.from_binary)
|
|
607
|
+
return response.responses
|
|
608
|
+
|
|
609
|
+
def generic_command_no_response(
|
|
610
|
+
self,
|
|
611
|
+
command: str
|
|
612
|
+
) -> None:
|
|
613
|
+
"""
|
|
614
|
+
Sends a generic ASCII command to this process without expecting a response and without adding a message ID
|
|
615
|
+
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
616
|
+
|
|
617
|
+
Args:
|
|
618
|
+
command: Command and its parameters.
|
|
619
|
+
"""
|
|
620
|
+
request = dto.GenericCommandRequest(
|
|
621
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
622
|
+
device=self.controller.device.device_address,
|
|
623
|
+
axis=self.process_number,
|
|
624
|
+
command=command,
|
|
625
|
+
)
|
|
626
|
+
call("interface/generic_command_no_response", request)
|
|
627
|
+
|
|
628
|
+
async def generic_command_no_response_async(
|
|
629
|
+
self,
|
|
630
|
+
command: str
|
|
631
|
+
) -> None:
|
|
632
|
+
"""
|
|
633
|
+
Sends a generic ASCII command to this process without expecting a response and without adding a message ID
|
|
634
|
+
For more information refer to: [ASCII Protocol Manual](https://www.zaber.com/protocol-manual#topic_commands).
|
|
635
|
+
|
|
636
|
+
Args:
|
|
637
|
+
command: Command and its parameters.
|
|
638
|
+
"""
|
|
639
|
+
request = dto.GenericCommandRequest(
|
|
640
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
641
|
+
device=self.controller.device.device_address,
|
|
642
|
+
axis=self.process_number,
|
|
643
|
+
command=command,
|
|
644
|
+
)
|
|
645
|
+
await call_async("interface/generic_command_no_response", request)
|
|
646
|
+
|
|
647
|
+
def get_state(
|
|
648
|
+
self
|
|
649
|
+
) -> str:
|
|
650
|
+
"""
|
|
651
|
+
Returns a serialization of the current process state that can be saved and reapplied.
|
|
652
|
+
|
|
653
|
+
Returns:
|
|
654
|
+
A serialization of the current state of the process.
|
|
655
|
+
"""
|
|
656
|
+
request = dto.AxisEmptyRequest(
|
|
657
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
658
|
+
device=self.controller.device.device_address,
|
|
659
|
+
axis=self.process_number,
|
|
660
|
+
)
|
|
661
|
+
response = call(
|
|
662
|
+
"device/get_state",
|
|
663
|
+
request,
|
|
664
|
+
dto.StringResponse.from_binary)
|
|
665
|
+
return response.value
|
|
666
|
+
|
|
667
|
+
async def get_state_async(
|
|
668
|
+
self
|
|
669
|
+
) -> str:
|
|
670
|
+
"""
|
|
671
|
+
Returns a serialization of the current process state that can be saved and reapplied.
|
|
672
|
+
|
|
673
|
+
Returns:
|
|
674
|
+
A serialization of the current state of the process.
|
|
675
|
+
"""
|
|
676
|
+
request = dto.AxisEmptyRequest(
|
|
677
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
678
|
+
device=self.controller.device.device_address,
|
|
679
|
+
axis=self.process_number,
|
|
680
|
+
)
|
|
681
|
+
response = await call_async(
|
|
682
|
+
"device/get_state",
|
|
683
|
+
request,
|
|
684
|
+
dto.StringResponse.from_binary)
|
|
685
|
+
return response.value
|
|
686
|
+
|
|
687
|
+
def set_state(
|
|
688
|
+
self,
|
|
689
|
+
state: str
|
|
690
|
+
) -> SetStateAxisResponse:
|
|
691
|
+
"""
|
|
692
|
+
Applies a saved state to this process.
|
|
693
|
+
|
|
694
|
+
Args:
|
|
695
|
+
state: The state object to apply to this process.
|
|
696
|
+
|
|
697
|
+
Returns:
|
|
698
|
+
Reports of any issues that were handled, but caused the state to not be exactly restored.
|
|
699
|
+
"""
|
|
700
|
+
request = dto.SetStateRequest(
|
|
701
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
702
|
+
device=self.controller.device.device_address,
|
|
703
|
+
axis=self.process_number,
|
|
704
|
+
state=state,
|
|
705
|
+
)
|
|
706
|
+
response = call(
|
|
707
|
+
"device/set_axis_state",
|
|
708
|
+
request,
|
|
709
|
+
SetStateAxisResponse.from_binary)
|
|
710
|
+
return response
|
|
711
|
+
|
|
712
|
+
async def set_state_async(
|
|
713
|
+
self,
|
|
714
|
+
state: str
|
|
715
|
+
) -> SetStateAxisResponse:
|
|
716
|
+
"""
|
|
717
|
+
Applies a saved state to this process.
|
|
718
|
+
|
|
719
|
+
Args:
|
|
720
|
+
state: The state object to apply to this process.
|
|
721
|
+
|
|
722
|
+
Returns:
|
|
723
|
+
Reports of any issues that were handled, but caused the state to not be exactly restored.
|
|
724
|
+
"""
|
|
725
|
+
request = dto.SetStateRequest(
|
|
726
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
727
|
+
device=self.controller.device.device_address,
|
|
728
|
+
axis=self.process_number,
|
|
729
|
+
state=state,
|
|
730
|
+
)
|
|
731
|
+
response = await call_async(
|
|
732
|
+
"device/set_axis_state",
|
|
733
|
+
request,
|
|
734
|
+
SetStateAxisResponse.from_binary)
|
|
735
|
+
return response
|
|
736
|
+
|
|
737
|
+
def can_set_state(
|
|
738
|
+
self,
|
|
739
|
+
state: str,
|
|
740
|
+
firmware_version: Optional[FirmwareVersion] = None
|
|
741
|
+
) -> Optional[str]:
|
|
742
|
+
"""
|
|
743
|
+
Checks if a state can be applied to this process.
|
|
744
|
+
This only covers exceptions that can be determined statically such as mismatches of ID or version,
|
|
745
|
+
the process of applying the state can still fail when running.
|
|
746
|
+
|
|
747
|
+
Args:
|
|
748
|
+
state: The state object to check against.
|
|
749
|
+
firmware_version: The firmware version of the device to apply the state to.
|
|
750
|
+
Use this to ensure the state will still be compatible after an update.
|
|
751
|
+
|
|
752
|
+
Returns:
|
|
753
|
+
An explanation of why this state cannot be set to this process.
|
|
754
|
+
"""
|
|
755
|
+
request = dto.CanSetStateRequest(
|
|
756
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
757
|
+
device=self.controller.device.device_address,
|
|
758
|
+
axis=self.process_number,
|
|
759
|
+
state=state,
|
|
760
|
+
firmware_version=firmware_version,
|
|
761
|
+
)
|
|
762
|
+
response = call(
|
|
763
|
+
"device/can_set_axis_state",
|
|
764
|
+
request,
|
|
765
|
+
dto.CanSetStateAxisResponse.from_binary)
|
|
766
|
+
return response.error
|
|
767
|
+
|
|
768
|
+
async def can_set_state_async(
|
|
769
|
+
self,
|
|
770
|
+
state: str,
|
|
771
|
+
firmware_version: Optional[FirmwareVersion] = None
|
|
772
|
+
) -> Optional[str]:
|
|
773
|
+
"""
|
|
774
|
+
Checks if a state can be applied to this process.
|
|
775
|
+
This only covers exceptions that can be determined statically such as mismatches of ID or version,
|
|
776
|
+
the process of applying the state can still fail when running.
|
|
777
|
+
|
|
778
|
+
Args:
|
|
779
|
+
state: The state object to check against.
|
|
780
|
+
firmware_version: The firmware version of the device to apply the state to.
|
|
781
|
+
Use this to ensure the state will still be compatible after an update.
|
|
782
|
+
|
|
783
|
+
Returns:
|
|
784
|
+
An explanation of why this state cannot be set to this process.
|
|
785
|
+
"""
|
|
786
|
+
request = dto.CanSetStateRequest(
|
|
787
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
788
|
+
device=self.controller.device.device_address,
|
|
789
|
+
axis=self.process_number,
|
|
790
|
+
state=state,
|
|
791
|
+
firmware_version=firmware_version,
|
|
792
|
+
)
|
|
793
|
+
response = await call_async(
|
|
794
|
+
"device/can_set_axis_state",
|
|
795
|
+
request,
|
|
796
|
+
dto.CanSetStateAxisResponse.from_binary)
|
|
797
|
+
return response.error
|
|
798
|
+
|
|
799
|
+
def __repr__(
|
|
800
|
+
self
|
|
801
|
+
) -> str:
|
|
802
|
+
"""
|
|
803
|
+
Returns a string that represents the process.
|
|
804
|
+
|
|
805
|
+
Returns:
|
|
806
|
+
A string that represents the process.
|
|
807
|
+
"""
|
|
808
|
+
request = dto.AxisToStringRequest(
|
|
809
|
+
interface_id=self.controller.device.connection.interface_id,
|
|
810
|
+
device=self.controller.device.device_address,
|
|
811
|
+
axis=self.process_number,
|
|
812
|
+
type_override="Process",
|
|
813
|
+
)
|
|
814
|
+
response = call_sync(
|
|
815
|
+
"device/axis_to_string",
|
|
816
|
+
request,
|
|
817
|
+
dto.StringResponse.from_binary)
|
|
818
|
+
return response.value
|