APIs, concepts, guides, and more
rapidcode.proto
1// This file describes the gRPC interface for the RapidCode services of RapidServer.
2
3syntax = "proto3";
4package RSI.RapidCodeRemote;
5import "rsienums.proto";
6import "rapidgrpc.proto";
7
8/*** Service Definitions ***/
9
10// Provides an interface for the RMP, and a way to interact with RapidCode objects
11// (MotionController, Axis, MultiAxis, RTOS, etc.)
12service RMPService {
13
15 // RPC for MotionController: Sends config/actions, receives updated config, action details, status, and read-only info.
16 rpc MotionController(MotionControllerRequest) returns (MotionControllerResponse) {};
18
20 // RPC for Network: Sends config/actions, receives updated config, action details, status, and read-only info.
21 rpc Network(NetworkRequest) returns (NetworkResponse) {};
23
25 rpc Axis (AxisRequest) returns (AxisResponse) {};
26 rpc AxisBatch (AxisBatchRequest) returns (AxisBatchResponse) {};
28
30 // Use a zero-based index, unlike RapidCode which uses a motion index.
31 rpc MultiAxis (MultiAxisRequest) returns (MultiAxisResponse) {};
32 rpc MultiAxisBatch (MultiAxisBatchRequest) returns (MultiAxisBatchResponse) {};
34
36 rpc NetworkNode (NetworkNodeRequest) returns (NetworkNodeResponse) {};
37 rpc NetworkNodeBatch (NetworkNodeBatchRequest) returns (NetworkNodeBatchResponse) {};
39
41 rpc Recorder (RecorderRequest) returns (RecorderResponse) {};
42 rpc RecorderBatch(RecorderBatchRequest) returns (RecorderBatchResponse) {};
44
46 rpc UserLimit (UserLimitRequest) returns (UserLimitResponse) {};
47 rpc UserLimitBatch(UserLimitBatchRequest) returns (UserLimitBatchResponse) {};
49
51 rpc MathBlock (MathBlockRequest) returns (MathBlockResponse) {};
52 rpc MathBlockBatch(MathBlockBatchRequest) returns (MathBlockBatchResponse) {};
54
56 rpc RTOS(RTOSRequest) returns (RTOSResponse) {};
57 rpc RTOSBatch(RTOSBatchRequest) returns (RTOSBatchResponse) {};
59
61 rpc RTTask (RTTaskRequest) returns (RTTaskResponse) {};
62 rpc RTTaskBatch(RTTaskBatchRequest) returns (RTTaskBatchResponse) {};
64
66 rpc RTTaskManager (RTTaskManagerRequest) returns (RTTaskManagerResponse) {};
67 rpc RTTaskManagerBatch(RTTaskManagerBatchRequest) returns (RTTaskManagerBatchResponse) {};
69}
70
72message MotionControllerConfig {
73 // The number of Axis objects.
74 optional int32 axis_count = 1;
75
76 // The number of MultiAxis objects. (internal MotionCount - AxisCount)
77 optional int32 multi_axis_count = 2;
78
79 // The number of UserLimits.
80 optional int32 user_limit_count = 3;
81
82 // The number of data recorders.
83 optional int32 recorder_count = 4;
84
85 // The sizes of each recorder's buffer.
86 repeated int32 recorder_buffer_sizes = 5;
87
88 // The number of position compensators.
89 optional int32 compensator_count = 6;
90
91 // The number of points for each position compensator.
92 repeated int32 compensator_point_counts = 7;
93
94 // The size of each Axis' frame buffer. Must be power of 2.
95 repeated int32 axis_frame_buffer_sizes = 8;
96
97 // The number of MathBlocks.
98 optional int32 math_block_count = 9;
99
100 // A 32-bit integer for users to specify a version.
101 optional int32 user_version = 10;
102
103 // A double to specify the sample rate in Hertz (samples per second)
104 optional double sample_rate = 11;
105}
106
108
109
110
112message AddressInfo {
113 // The requested address type.
114 oneof address_type {
115 RSIControllerAddressType controller = 1;
116 RSIAxisAddressType axis = 2;
117 RSIMultiAxisAddressType multi_axis = 3;
118 RSINetworkNodeAddressType network_node = 9;
119 }
120
121 // The 64-bit host address from the server. This address can be used to configure the recorder.
122 uint64 host_address = 4;
123
124 // The data type at this address. Useful for using the Recorder service.
125 RSIDataType data_type = 5;
126
127 // The internal RMP firmware address. (What you might see in VM3.)
128 uint64 firmware_address = 6;
129
130 // The 0-based object index for use when accessing Controller Addresses
131 // Not used with Axis, MultiAxis or NetworkNode addresses.
132 optional int32 index = 7;
133
134 // IO bit mask
135 optional int32 mask = 8;
136}
137
138message MotionControllerMemory {
139 message Integer {
140 uint64 host_address = 1;
141 int32 value = 2;
142 }
143 message Double {
144 uint64 host_address = 1;
145 double value = 2;
146 }
147 message Block {
148 uint64 host_address = 1;
149 bytes values = 2;
150 int32 size = 3;
151 }
152 oneof memory {
153 Integer integer = 1;
154 Double double = 2;
155 Block block = 3;
156 }
157}
158
159message MotionControllerCreationParameters {
160 // Path to the RMP firmware (RMP.rta), license file, etc.
161 optional string rmp_path = 1;
162 optional string node_name = 2; // [Windows/INtime] INtime Node used for RMP and RMPNetwork.
163
164 optional string primary_nic = 3;
165 optional string secondary_nic = 4;
166
167 optional int32 cpu_affinity = 5; // [Linux] CPU used for RMP and RMPNetwork
168 optional int32 rmp_thread_priority_max = 6; // [Linux] Relative thread priority
169
170 optional int32 controller_index = 7; // for future multiple controller support
171}
172
173message MotionControllerAction {
174 // Create a MotionController. You must do this before using any other RapidCode remote service!
175 optional MotionControllerCreationParameters create = 1;
176
177 repeated MotionControllerMemory memory_sets = 2;
178 repeated MotionControllerMemory memory_gets = 3;
179 repeated AddressInfo address_gets = 4;
180 optional Shutdown shutdown = 5;
181 optional ProcessorUsageClear processor_usage_clear = 6;
182
183 // shutdown the RMP
184 message Shutdown {}
185
186 // clear the RMP's processor usage
187 message ProcessorUsageClear {}
188}
190
191
192
194message MotionControllerInfo {
195 // The RMP serial number.
196 uint32 serial_number = 1;
197
198 // The RapidCode version.
199 string rapid_code_version = 2;
200
201 // RMP firmware version.
202 string firmware_version = 3;
203
204 // The number of licensed Axis objects.
205 int32 axis_license_count = 4;
206
207 repeated AddressInfo addresses = 5;
208
209 // Constants from the MotionController object
210 Constants constants = 6;
211
212 message Constants {
213 // Default time to wait when calling NetworkStart()
214 uint32 network_start_timeout_milliseconds_default = 1;
215
216 // Maximum number of Axis objects supported.
217 uint32 axis_count_maximum = 2;
218
219 // Maximum number of motion objects supported (One required for each Axis and MultiAxis).
220 uint32 motion_count_maximum = 3;
221
222 // Maximum number of nodes allowed on the network.
223 uint32 network_node_count_maximum = 4;
224
225 // maximum number of Recorder objects supported
226 uint32 recorder_count_maximum = 5;
227
228 // Maximum number of Position Compensator objects supported.
229 uint32 compensator_count_maximum = 6;
230
231 // Maximum number of 64-bit values that can be stored in the User Buffer.
232 uint32 user_buffer_data_count_maximum = 7;
233
234 // Default RMP sample rate in hertz.
235 double sample_rate_default = 8;
236
237 CreationParameters creation_parameters = 9;
238
239 // Maximum number of MathBlock objects supported.
240 uint32 math_block_count_maximum = 10;
241
242 message CreationParameters {
243 // MotionControllerAction::Create::rmp_path maximum string buffer length
244 uint32 path_length_maximum = 1;
245
246 // The default value of MotionControllerAction::Create::cpu_affinity
247 uint32 cpu_affinity_default = 2;
248
249 // The default value of MotionControllerAction::Create::rmp_thread_priority_max
250 uint32 rmp_thread_priority_maximum_default = 3;
251
252 // The range required for RMP and RMPNetwork threads. rmp_thread_priority_max must be greater than or equal to this value.
253 uint32 rmp_thread_priority_range = 4;
254 }
255 }
256
257 // The parameters that were used to create the MotionController.
258 MotionControllerCreationParameters creation_parameters = 7;
259}
261
262
263
265message MotionControllerStatus {
266 // The RMP sample counter.
267 int32 sample_counter = 1;
268
269 // Network node count.
270 uint32 network_node_count = 2;
271
272 // The percentage of the firmware sample time used by the RMP.
273 double processor_usage = 3;
274
275 // The most recent time (in microseconds) between firmware samples
276 uint32 firmware_timing_delta = 4;
277
278 // The number of 32-bit words free in the RMP firmware memory.
279 int32 external_memory_size = 9;
280}
282
283
284
286message MotionControllerRequest {
287 // Common request header.
288 RSI.RapidServer.RequestHeader header = 1;
289
290 optional MotionControllerConfig config = 2;
291 optional MotionControllerAction action = 3;
292}
294
295
297message MotionControllerResponse {
298 // Common response header. Always check the response header for errors.
299 RSI.RapidServer.ResponseHeader header = 1;
300
301 optional MotionControllerConfig config = 2;
302 optional MotionControllerAction action = 3;
303 optional MotionControllerInfo info = 4;
304 optional MotionControllerStatus status = 5;
305}
307
309message FirmwareValue {
310 oneof value {
311 bool bool_value = 1;
312 int32 int8_value = 2;
313 uint32 uint8_value = 3;
314 int32 int16_value = 4;
315 uint32 uint16_value = 5;
316 int32 int32_value = 6;
317 uint32 uint32_value = 7;
318 float float_value = 8;
319 double double_value = 9;
320 int64 int64_value = 10;
321 uint64 uint64_value = 11;
322 }
323}
325
327message NetworkConfig {}
329
331message NetworkAction {
332 // Shutdown the network.
333 optional Shutdown shutdown = 1;
334
335 // Start the network.
336 optional Discover discover = 2;
337 optional Start start = 3;
338 optional DiscoverAndStart discover_and_start = 4;
339
340 // Evaluate network timing.
341 optional TimingMetricsEnable timing_metrics_enable = 5;
342 optional TimingMetricsDisable timing_metrics_disable = 6;
343 optional TimingMetricsClear timing_metrics_clear = 7;
344
345 // Used to override firmware values with your custom outputs.
346 repeated OutputOverride output_override = 8;
347
348 // Generate ENI file
349 optional EniGenerate eni_generate = 9;
350
351 // Creating the object does the job.
352 message Shutdown { }
353
354 message Discover {
355 // Default: MotionController::NetworkStartTimeoutMillisecondsDefault which is 30000 ms.
356 optional uint32 timeout_milliseconds = 3;
357 }
358 message Start {
359 // Default: RSINetworkStartModeOPERATIONAL.
360 optional RSINetworkStartMode mode = 1;
361 // Default: MotionController::NetworkStartTimeoutMillisecondsDefault which is 30000 ms.
362 optional uint32 timeout_milliseconds = 2;
363 }
364
365 message DiscoverAndStart {
366 // Default: RSINetworkStartModeOPERATIONAL.
367 optional RSINetworkStartMode mode = 1;
368 // Default: MotionController::NetworkStartTimeoutMillisecondsDefault which is 30000 ms.
369 optional uint32 timeout_milliseconds = 2;
370 }
371
372 message TimingMetricsEnable {
373 // Determines when low_count increases.
374 optional uint32 low_threshold = 1;
375 // Determines when high_count increases.
376 optional uint32 high_threshold = 2;
377 }
378 message TimingMetricsDisable {}
379 message TimingMetricsClear {}
380
381 message OutputOverride {
382 // Index of the output.
383 int32 index = 1;
384 // Turn on or off overriding of the firmware value with the override_value.
385 optional bool override = 2;
386 // Your custom value rather than our intended firmware value.
387 optional FirmwareValue override_value = 3;
388 }
389
390 message EniGenerate {
391 // result of the attempt to generate the ENI file.
392 optional RSINetworkEniResult result = 1;
393 // resulting output from rsiconfig (which is used to generate the ENI file)
394 optional string output = 2;
395 }
396}
398
400message NetworkRequest {
401 // Common request header.
402 RSI.RapidServer.RequestHeader header = 1;
403
404 optional NetworkConfig config = 2;
405
406 optional NetworkAction action = 3;
407}
409
411message NetworkResponse {
412 // Common response header. Always check the response header for errors.
413 RSI.RapidServer.ResponseHeader header = 1;
414
415 optional NetworkConfig config = 2;
416 optional NetworkAction action = 3;
417 optional NetworkInfo info = 4;
418 optional NetworkStatus status = 5;
419}
421
423message NetworkStatus {
424 RSINetworkState state = 1;
425 int32 node_count = 2;
426 int32 counter = 3;
427 bool synchronized = 4;
428 RSINetworkStartError last_start_error = 5;
429
430 // output logged from RMPNetwork when it closes.
431 string log_message = 6;
432
433 // NetworkTiming in RapidCode. Used to evaluate stability.
434 TimingMetricsStatus timing_metrics = 7;
435
436 // Collection of all Network PDO Inputs.
437 repeated PdoInputStatus pdo_inputs = 8;
438
439 // Collection of all Network PDO Outputs.
440 repeated PdoOutputStatus pdo_outputs = 9;
441
442 // Logical OR of AL Status registers from all nodes. 8 = all Operational.
443 uint32 al_status = 10;
444 // Cumulative count of missed cyclic EtherCAT frames since network startup.
445 uint32 missed_cyclic_frame_count = 11;
446 // Most recent cyclic frame period in microseconds.
447 uint32 cyclic_frame_period_us = 12;
448 // Distributed Clock synchronization error in nanoseconds.
449 int32 synchronization_error_ns = 13;
450 // Number of nodes actively responding on the network.
451 uint32 active_node_count = 14;
452 // The host network interface type used for EtherCAT frame I/O.
453 RSINetworkInterfaceType interface_type = 15;
454 // Cumulative EoE (Ethernet over EtherCAT) frames sent host->nodes since network start, network-wide
455 // (includes broadcasts, so >= the sum of per-node NetworkNodeStatus.eoe_host_to_node_frame_count).
456 uint64 eoe_host_to_node_frame_count = 16;
457 // Cumulative EoE frames received nodes->host since network start, network-wide.
458 uint64 eoe_node_to_host_frame_count = 17;
459
460 message TimingMetricsStatus {
461 // Most recent value.
462 uint32 delta = 1;
463 // Lowest recorded since last clear.
464 uint32 min_recorded = 2;
465 // Highest recorded since last clear.
466 uint32 max_recorded = 3;
467 // Count below low_threshold since last clear.
468 uint32 low_count = 4;
469 // Count above high_threshold since last clear.
470 uint32 high_count = 5;
471 // True if timing metrics are currently enabled.
472 bool enabled = 6;
473 }
474
475 message PdoInputStatus {
476 // The index of this PDO in RMP firmware.
477 int32 index = 1;
478 // The value of this PDO.
479 FirmwareValue value = 2;
480 }
481
482 message PdoOutputStatus {
483 // The index of this PDO in RMP firmware.
484 int32 index = 1;
485 // The value that was sent on the network.
486 FirmwareValue sent_value = 2;
487 // Whether or not the override_value is being used.
488 bool override_enabled = 3;
489 // The override value that can be written by software.
490 FirmwareValue override_value = 4;
491 // The value that the RMP is going to send, unless overridden.
492 FirmwareValue firmware_value = 5;
493 }
494}
496
498message NetworkInfo {
499 RSINetworkType type = 1;
500 int32 pdo_input_count = 4;
501 int32 pdo_output_count = 5;
502
503 // Collection of all Network PDO Inputs.
504 repeated PdoInputInfo pdo_inputs = 6;
505
506 // Collection of all Network PDO Outputs.
507 repeated PdoOutputInfo pdo_outputs = 7;
508
509 message PdoInputInfo {
510 string name = 1;
511 AddressInfo address_info = 2;
512 int32 bit_size = 3;
513 int32 bit_offset = 4;
514 string data_type_name = 5;
515 }
516
517 message PdoOutputInfo {
518 string name = 1;
519 AddressInfo sent_value_address = 2;
520 AddressInfo override_value_address = 3;
521 AddressInfo firmware_value_address = 4;
522 int32 bit_size = 5;
523 int32 bit_offset = 6;
524 string data_type_name = 7;
525 }
526}
528
529
530
531
533message AxisRequest {
534 // Common request header
535 RSI.RapidServer.RequestHeader header = 1;
536
537 // Axis index
538 int32 index = 2;
539
540 optional AxisConfig config = 3;
541 optional AxisAction action = 4;
542}
544
546message AxisResponse {
547 // Common response header. Always check the response header for errors.
548 RSI.RapidServer.ResponseHeader header = 1;
549
550 // Axis index
551 int32 index = 2;
552
553 optional AxisConfig config = 3;
554 optional AxisAction action = 4;
555 optional AxisInfo info = 5;
556 optional AxisStatus status = 6;
557}
559
561message AxisBatchRequest {
562 // Common request header
563 RSI.RapidServer.RequestHeader header = 1;
564
565 repeated AxisRequest requests = 2;
566}
567
568message AxisBatchResponse {
569 // Common response header. Always check the response header for errors.
570 RSI.RapidServer.ResponseHeader header = 1;
571
572 repeated AxisResponse responses = 2;
573}
575
577message AxisStatus {
578 // Is the amp enabled?
579 bool amp_enabled = 1;
580
581 // The state (IDLE, MOVING, ERROR, etc.).
582 RSIState state = 2;
583
584 // The cause of the error (if in ERROR, STOPPED, STOPPING_ERROR state).
585 RSISource source = 3;
586
587 // Extra fault info from the drive
588 string source_name = 4;
589
590 // Positions.
591 PositionStatus position = 5;
592
593 // Command and actual velocity.
594 VelocityStatus velocity = 6;
595
596 // Command acceleration.
597 AccelerationStatus acceleration = 7;
598
599 // How many frames does the Axis have left to execute?
600 int32 frames_to_execute = 8;
601
602 // The motion id as stored in the Axis class (unsigned 16-bit integer).
603 uint32 motion_id = 9;
604
605 // The currently executing motion identifier (unsigned 16-bit integer).
606 uint32 motion_id_executing = 10;
607
608 // The currently exeucting motion element identifier (unsigned 16-bit integer).
609 int32 element_id_executing = 11;
610
611 // Is electronic gearing enabled?
612 bool gear_enabled = 12;
613
614 // Status bits related to the motor.
615 MotorStatusBits motor_status_bits = 13;
616
617 // Status bits related to motion.
618 MotionStatusBits motion_status_bits = 14;
619
620 // DS402 status bits, for drives that support DS402.
621 Ds402StatusBits ds402_status_bits = 15;
622
623 // Dedicated output bits.
624 DedicatedOutputBits dedicated_output_bits = 16;
625
626 // Dedicated input bits.
627 DedicatedInputBits dedicated_input_bits = 17;
628
629 // Homing status
630 bool home_state = 18;
631 RSIHomeStage home_stage = 19;
632
633 // The states of the general purpose input bits, DigitalInputsGet().
634 uint32 general_input_bits = 20;
635
636 // The states of the general purpose output bits, DigitalOutputsGet().
637 uint32 general_output_bits = 21;
638
639 message PositionStatus {
640 double command = 1;
641 double actual = 2;
642 double error = 3;
643 double target = 4;
644 double origin = 5;
645 double encoder_0 = 6;
646 double encoder_1 = 7;
647 double compensation = 8;
648 double backlash = 9;
649 }
650
651 message VelocityStatus {
652 double command = 1;
653 double actual = 2;
654 }
655
656 message AccelerationStatus {
657 double command = 1;
658 }
659
660 message MotorStatusBits {
661 bool amp_fault = 1;
662 bool amp_warning = 2;
663 bool feedback_fault = 3;
664 bool limit_position_error = 4;
665 bool limit_torque = 5;
666 bool limit_hardware_negative = 6;
667 bool limit_hardware_positive = 7;
668 bool limit_software_negative = 8;
669 bool limit_software_positive = 9;
670 }
671
672 message MotionStatusBits {
673 bool done = 1;
674 bool start = 2;
675 bool modify = 3;
676 bool at_velocity = 4;
677 bool out_of_frames = 5;
678 bool near_target = 6;
679 bool at_target = 7;
680 bool settled = 8;
681 }
682
683 message Ds402StatusBits {
684 bool ready_to_switch_on = 1;
685 bool switched_on = 2;
686 bool operation_enabled = 3;
687 bool fault = 4;
688 bool voltage_enabled = 5;
689 bool quick_stop = 6;
690 bool switch_on_disabled = 7;
691 bool warning = 8;
692 bool manufacturer_specific_8 = 9;
693 bool remote = 10;
694 bool target_reached = 11;
695 bool internal_limit_active = 12;
696 bool operation_mode_specific_12 = 13;
697 bool operation_mode_specific_13 = 14;
698 bool manufacturer_specific_14 = 15;
699 bool manufacturer_specific_15 = 16;
700 }
701
702 message DedicatedOutputBits {
703 bool amp_enable = 1;
704 bool brake_release = 2;
705 }
706
707 message DedicatedInputBits {
708 bool amp_fault = 1;
709 bool brake_applied = 2;
710 bool home = 3;
711 bool limit_hardware_positive = 4;
712 bool limit_hardware_negative = 5;
713 bool index = 6;
714 bool index_secondary = 7;
715 bool feedback_fault = 8;
716 bool captured = 9;
717 bool hall_a = 10;
718 bool hall_b = 11;
719 bool hall_c = 12;
720 bool amp_active = 13;
721 bool warning = 14;
722 bool drive_status_9 = 15;
723 bool drive_status_10 = 16;
724 bool feedback_fault_primary = 17;
725 bool feedback_fault_secondary = 18;
726 }
727}
729
731message AxisAction {
732 optional Abort abort = 1;
733 optional EStopAbort e_stop_abort = 2;
734 optional EStopModifyAbort e_stop_modify_abort = 3;
735 optional EStopModify e_stop_modify = 4;
736 optional EStop e_stop = 5;
737 optional TriggeredModify triggered_modify = 6;
738 optional Stop stop = 7;
739 optional Resume resume = 8;
740
741 optional ClearFaults clear_faults = 9;
742 optional AmpEnable amp_enable = 10;
743 optional AmpDisable amp_disable = 11;
744 optional HoldGateSet hold_gate_set = 12;
745 optional PositionSet position_set = 13;
746 optional Move move = 14;
747 optional GearEnable gear_enable = 15;
748 optional GearDisable gear_disable = 16;
749 optional Home home = 17;
750 optional HomeCancel home_cancel = 18;
751 optional OperationMode operation_mode_set = 19;
752 optional OperationMode operation_mode_get = 20;
753
754 // Remap logical PDO indexes (control word, status word, etc.) on this axis.
755 // Each entry calls Axis::NetworkIndexSet(type, index). Per-entry failures are
756 // reported via ResponseHeader.Errors; successful entries still take effect.
757 // Equivalent to the C++/C# API `axis->NetworkIndexSet(indexType, newIndex)`.
758 repeated AxisNetworkIndex network_index_sets = 21;
759
760 message Abort {}
761 message EStopAbort {}
762 message EStopModifyAbort{}
763 message EStopModify{}
764 message EStop {}
765 message TriggeredModify {}
766 message Stop {}
767 message Resume {}
768
769 message ClearFaults {}
770
771 message AmpEnable {
772 optional int32 timeout_milliseconds = 1;
773 optional int32 duration = 2; // read-only how long did it take to enable? only set if you specify a timeout to wait for AMP_ACTIVE
774 optional bool override_restricted_state = 3; // if true, allows potentially dangerous enabling of an Amplifier even if it's in MOVING, STOPPING or STOPPED state
775 }
776 message AmpDisable {}
777 message HoldGateSet {
778 bool state = 1;
779 }
780 message PositionSet{
781 double position = 1;
782 }
783
784 message Move {
785 // Request one type of motion.
786 oneof move {
787 AxisMovePointToPoint point_to_point = 3;
788 AxisMoveVelocity velocity = 4;
789 MoveStreaming streaming = 5;
790 }
791
792 // Specify the MotionID for this move. (If you don't specify one, it will be auto-incremented after each move.)
793 optional uint32 motion_id = 6;
794
795 // Specify MotionHold criteria, if you want the motion to hold execution until conditions are met.
796 optional MotionHold motion_hold = 7;
797
798 // Wait for motion to complete? (See ConfigSet settling criteria.)
799 bool blocking = 8;
800 }
801
802 message GearEnable {
803 optional int32 master_axis_number = 2;
804 optional RSIAxisMasterType gearing_source = 3;
805 int32 numerator = 4;
806 int32 denominator = 5;
807 }
808 message GearDisable {}
809
810 message Home {
811 RSIHomeMethod method = 1;
812 double velocity = 2;
813 double slow_velocity = 3;
814 double acceleration = 4;
815 double deceleration = 5;
816 optional double jerk_percent = 6;
817 optional bool move_to_zero = 7;
818 optional double offset = 8;
819 optional RSIAction behavior = 9;
820 }
821
822 message HomeCancel {}
823
824 message OperationMode {
825 // For setting the operation mode in the request, or getting it from the response.
826 optional RSIOperationMode operation_mode = 1;
827 }
828}
829
830// Internal MoveRequest messages.
831 message AxisMovePointToPoint {
832 // Move to this position. Absolute, unless the relative boolean is true. (UserUnits)
833 double position = 1;
834
835 // Maximum velocity. (UserUnits/second).
836 optional double velocity = 2;
837
838 // Maximum acceleration. (UserUnits/second^2). If specified, velocity and deceleration must be specified.
839 optional double acceleration = 3;
840
841 // Maximum deceleration. (UserUnits/second^2). If specified, velocity and acceleration must be specified
842 optional double deceleration = 4;
843
844 // Percentage of acceleration that will be smoothed. (0-100)
845 // Acceleration time will not change so if Jerk Percent is 100, maximum acceleration will be 2x the specified maximum.
846 // If specified, velocity, acceleration, and deceleration must be specified.
847 // A non-zero value makes the PointToPoint MoveSCurve
848 optional double jerk_percent = 5;
849
850 // Final velocity. 0.0 is default. (UserUnits/second)
851 // If specified, velocity, acceleration, and deceleration must be specified.
852 optional double final_velocity = 6;
853
854 // Set true if you intend position to be a relative increment. If specified, jerk_percent must be specified.
855 bool relative = 7;
856}
857
858message AxisMoveVelocity {
859 // Move at this velocity. (UserUnits/second)
860 double velocity = 1;
861
862 // Maximum acceleration. (UserUnits/second^2)
863 double acceleration = 2;
864
865 // Percentage of acceleration that will be smoothed. (0-100)
866 // Acceleration time will not change so if Jerk Percent is 100, maximum acceleration will be 2x the specified maximum.
867 // A non-zero value uses MoveVelocitySCurve
868 double jerk_percent = 3;
869}
870
871message MoveStreaming {
872 repeated double positions = 1;
873 repeated double velocities = 2;
874 repeated double accelerations = 3;
875 repeated double jerks = 4;
876 repeated double times = 5;
877 int32 empty_count = 6;
878 bool retain = 7;
879 bool final = 8;
880
881 // Specify the interpolation algorithm to use when only providing positions and no velocities nor accelerations.
882 // Uses the RapidCode method RapidCodeMotion::MovePT()
883 // The three currently supported ones are:
884 // RSIMotionTypePT (no interpolation)
885 // RSIMotionTypeBSPLINE (default)
886 // RSIMotionTypePVT is used in the RapidCode method RapidCodeMotion::MovePVT(), i.e. when positions and velocities are given.
887 optional RSIMotionType pt_motion_type = 9;
888
889 // Feedforward values for PTF/PVTF motion. When present and matching positions size:
890 // - With velocities: uses MovePVTF()
891 // - Without velocities: uses MovePTF()
892 repeated double feedforwards = 10;
893}
895
896message MotionHoldGate{
897 int32 number = 1;
898}
899
900message MotionHoldAxis {
901 // If true, motion will hold for Actual Position. If false, it will hold for Command Position.
902 bool actual = 1;
903
904 // Greater than, less than, etc.
905 RSIUserLimitLogic logic = 2;
906
907 // The number of the Axis whose position we're waiting for.
908 int32 hold_axis_number = 3;
909
910 // The position of the hold axis which will trigger the hold to finish.
911 double hold_axis_position = 4;
912}
913
914message MotionHoldUser {
915 // The 64-bit host address on the server.
916 uint64 address = 1;
917
918 // The 32-bit mask that will be ANDed with the value stored at the User Address.
919 int32 mask = 2;
920
921 // The 32-bit mask that will compared for equality after the AND mask.
922 int32 pattern = 3;
923}
924
925message MotionHold {
926 // Choose the type of hold.
927 oneof type {
928 MotionHoldGate gate = 2;
929 MotionHoldAxis axis = 3;
930 MotionHoldUser user = 4;
931 }
932
933 // The motion will execute regardless of hold status after this amount of time.
934 optional double hold_timeout_seconds = 6;
935
936 // This optional delay will occur before motion starts.
937 optional double delay_seconds = 7;
938}
939
941message AxisConfig {
942 // The number of encoder counts to UserUnits.
943 optional double user_units = 1;
944
945 // The origin position, typically set when homing.
946 optional double origin_position = 2;
947
948 // Give the Axis a name, if you like.
949 optional string user_label = 3;
950
951 // Default trajectory values.
952 optional TrajectoryDefaults defaults = 4;
953 optional HardwareTrigger amp_fault = 5;
954 optional HardwareTrigger home_switch = 6;
955 optional ErrorLimit error_limit = 7;
956 optional HardwareTrigger hardware_negative_limit = 8;
957 optional HardwareTrigger hardware_positive_limit = 9;
958 optional SoftwareTrigger software_negative_limit = 10;
959 optional SoftwareTrigger software_positive_limit = 11;
960 optional Settling settling = 12;
961 optional MotionConfig motion = 13;
962 optional Homing homing = 14;
963 optional int32 frame_buffer_size = 15;
964 optional RSIMotorDisableAction amp_disable_action = 16;
965 optional double feed_rate = 17;
966
967 // Internal messages.
968 message TrajectoryDefaults
969 {
970 optional double velocity = 1;
971 optional double acceleration = 2;
972 optional double deceleration = 3;
973 optional double jerk_percent = 4;
974 optional double position1 = 5;
975 optional double position2 = 6;
976 optional double relative_increment = 7;
977 }
978
979 message HardwareTrigger {
980 optional RSIAction action = 1;
981 optional bool trigger_state = 2;
982 optional double duration = 3;
983 }
984
985 message SoftwareTrigger {
986 optional RSIAction action = 1;
987 optional double trigger_value = 2;
988 }
989
990 message ErrorLimit {
991 optional RSIAction action = 1;
992 optional double trigger_value = 2;
993 optional double duration = 3;
994 }
995
996 message Settling {
997 optional double position_tolerance_fine = 1;
998 optional double position_tolerance_coarse = 2;
999 optional double velocity_tolerance = 3;
1000 optional double time_seconds = 4;
1001 optional bool on_stop = 5;
1002 optional bool on_estop = 6;
1003 optional bool on_estop_cmd_equals_actual = 7;
1004 }
1005
1006 message MotionConfig {
1007 // Seconds.
1008 optional double stop_time = 1;
1009
1010 // Seconds.
1011 optional double estop_time = 2;
1012
1013 // UserUnits per second.
1014 optional double triggered_modify_deceleration = 3;
1015
1016 // Jerk percent (0-100).
1017 optional double triggered_modify_jerk_percent = 4;
1018
1019 // UserUnits per second.
1020 optional double estop_modify_deceleration = 5;
1021
1022 // Jerk percent (0-100).
1023 optional double estop_modify_jerk_percent = 6;
1024 }
1025 message Homing {
1026 // placeholder for possible future homing configuration. see Action for Home configuration.
1027 }
1028}
1030
1032message AxisInfo {
1033 // Axis index.
1034 int32 index = 1;
1035
1036 // Host and firmware addresses
1037 repeated AddressInfo addresses = 2;
1038
1039 // NetworkNode information.
1040 NetworkNodeInfo node_info = 3;
1041
1042 // Constants from the Axis object
1043 Constants constants = 4;
1044
1045 // The internal motion supervisor index
1046 int32 motion_supervisor_index = 5;
1047
1048 // The drive index of this axis relative to its network node.
1049 // For single-axis drives this is always 0.
1050 int32 drive_index = 6;
1051
1052 // Resolved global network PDO indexes for this axis. One entry per
1053 // RSINetworkIndexType that resolves to a valid index on this drive.
1054 // Entries whose resolved value equals Constants.network_index_invalid
1055 // are omitted: absence means the PDO is not mapped on this drive.
1056 // Equivalent to Axis.NetworkIndexGet() in the C++/C# API.
1057 // Static after network start.
1058 repeated AxisNetworkIndex network_indexes = 7;
1059
1060 message Constants {
1061 // The value returned by NetworkIndexGet() when the index is invalid or nonexistent for this Axis.
1062 uint32 network_index_invalid = 1;
1063
1064 // The default time an Axis waits before generating an AmpFault if the Axis does not enable after calling AmpEnableSet(true).
1065 double amp_enable_amp_fault_timeout_seconds_default = 2;
1066 }
1067}
1069
1070// A resolved global network PDO index for an axis. Used by both
1071// AxisInfo.network_indexes (read) and AxisAction.network_index_sets (write).
1072// Named AxisNetworkIndex rather than NetworkIndex to keep the axis-scoped
1073// meaning explicit at top-level scope.
1074message AxisNetworkIndex {
1075 RSINetworkIndexType type = 1;
1076 int32 index = 2;
1077}
1078
1080message MultiAxisRequest {
1081 // Common request header
1082 RSI.RapidServer.RequestHeader header = 1;
1083
1084 // MultiAxis index
1085 int32 index = 2;
1086
1087 optional MultiAxisConfig config = 3;
1088 optional MultiAxisAction action = 4;
1089}
1091
1093message MultiAxisResponse {
1094 // Common response header. Always check the response header for errors.
1095 RSI.RapidServer.ResponseHeader header = 1;
1096
1097 // MultiAxis index
1098 int32 index = 2;
1099
1100 optional MultiAxisConfig config = 3;
1101 optional MultiAxisAction action = 4;
1102 optional MultiAxisInfo info = 5;
1103 optional MultiAxisStatus status = 6;
1104}
1106
1108message MultiAxisBatchRequest {
1109 // Common request header
1110 RSI.RapidServer.RequestHeader header = 1;
1111
1112 repeated MultiAxisRequest requests = 2;
1113}
1114
1115message MultiAxisBatchResponse {
1116 // Common response header. Always check the response header for errors.
1117 RSI.RapidServer.ResponseHeader header = 1;
1118
1119 repeated MultiAxisResponse responses = 2;
1120}
1122
1123
1125message MultiAxisStatus {
1126 RSIState state = 1;
1127 RSISource source = 2;
1128 string source_name = 3;
1129 bool amp_enabled = 4;
1130 MotionStatusBits motion_status_bits = 5;
1131 repeated AxisStatus axis_statuses = 6;
1132 bool is_mapped = 7;
1133
1134 message MotionStatusBits {
1135 bool done = 1;
1136 bool start = 2;
1137 bool modify = 3;
1138 bool at_velocity = 4;
1139 bool out_of_frames = 5;
1140 }
1141}
1143
1145message MultiAxisAction {
1146 optional Abort abort = 1;
1147 optional EStopAbort e_stop_abort = 2;
1148 optional EStopModifyAbort e_stop_modify_abort = 3;
1149 optional EStopModify e_stop_modify = 4;
1150 optional EStop e_stop = 5;
1151 optional TriggeredModify triggered_modify = 6;
1152 optional Stop stop = 7;
1153 optional Resume resume = 8;
1154
1155 optional ClearFaults clear_faults = 9;
1156 optional AmpEnable amp_enable = 10;
1157 optional AmpDisable amp_disable = 11;
1158 optional Move move = 12;
1159 optional RemoveAxes remove_axes = 13;
1160 optional Unmap unmap = 14;
1161 optional Map map = 15;
1162 optional AxisAdd axis_add = 16;
1163
1164 message Abort {}
1165 message EStopAbort {}
1166 message EStopModifyAbort{}
1167 message EStopModify{}
1168 message EStop {}
1169 message TriggeredModify {}
1170 message Stop {}
1171 message Resume {}
1172
1173 message ClearFaults {}
1174
1175 message AmpEnable {
1176 optional int32 timeout_milliseconds = 1;
1177 optional int32 duration = 2; // read-only how long did it take to enable? only set if you specify a timeout to wait for AMP_ACTIVE
1178 optional bool override_restricted_state = 3; // if true, allows potentially dangerous enabling of an Amplifier even if it's in MOVING, STOPPING or STOPPED state
1179 }
1180 message AmpDisable {}
1181
1182 message Move {
1183 oneof move {
1184 MultiAxisMovePointToPoint point_to_point = 3;
1185 MultiAxisMoveVelocity velocity = 4;
1186 MoveStreaming streaming = 5;
1187 }
1188 optional uint32 motion_id = 6;
1189
1190 // Specify MotionHold criteria, if you want the motion to hold execution until conditions are met.
1191 optional MotionHold motion_hold = 7;
1192
1193 bool blocking = 8;
1194
1195 message MultiAxisMovePointToPoint {
1196 repeated AxisMovePointToPoint axis_move_point_to_points = 1;
1197 bool relative = 2;
1198 }
1199
1200 message MultiAxisMoveVelocity {
1201 repeated AxisMoveVelocity axis_move_velocities = 1;
1202 }
1203 }
1204 message RemoveAxes {}
1205 message Unmap {}
1206 message Map {}
1207 message AxisAdd {
1208 int32 axis_index = 1;
1209 }
1210}
1212
1214message MultiAxisConfig {
1215 repeated int32 axes_indices = 1;
1216 optional string user_label = 2;
1217 optional double feed_rate = 3;
1218 optional double stop_time = 4;
1219 optional double e_stop_time = 5;
1220}
1222
1224message MultiAxisInfo {
1225 // The zero-based index for this MultiAxis.
1226 int32 index = 1;
1227
1228 // The internal motion supervisor index.
1229 int32 motion_supervisor_index = 2;
1230
1231 // Host and firmware addresses
1232 repeated AddressInfo addresses = 3;
1233}
1235
1237message NetworkNodeInfo {
1238 // True if hardware exists.
1239 bool exists = 1;
1240
1241 // The node index.
1242 int32 index = 2;
1243
1244 // The number of Axis objects on this node.
1245 int32 axis_count = 3;
1246
1247 // True if this node has I/O.
1248 bool has_io = 4;
1249
1250 // The number of digital/analog inputs and outputs on this node.
1251 IOCounts io_counts = 5;
1252
1253 // The bit masks and 64-bit host addresses for this node's I/O.
1254 IOAddresses io_addresses = 6;
1255
1256 // The node type.
1257 RSINodeType type = 7;
1258
1259 // 32-bit vendor identifier.
1260 uint32 vendor_id = 8;
1261
1262 // 32-bit product code.
1263 uint32 product_code = 9;
1264
1265 // 32-bit hardware revision.
1266 uint32 hardware_revision = 10;
1267
1268 // Station alias.
1269 uint32 station_alias = 11;
1270
1271 // Serial number.
1272 string serial_number = 12;
1273
1274 // The node's name.
1275 string name = 13;
1276
1277 // Product name.
1278 string product_name = 14;
1279
1280 // Vendor name.
1281 string vendor_name = 15;
1282
1283 Constants constants = 16;
1284
1285 // The global network PDO indexes for this node's I/O channels.
1286 IONetworkIndexes io_network_indexes = 17;
1287
1288 // The 64-bit host addresses (and data types) for this node's recordable status
1289 // values, one entry per RSINetworkNodeAddressType. Empty when the node does not exist
1290 // (see exists). Use with the Recorder service.
1291 repeated AddressInfo addresses = 18;
1292
1293 // True if the node identity supports the Kollmorgen 0x2028 ASCII channel.
1294 bool is_akd_ascii_command_supported = 19;
1295
1296
1297 // Internal messages.
1298
1299 // The number of digital/analog inputs and outputs.
1300 message IOCounts {
1301 // Number of digital inputs.
1302 int32 digital_inputs = 1;
1303
1304 // Number of digital outputs.
1305 int32 digital_outputs = 2;
1306
1307 // Number of analog inputs.
1308 int32 analog_inputs = 3;
1309
1310 // Number of analog outputs.
1311 int32 analog_outputs = 4;
1312 }
1313
1314 message IOAddresses {
1315 // Masks and 64-bit host addresses for each digital input.
1316 repeated AddressInfo digital_inputs = 1;
1317
1318 // Masks and 64-bit host addresses for each digital output.
1319 repeated AddressInfo digital_outputs = 2;
1320
1321 // Masks and 64-bit host addresses for each analog input.
1322 repeated AddressInfo analog_inputs = 3;
1323
1324 // Masks and 64-bit host addresses for each analog output.
1325 repeated AddressInfo analog_outputs = 4;
1326 }
1327
1328 message IONetworkIndexes {
1329 // Global network input index for each digital input.
1330 repeated int32 digital_inputs = 1;
1331
1332 // Global network output index for each digital output.
1333 repeated int32 digital_outputs = 2;
1334
1335 // Global network input index for each analog input.
1336 repeated int32 analog_inputs = 3;
1337
1338 // Global network output index for each analog output.
1339 repeated int32 analog_outputs = 4;
1340 }
1341
1342 message Constants {
1343 // Default time to wait when reading or writing an SDO with ServiceChannelRead() or ServiceChannelWrite()
1344 uint32 sdo_timeout_milliseconds_default = 1;
1345
1346 // Maximum characters in a node or I/O point user label (64).
1347 uint32 user_label_character_count_maximum = 2;
1348
1349 // Size in bytes of the controller-wide shared buffer that stores I/O point user labels (65536).
1350 uint32 io_user_label_buffer_bytes = 3;
1351 }
1352}
1354
1356message NetworkNodeStatus {
1357 // All the digital input states.
1358 repeated bool digital_input_states = 2;
1359
1360 // All the digital output states.
1361 repeated bool digital_output_states = 3;
1362
1363 // All the analog input values.
1364 repeated int32 analog_input_values = 4;
1365
1366 // All the analog output values.
1367 repeated int32 analog_output_values = 5;
1368
1369 // EtherCAT AL Status register (0x0130). Bits 0-3: state (1=Init, 2=PreOp, 4=SafeOp, 8=Op).
1370 uint32 al_status = 6;
1371 // EtherCAT AL Status Code register. Non-zero indicates an error condition.
1372 uint32 al_status_code = 7;
1373 // CANopen over EtherCAT (CoE) emergency message (8 bytes per CiA 301).
1374 uint64 coe_emergency_message = 8;
1375 // Network counter when CoeEmergencyMessage was received.
1376 int32 coe_emergency_message_network_counter = 9;
1377 // Cumulative EoE (Ethernet over EtherCAT) frames sent host->this node since network start.
1378 uint64 eoe_host_to_node_frame_count = 10;
1379 // Cumulative EoE frames received this node->host since network start.
1380 uint64 eoe_node_to_host_frame_count = 11;
1381 // The sync group this node is assigned to.
1382 uint32 sync_group_id = 12;
1383 // True if the node is currently present on the network.
1384 bool present = 13;
1385 // How far this node has progressed through network startup. General node
1386 // lifecycle state: use it to judge the validity of any state-dependent node
1387 // data (identity fields like serial number and vendor ID, I/O counts, etc.).
1388 // For labels specifically: the node's user_label requires at least
1389 // DISCOVERED; per-I/O-point labels require CONFIGURED.
1390 RSINetworkNodeInitializationState initialization_state = 14;
1391 // Advances whenever an I/O point user label is written on any node. 0 until the
1392 // first I/O label write. The node's own user_label does NOT advance it.
1393 uint64 io_user_label_generation = 15;
1394 // Cumulative service channel reads the network firmware serviced for this node since
1395 // network start: CoE SDO (service data object) uploads and also EtherCAT register
1396 // reads (index below 0x1000), which skip the mailbox but use the same service
1397 // channel thread.
1398 uint64 sdo_read_count = 16;
1399 // Cumulative service channel reads for this node that finished unsuccessfully (could not
1400 // be issued, SDO abort or other error status, or the firmware's completion wait ran out
1401 // with no response) since network start. That wait outlasts the host call's timeout, so
1402 // the failure can be counted a second or more after the call already timed out.
1403 uint64 sdo_read_fail_count = 17;
1404 // Cumulative service channel writes the network firmware serviced for this node since
1405 // network start: CoE SDO (service data object) downloads and also EtherCAT register
1406 // writes (index below 0x1000), which skip the mailbox but use the same service
1407 // channel thread.
1408 uint64 sdo_write_count = 18;
1409 // Cumulative service channel writes for this node that finished unsuccessfully (could not
1410 // be issued, SDO abort or other error status, or the firmware's completion wait ran out
1411 // with no response) since network start. That wait outlasts the host call's timeout, so
1412 // the failure can be counted a second or more after the call already timed out. Register
1413 // writes (index below 0x1000) are fire and forget and never count as failures.
1414 uint64 sdo_write_fail_count = 19;
1415 // Cumulative Kollmorgen AKD ASCII commands the network firmware serviced for this node since network start.
1416 // Only the nodes where IsAKDASCIICommandSupported() is true accept AKDASCIICommand, so this and
1417 // akd_ascii_fail_count stay 0 elsewhere. A command whose host call timed out before the firmware
1418 // reached it is withdrawn and never counted, so a starved node can show fewer commands than the
1419 // application sent.
1420 uint64 akd_ascii_count = 20;
1421 // Cumulative AKD ASCII commands for this node that failed to send or got no usable response since network start.
1422 uint64 akd_ascii_fail_count = 21;
1423}
1425
1426
1428// The state of the digital output at the specified bit number.
1429message DigitalOutput {
1430 // The bit number.
1431 int32 bit_number = 1;
1432
1433 // The state of the digital output. When this message is used as a request
1434 // to set a digital output, the digital output will be set to this value.
1435 // When this message is returned as an action response, this field holds the
1436 // new state.
1437 bool state = 2;
1438}
1439
1440// The value of the analog output at the specified channel.
1441message AnalogOutput {
1442 // The channel number.
1443 int32 channel = 1;
1444
1445 // The value of the analog output. When this message is used as a request
1446 // to set an analog output, the analog output will be set to this value.
1447 // When this message is returned as an action response, this field holds the
1448 // new value.
1449 int32 value = 2;
1450}
1451
1452// The location, size, and value of a Service Data Object (SDO).
1453// This message is used to read or write SDOs on a network node.
1454// See NetworkNodeAction sdo_writes and sdo_reads.
1455message SDO {
1456 // The SDO index.
1457 int32 index = 1;
1458
1459 // The SDO sub-index.
1460 int32 sub_index = 2;
1461
1462 // The number of bytes.
1463 int32 byte_count = 3;
1464
1465 // The types of data values we can read or write.
1466 enum ValueType {
1467 option allow_alias = true;
1468 UNKNOWN = 0;
1469 INTEGER = 0;
1470 STRING = 1;
1471 BYTES = 2;
1472 }
1473
1474 // When reading an SDO, specify the read type. Default is integer.
1475 optional ValueType read_type = 4;
1476
1477 // Wait this long for a response, otherwise it will throw a timeout error.
1478 optional uint32 timeout_milliseconds = 5;
1479
1480 // The SDO value.
1481 // SDO write: This field is used to set the value to write.
1482 // SDO read: This field is ignored when SDO read action request, but will contain the
1483 // value read from the SDO in the SDO read action response.
1484 oneof value {
1485 // Integer value used for all non-string types.
1486 int32 integer_value = 6;
1487
1488 // String value.
1489 string string_value = 7;
1490
1491 // Raw bytes value
1492 bytes bytes_value = 8;
1493 }
1494}
1495
1496// An ASCII command to execute on an AKD drive.
1497message AKDASCII {
1498 // The command as a string.
1499 string command = 1;
1500
1501 // The returned result of the command. This field is ignored when requesting
1502 // an AKDASCII command.
1503 optional string result = 2;
1504}
1505
1506// A set of actions to perform on a network node. This message is used to
1507// request a set of actions. A new instance of this message will be returned
1508// containing the results of the requested acitons.
1509message NetworkNodeAction {
1510
1511 // Any number of digital outputs to set. Add instances of the DigitalOutput
1512 // message to this field to set digital outputs. When this message is
1513 // returned in the action response, this field contains the new states of
1514 // the digital outputs.
1515 repeated DigitalOutput digital_output_sets = 1;
1516
1517 // Any number of analog outputs to set. Add instances of the AnalogOutput
1518 // message to this field to set analog outputs. When this message is
1519 // returned in the action response, this field contains the new values of
1520 // the analog outputs.
1521 repeated AnalogOutput analog_output_sets = 2;
1522
1523 // The requested SDO value(s) to write to the network. Add instances of the
1524 // SDO message to this field to write to SDOs. When this message is returned
1525 // in the action response, this field will be empty.
1526 repeated SDO sdo_writes = 3;
1527
1528 // The SDO(s) to be read from the network. Add instances of the SDO message
1529 // to this field to read SDO values. When this message is returned in the
1530 // action response, the SDO messages will contain the read values.
1531 repeated SDO sdo_reads = 4;
1532
1533 // AKD ASCII command(s). Only used for Kollmorgen AKD drives. Add instances
1534 // of the AKDASCII message to request an ASCII command. When this message
1535 // is returned in the action response, the AKDASCII messages will contain
1536 // both the command executed and the returned result as a string.
1537 repeated AKDASCII akd_asciis = 5;
1538}
1540
1542message NetworkNodeConfig {
1543 // A user label for a single I/O point on this node.
1544 message IOUserLabel {
1545 // The zero-based bit number (digital) or channel number (analog).
1546 int32 index = 1;
1547
1548 // The label. At most Constants.user_label_character_count_maximum characters.
1549 // An empty string clears the label.
1550 string label = 2;
1551 }
1552
1553 // Human-readable name for this node. On set: only written when this field is
1554 // present; an empty string clears the label. On get: only populated when the
1555 // node's initialization state is at least DISCOVERED.
1556 optional string user_label = 1;
1557
1558 // Per-I/O-point user labels.
1559 // On set: SPARSE - only the entries provided are written; unspecified channels
1560 // are untouched. An entry with an empty label clears that channel's label.
1561 // Requires initialization state CONFIGURED. Entries are written in order until
1562 // the first invalid entry; that single error is reported in the response header
1563 // and the remaining entries (and any Action in the request) are not processed.
1564 // On get: FULL - one entry per channel, index 0..count-1, in order; channels
1565 // without a label have an empty label string. Empty lists when the node's
1566 // initialization state is not CONFIGURED.
1567 repeated IOUserLabel digital_input_user_labels = 2;
1568 repeated IOUserLabel digital_output_user_labels = 3;
1569 repeated IOUserLabel analog_input_user_labels = 4;
1570 repeated IOUserLabel analog_output_user_labels = 5;
1571}
1573
1575message NetworkNodeRequest {
1576 // Common request header
1577 RSI.RapidServer.RequestHeader header = 1;
1578
1579 // Network Node index
1580 int32 index = 2;
1581
1582 optional NetworkNodeConfig config = 3;
1583 optional NetworkNodeAction action = 4;
1584}
1586
1588message NetworkNodeResponse {
1589 // Common response header. Always check the response header for errors.
1590 RSI.RapidServer.ResponseHeader header = 1;
1591
1592 // Network Node index
1593 int32 index = 2;
1594
1595 optional NetworkNodeConfig config = 3;
1596 optional NetworkNodeAction action = 4;
1597 optional NetworkNodeInfo info = 5;
1598 optional NetworkNodeStatus status = 6;
1599}
1601
1603message NetworkNodeBatchRequest {
1604 // Common request header
1605 RSI.RapidServer.RequestHeader header = 1;
1606
1607 repeated NetworkNodeRequest requests = 2;
1608}
1609
1610message NetworkNodeBatchResponse {
1611 // Common response header. Always check the response header for errors.
1612 RSI.RapidServer.ResponseHeader header = 1;
1613
1614 repeated NetworkNodeResponse responses = 2;
1615}
1617
1618
1620message RecorderRequest {
1621 // Common request header.
1622 RSI.RapidServer.RequestHeader header = 1;
1623
1624 // The Recorder index. (Check MotionController's Recorder count.)
1625 int32 index = 2;
1626
1627 optional RecorderConfig config = 3;
1628 optional RecorderAction action = 4;
1629}
1631
1632
1634message RecorderResponse {
1635 // Common response header. Always check the response header for errors.
1636 RSI.RapidServer.ResponseHeader header = 1;
1637
1638 // Recorder index
1639 int32 index = 2;
1640
1641 optional RecorderConfig config = 3;
1642 optional RecorderAction action = 4;
1643 optional RecorderInfo info = 5;
1644 optional RecorderStatus status = 6;
1645}
1647
1649message RecorderBatchRequest {
1650 // Common request header
1651 RSI.RapidServer.RequestHeader header = 1;
1652
1653 repeated RecorderRequest requests = 2;
1654}
1655
1656message RecorderBatchResponse {
1657 // Common response header. Always check the response header for errors.
1658 RSI.RapidServer.ResponseHeader header = 1;
1659
1660 repeated RecorderResponse responses = 2;
1661}
1663
1664
1666message RecorderInfo { }
1668
1670message RecorderStatus {
1671 // Is the Recorder recording?
1672 bool is_recording = 1;
1673
1674 // The number of records available for retrieval.
1675 int32 records_available = 2;
1676}
1678
1680message RecorderAction {
1681
1682 optional Reset reset = 1;
1683 optional Start start = 2;
1684 optional Stop stop = 3;
1685 optional RetrieveRecords retrieve_records = 4;
1686
1687 message Reset {}
1688 message Start {}
1689 message Stop {}
1690
1691 message RetrieveRecords {
1692 // New data records will be in the response, if any are available.
1693 repeated Record records = 1;
1694
1695 // A data record from the recorder.
1696 message Record {
1697 // The number of these will depend on the number of addresses to record in the recorder configuration.
1698 repeated FirmwareValue data = 1;
1699 }
1700 }
1701}
1703
1704
1706message RecorderConfig {
1707 // Recorder period, in samples.
1708 optional int32 period = 1;
1709
1710 // If true, the recorder will use a circular buffer, overwriting old data (be sure to read it out).
1711 optional bool circular_buffer = 2;
1712
1713 // The addresses to record. Get these from Controller/Axis/MultiAxis InfoGet rpcs.
1714 repeated AddressInfo addresses = 3;
1715
1716 // Use this to start and end recording with motion.
1717 optional RecorderTriggerOnMotion trigger_on_motion = 4;
1718
1719 // Configure the recorder to generate a RECORDER_HIGH interrupt when the buffer reaches this size.
1720 optional int32 buffer_high_count = 5;
1721
1722 // Read-only, this tells us how many records fit inside the recorder's buffer (see MotionController config's recorder buffer size).
1723 optional int32 record_max_count = 6;
1724
1725 // Internal messages.
1726
1727 message RecorderTriggerOnMotion {
1728 // Use an Axis or MutliAxis's motion supervisor index.
1729 optional int32 motion_supervisor_index = 1;
1730 // Set true if you want the recorder to start when motion starts and stop when motion is done.
1731 optional bool enable = 2;
1732 }
1733}
1734
1736
1738message UserLimitStatus {
1739 // The UserLimit's index.
1740 int32 index = 1;
1741
1742 // Is the UserLimit processing in the RMP firmware_version?
1743 bool enabled = 2;
1744
1745 // Is the UserLimit currently triggered?
1746 bool state = 3;
1747}
1749
1751message UserLimitAction {
1752
1753 optional Reset reset = 1;
1754 optional Enable enable = 2;
1755 optional Disable disable = 3;
1756
1757 message Reset {};
1758 message Enable {};
1759 message Disable {};
1760}
1762
1763
1765message UserLimitInfo {}
1767
1768
1770message UserLimitConfig {
1771
1772 // The type of trigger.
1773 optional RSIUserLimitTriggerType trigger_type = 1;
1774
1775 // The primary condition.
1776 optional UserLimitCondition condition_0 = 2;
1777
1778 // The second condition. Condition 1 will not be set if trigger type is SINGLE_CONDITION or invalid
1779 optional UserLimitCondition condition_1 = 3;
1780
1781 // Optionally set some output when the UserLimit triggers.
1782 optional UserLimitOutput output = 4;
1783
1784 // Optionally perform an action on an Axis when the UserLimit triggers.
1785 optional RSIAction action = 5;
1786
1787 // Perform the optional action on this Axis.
1788 optional int32 action_axis = 6;
1789
1790 // Duration the trigger state must be active before triggering. (Seconds)
1791 optional double duration = 7;
1792
1793 // True if the UserLimit should trigger once, then disable itself.
1794 optional bool is_single_shot = 8;
1795
1796 // Configurable interrupt data.
1797 repeated UserLimitInterruptUserData user_data = 9;
1798
1799 // Internal messages.
1800 message UserLimitCondition {
1801 // The data type to be evaluated.
1802 RSIDataType data_type = 1;
1803
1804 // The logic of the UserLimit.
1805 RSIUserLimitLogic logic = 2;
1806
1807 // A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
1808 uint64 address = 3;
1809
1810 // A 32-bit AND mask.
1811 optional uint32 mask = 4;
1812
1813 // The 32-bit trigger value. (for 32-bit data types)
1814 optional int32 integer_limit_value = 5;
1815
1816 // The 64-bit double trigger value (for 64-bit doubles data types only).
1817 optional double double_limit_value = 6;
1818 }
1819
1820 message UInt32Masks {
1821 // 32-bit AND mask.
1822 uint32 and_mask = 1;
1823
1824 // 32-bit OR mask.
1825 uint32 or_mask = 2;
1826 }
1827
1828 message UInt64Masks {
1829 // 64-bit AND mask.
1830 uint64 and_mask = 1;
1831
1832 // 64-bit OR mask;
1833 uint64 or_mask = 2;
1834 }
1835
1836 message UserLimitOutput {
1837 // True if enabled
1838 bool enabled = 2;
1839
1840 // The type of data to output.
1841 RSIDataType data_type = 3;
1842
1843 // A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
1844 uint64 address = 4;
1845
1846 // The type of output.
1847 oneof output {
1848 // Perform an AND and OR on a 64-bit value.
1849 UInt32Masks uint32_masks = 6;
1850
1851 // Output a 32-bit value.
1852 int32 int32_value = 7;
1853
1854 // Perform an AND and OR on a 64-bit value.
1855 UInt64Masks uint64_masks = 8;
1856
1857 // Output a 64-bit double.
1858 double double_value = 9;
1859
1860 // A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
1861 // Use this field when you want the UserLimit to copy data from the input address to the output address.
1862 uint64 input_address = 10;
1863 }
1864 }
1865
1866 message UserLimitInterruptUserData {
1867 // Interrupt data index (0-4).
1868 uint32 index = 1;
1869
1870 // A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
1871 optional uint64 address = 2;
1872 }
1873}
1875
1877message UserLimitRequest {
1878 // Common request header.
1879 RSI.RapidServer.RequestHeader header = 1;
1880
1881 // UserLimit index.
1882 int32 index = 2;
1883
1884 optional UserLimitConfig config = 3;
1885
1886 optional UserLimitAction action = 4;
1887}
1889
1891message UserLimitResponse {
1892 // Common response header. Always check the response header for errors.
1893 RSI.RapidServer.ResponseHeader header = 1;
1894
1895 // UserLimit index.
1896 int32 index = 2;
1897
1898 optional UserLimitConfig config = 3;
1899 optional UserLimitAction action = 4;
1900 optional UserLimitInfo info = 5;
1901 optional UserLimitStatus status = 6;
1902}
1904
1906message UserLimitBatchRequest {
1907 // Common request header.
1908 RSI.RapidServer.RequestHeader header = 1;
1909
1910 repeated UserLimitRequest requests = 2;
1911}
1912
1913message UserLimitBatchResponse {
1914 // Common response header. Always check the response header for errors.
1915 RSI.RapidServer.ResponseHeader header = 1;
1916
1917 repeated UserLimitResponse responses = 2;
1918}
1920
1922message MathBlockConfig {
1923 // Host memory address for Input0 (left-hand operand).
1924 optional uint64 input_address_0 = 1;
1925
1926 // Data type for Input0.
1927 optional RSIDataType input_data_type_0 = 2;
1928
1929 // Host memory address for Input1 (right-hand operand).
1930 optional uint64 input_address_1 = 3;
1931
1932 // Data type for Input1.
1933 optional RSIDataType input_data_type_1 = 4;
1934
1935 // Data type for Output. (optional output)
1936 optional RSIDataType output_data_type = 5;
1937
1938 // Host memory address for Output. Set to 0 to disable.
1939 optional uint64 output_address = 6;
1940
1941 // Data type for processing / process value.
1942 optional RSIDataType process_data_type = 7;
1943
1944 // Math operation to perform. Use NONE to disable.
1945 optional RSIMathBlockOperation operation = 8;
1946}
1948
1950message MathBlockAction {
1951 // Get the current process value of the MathBlock.
1952 optional ProcessValueGet process_value_get = 1;
1953
1954 message ProcessValueGet {
1955 // The process value result. (response only)
1956 optional FirmwareValue value = 1;
1957 }
1958}
1960
1962message MathBlockInfo {
1963 // Process value host address (use with Recorder or UserLimit).
1964 optional uint64 process_value_host_address = 1;
1965
1966 // Process value firmware address.
1967 optional uint64 process_value_firmware_address = 2;
1968
1969 // Process value data type (matches Config.process_data_type but available even with skip_config).
1970 optional RSIDataType process_value_data_type = 3;
1971}
1973
1975message MathBlockStatus {
1976 // The MathBlock's index.
1977 int32 index = 1;
1978
1979 // Current process value of the MathBlock (changes every sample).
1980 optional FirmwareValue process_value = 2;
1981}
1983
1985message MathBlockRequest {
1986 // Common request header.
1987 RSI.RapidServer.RequestHeader header = 1;
1988
1989 // MathBlock index.
1990 int32 index = 2;
1991
1992 optional MathBlockConfig config = 3;
1993 optional MathBlockAction action = 4;
1994}
1996
1998message MathBlockResponse {
1999 // Common response header. Always check the response header for errors.
2000 RSI.RapidServer.ResponseHeader header = 1;
2001
2002 // MathBlock index.
2003 int32 index = 2;
2004
2005 optional MathBlockConfig config = 3;
2006 optional MathBlockAction action = 4;
2007 optional MathBlockInfo info = 5;
2008 optional MathBlockStatus status = 6;
2009}
2011
2013message MathBlockBatchRequest {
2014 // Common request header.
2015 RSI.RapidServer.RequestHeader header = 1;
2016
2017 repeated MathBlockRequest requests = 2;
2018}
2019
2020message MathBlockBatchResponse {
2021 // Common response header. Always check the response header for errors.
2022 RSI.RapidServer.ResponseHeader header = 1;
2023
2024 repeated MathBlockResponse responses = 2;
2025}
2027
2029message RTOSConfig {}
2031
2033message RTOSInfo {
2034 // The RMP process catalog.
2035 string rmp_catalog = 1;
2036
2037 // The RMPNetwork process catalog.
2038 string rmp_network_catalog = 2;
2039
2040 // The number of INtime nodes.
2041 uint32 node_count = 3;
2042}
2044
2046message RTOSAction {
2047 optional Restart restart = 1;
2048 optional Stop stop = 2;
2049 optional Start start = 3;
2050
2051 message Restart {}
2052 message Stop {}
2053 message Start {}
2054}
2056
2058message RTOSStatus {
2059 // The status of the INtime node
2060 INtimeStatus status = 3;
2061}
2063
2065message RTOSRequest {
2066 // Common request header
2067 RSI.RapidServer.RequestHeader header = 1;
2068
2069 // Specify a specific INtime node by name.
2070 string name = 2;
2071
2072 optional RTOSConfig config = 3;
2073 optional RTOSAction action = 4;
2074}
2076
2078message RTOSResponse {
2079 // Common response header. Always check the response header for errors.
2080 RSI.RapidServer.ResponseHeader header = 1;
2081
2082 // Specify a specific INtime node by name.
2083 string name = 2;
2084
2085 optional RTOSConfig config = 3;
2086 optional RTOSAction action = 4;
2087 optional RTOSInfo info = 5;
2088 optional RTOSStatus status = 6;
2089}
2091
2093message RTOSBatchRequest {
2094 // Common request header
2095 RSI.RapidServer.RequestHeader header = 1;
2096
2097 repeated RTOSRequest requests = 2;
2098}
2099
2100message RTOSBatchResponse {
2101 // Common response header. Always check the response header for errors.
2102 RSI.RapidServer.ResponseHeader header = 1;
2103
2104 repeated RTOSResponse responses = 2;
2105}
2107
2109message RTTaskCreationParameters {
2110 // The name of the function to run in the task
2111 string function_name = 1;
2112
2113 // The task functions library directory and name.
2114 optional string library_name = 2;
2115 optional string library_directory = 3;
2116
2117 // The task's user defined label.
2118 optional string user_label = 4;
2119
2120 // The task's priority. 0 is the highest priority, 255 is the lowest.
2121 optional TaskPriority priority = 5;
2122
2123 // Number of times to repeat the task. -1 means infinite.
2124 optional int32 repeats = 6;
2125
2126 // How frequently to run the task in samples
2127 optional int32 period = 7;
2128
2129 // Offset in samples for when to run the task. For example, if the task is set
2130 // to run every 10 samples, and the phase is set to 3, the task will run at
2131 // 3, 13, 23, etc.
2132 optional int32 phase = 8;
2133
2134 // Whether to record execution time metrics for the task.
2135 optional bool enable_timing = 9;
2136}
2138
2140message RTTaskConfig {}
2141
2143
2145message RTTaskAction {
2146 // Stop the task.
2147 optional Stop stop = 1;
2148
2149 // Remove the current task from the task manager
2150 optional Remove remove = 2;
2151
2152 // Reset the timing metrics for the task. (ExecutionTimeMax, Min, Mean, Last)
2153 optional TimingReset timing_reset = 3;
2154
2155 // Wait until the task has executed this many times before returning.
2156 optional ExecutionCountAbsoluteWait execution_count_absolute_wait = 4;
2157
2158 // Wait until the task has executed this many more times before returning.
2159 optional ExecutionCountRelativeWait execution_count_relative_wait = 5;
2160
2161 message Stop {}
2162 message Remove {}
2163 message TimingReset {}
2164
2165 message ExecutionCountAbsoluteWait {
2166 // Wait until the task has executed this many times total.
2167 optional int64 count = 1;
2168
2169 // The maximum time to wait for the task to execute the specified number of times.
2170 optional int32 timeout_ms = 2;
2171 }
2172
2173 message ExecutionCountRelativeWait {
2174 // Wait until the task has executed this many more times from the current count.
2175 optional int64 count = 1;
2176
2177 // The maximum time to wait for the task to execute the specified number of times.
2178 optional int32 timeout_ms = 2;
2179 }
2180}
2182
2184message RTTaskInfo {
2185 // The unique id of the task (not unique across task managers).
2186 int32 id = 1;
2187
2188 // The id of the task manager that created this task.
2189 int32 manager_id = 2;
2190
2191 // Constants related to the RTTask class.
2192 Constants constants = 3;
2193
2194 // The parameters that were used to create the task.
2195 RTTaskCreationParameters creation_parameters = 4;
2196
2197 message Constants {
2198 // Constants related to the RTTask creation parameters.
2199 CreationParameterConstants creation_parameters = 1;
2200
2201 // Constants related to the RTTask status.
2202 StatusConstants status = 2;
2203
2204 message CreationParameterConstants {
2205 // The maximum length of the library directory path.
2206 int32 directory_length_maximum = 1;
2207
2208 // The maximum length of the library name and user label.
2209 int32 name_length_maximum = 2;
2210
2211 // The default library name to use if none is specified.
2212 string library_name_default = 3;
2213
2214 // The default task priority.
2215 int32 priority_default = 4;
2216
2217 // The special value for the repeats field to indicate infinite repeats.
2218 int32 repeat_forever = 5;
2219
2220 // The special value for the repeats field to indicate no repeats.
2221 int32 repeat_none = 6;
2222
2223 // The default period for the task.
2224 int32 period_default = 7;
2225
2226 // The default phase for the task.
2227 int32 phase_default = 8;
2228
2229 // The default value for the enable_timing field.
2230 int32 enable_timing_default = 9;
2231 }
2232
2233 message StatusConstants {
2234 // The special value for the execution count to indicate an invalid count.
2235 int64 invalid_execution_count = 1;
2236
2237 // The special value for the execution time to indicate an invalid time.
2238 uint64 invalid_execution_time = 2;
2239
2240 // The maximum size of the error message.
2241 uint64 error_message_size_maximum = 3;
2242 }
2243 }
2244}
2246
2248message RTTaskStatus {
2249 // The current state of the task (running, waiting, etc.)
2250 RTTaskState state = 1;
2251
2252 // The number of times the task has executed.
2253 optional int64 execution_count = 2;
2254
2255 // The maximum execution time of the task (in nanoseconds).
2256 optional uint64 execution_time_max = 3;
2257
2258 // The minimum execution time of the task (in nanoseconds).
2259 optional uint64 execution_time_min = 4;
2260
2261 // The mean execution time of the task (in nanoseconds).
2262 optional double execution_time_mean = 5;
2263
2264 // The most recent execution time for the task (in nanoseconds).
2265 optional uint64 execution_time_last = 6;
2266
2267 // The time since the task was last started (in nanoseconds).
2268 optional uint64 start_time_delta_last = 7;
2269
2270 // The maximum time difference between the start of one task execution and the next (in nanoseconds).
2271 optional uint64 start_time_delta_max = 8;
2272
2273 // The mean time difference between the start of one task execution and the next (in nanoseconds).
2274 optional double start_time_delta_mean = 9;
2275
2276 // If the task is in an error state, this will contain the error message.
2277 optional string error_message = 10;
2278}
2280
2282message RTTaskRequest {
2283 // Common request header.
2284 RSI.RapidServer.RequestHeader header = 1;
2285
2286 // The id of the task. This is the id assigned to the task when it was created.
2287 int32 id = 2;
2288
2289 // The id of the task manager that the task was submitted to.
2290 int32 manager_id = 3;
2291
2292 optional RTTaskConfig config = 4;
2293 optional RTTaskAction action = 5;
2294}
2296
2298message RTTaskResponse {
2299 // Common response header. Always check the response header for errors.
2300 RSI.RapidServer.ResponseHeader header = 1;
2301
2302 // The id of the task. This is the id assigned to the task when it was created.
2303 int32 id = 2;
2304
2305 // The id of the task manager that the task was submitted to.
2306 int32 manager_id = 3;
2307
2308 optional RTTaskConfig config = 4;
2309 optional RTTaskAction action = 5;
2310 optional RTTaskInfo info = 6;
2311 optional RTTaskStatus status = 7;
2312}
2314
2316message RTTaskBatchRequest {
2317 // Common request header.
2318 RSI.RapidServer.RequestHeader header = 1;
2319
2320 repeated RTTaskRequest requests = 2;
2321}
2322
2323message RTTaskBatchResponse {
2324 // Common response header. Always check the response header for errors.
2325 RSI.RapidServer.ResponseHeader header = 1;
2326
2327 repeated RTTaskResponse responses = 2;
2328}
2330
2332message RTTaskManagerCreationParameters {
2333 // Where the rttaskmanager executable is located (usually the RSI installation directory).
2334 optional string rt_task_directory = 1;
2335
2336 // The platform to run the task manager on. Not needed on Linux. On Windows/INtime,
2337 // use INTIME for real time performance. Only use WINDOWS for debugging.
2338 optional PlatformType platform = 2;
2339
2340 // For INtime managers, the name of the INtime node to run on (usually NodeA).
2341 optional string node_name = 3;
2342
2343 // On Linux, the CPU core to pin the task manager to.
2344 optional int32 cpu_core = 4;
2345
2346 // The task manager's user defined label.
2347 optional string user_label = 5;
2348
2349 // Disable the initialization of the RMP and RapidCode objects on task manager startup and their use in synchronizing task manager cycles.
2350 optional bool no_rmp = 6;
2351}
2353
2355message RTTaskManagerConfig {}
2356
2358
2360message RTTaskManagerAction {
2361 // Start a new task manager.
2362 optional Create create = 1;
2363
2364 // Discover the task managers that are currently running.
2365 optional Discover discover = 2;
2366
2367 // Shutdown the task manager.
2368 optional Shutdown shutdown = 3;
2369
2370 // Submit and start a new task.
2371 optional TaskSubmit task_submit = 4;
2372
2373 // Remove a task from the task manager.
2374 optional TaskRemove task_remove = 5;
2375
2376 // Set the values of global variables
2377 repeated GlobalValueSet global_value_sets = 6;
2378
2379 message Create {
2380 // The task manager's creation parameters.
2381 RTTaskManagerCreationParameters creation_parameters = 1;
2382
2383 // The id of the created task manager.
2384 int32 id = 2; // read-only
2385 }
2386
2387 message Discover {
2388 // The ids of all the task managers that were discoverd
2389 repeated int32 manager_ids = 1; // read-only
2390 }
2391
2392 message Shutdown {}
2393
2394 message TaskSubmit {
2395 // The parameters for the task to create.
2396 RTTaskCreationParameters task_creation_parameters = 1;
2397
2398 // The id of the created task
2399 optional int32 task_id = 2; // read-only
2400 }
2401
2402 message TaskRemove {
2403 // The id of the task to remove.
2404 int32 task_id = 1;
2405 }
2406
2407 message GlobalValueSet {
2408 // The value to set the global variable to. See FirmwareValue for details.
2409 FirmwareValue value = 1;
2410
2411 // The name of the global variable to set.
2412 string name = 2;
2413
2414 // The name and directory of the library that contains the global variable.
2415 // (The task functions library)
2416 optional string library_name = 3;
2417 optional string library_directory = 4;
2418 }
2419}
2421
2423message RTTaskManagerInfo {
2424 // The unique id of the task manager.
2425 int32 id = 1;
2426
2427 // Constants related to the RTTaskManager class.
2428 Constants constants = 2;
2429
2430 // The creation parameters that were used to create the task manager.
2431 RTTaskManagerCreationParameters creation_parameters = 3;
2432
2433 message Constants {
2434 // The maximum number of RTTaskManagers that can be created.
2435 int32 rt_task_manager_count_maximum = 1;
2436
2437 // The maximum number of RTTasks that can be created in a single RTTaskManager.
2438 int32 rt_task_count_maximum = 2;
2439
2440 // The name of the RTTaskManager executable.
2441 string rt_task_manager_executable_name = 3;
2442
2443 // Constants related to the RTTaskManager's creation parameters.
2444 CreationParameterConstants creation_parameters = 4;
2445
2446 message CreationParameterConstants {
2447 // The maximum length of the RTTaskManager's directory name.
2448 int32 directory_length_maximum = 1;
2449
2450 // The maximum length of the RTTaskManager's library name and user label.
2451 int32 name_length_maximum = 2;
2452
2453 // The default user label for the RTTaskManager if none is specified.
2454 string user_label_default = 3;
2455 }
2456 }
2457}
2459
2461message RTTaskManagerStatus {
2462 // The ids of the tasks that are currently registered with the task manager.
2463 // (Includes tasks that are not running.)
2464 repeated int32 task_ids = 1;
2465
2466 // The names and values of the global variables that the task manager has access to.
2467 map<string, FirmwareValue> global_values = 2;
2468
2469 // The state of the RTTaskManager (dead, running, etc.)
2470 optional RTTaskManagerState state = 3;
2471
2472 // The total number of tasks that have been submitted to the task manager (even if they are no longer running).
2473 optional uint64 task_submission_count = 4;
2474
2475 // The number of cycles (iterations) the task manager has run.
2476 optional int64 cycle_count = 5;
2477
2478 // The time it took for the longest cycle to complete (in nanoseconds).
2479 optional uint64 cycle_time_max = 6;
2480
2481 // The time it took for the shortest cycle to complete (in nanoseconds).
2482 optional uint64 cycle_time_min = 7;
2483
2484 // The mean of the cycle times (in nanoseconds).
2485 optional double cycle_time_mean = 8;
2486
2487 // The time it took for the last cycle to complete (in nanoseconds).
2488 optional uint64 cycle_time_last = 9;
2489
2490 // The time since the last cycle started (in nanoseconds).
2491 optional uint64 start_time_delta_last = 10;
2492
2493 // The maximum time difference between the start of one cycle and the next (in nanoseconds).
2494 optional uint64 start_time_delta_max = 11;
2495
2496 // The mean time difference between the start of one cycle and the next (in nanoseconds).
2497 optional double start_time_delta_mean = 12;
2498}
2500
2502message RTTaskManagerRequest {
2503 // Common request header.
2504 RSI.RapidServer.RequestHeader header = 1;
2505
2506 // RTTaskManager id.
2507 optional int32 id = 2; // Required for all actions except Create and Discover.
2508
2509 optional RTTaskManagerConfig config = 3;
2510 optional RTTaskManagerAction action = 4;
2511}
2513
2515message RTTaskManagerResponse {
2516 // Common response header. Always check the response header for errors.
2517 RSI.RapidServer.ResponseHeader header = 1;
2518
2519 // RTTaskManager id.
2520 optional int32 id = 2; // When creating a RTTaskManager, this will be the new RTTaskManager's id.
2521
2522 optional RTTaskManagerConfig config = 3;
2523 optional RTTaskManagerAction action = 4;
2524 optional RTTaskManagerInfo info = 5;
2525 optional RTTaskManagerStatus status = 6;
2526}
2528
2530message RTTaskManagerBatchRequest {
2531 // Common request header.
2532 RSI.RapidServer.RequestHeader header = 1;
2533
2534 repeated RTTaskManagerRequest requests = 2;
2535}
2536
2537message RTTaskManagerBatchResponse {
2538 // Common response header. Always check the response header for errors.
2539 RSI.RapidServer.ResponseHeader header = 1;
2540
2541 repeated RTTaskManagerResponse responses = 2;
2542}
TaskPriority
Enum representing the priority levels for a real-time task.
Definition rttask.h:102
RTTaskManagerState
Enum representing the possible states of an RTTaskManager.
Definition rttask.h:76
RTTaskState
Enum representing the possible states of a real-time task.
Definition rttask.h:64
PlatformType
Enum representing the platform type for an RTTaskManager.
Definition rttask.h:87
RSINetworkEniResult
NetworkEniGenerate return values.
Definition rsienums.h:1634
RSIMathBlockOperation
MathBlock operations.
Definition rsienums.h:1614
RSINetworkStartMode
Network start modes.
Definition rsienums.h:709
RSINetworkNodeInitializationState
How far an EtherCAT node has progressed through network startup.
Definition rsienums.h:645
RSINetworkState
State of network.
Definition rsienums.h:621
RSIControllerAddressType
Used to get firmware address used in User Limits, Recorders, etc.
Definition rsienums.h:405
RSIMotorDisableAction
Action for when a motor is disabled.
Definition rsienums.h:1460
RSIMotionType
PT and PVT streaming motion types.
Definition rsienums.h:1179
RSIDataType
Data types for User Limits and other triggers.
Definition rsienums.h:784
RSIUserLimitLogic
Logic options for User Limits.
Definition rsienums.h:771
RSIAction
Action to perform on an Axis.
Definition rsienums.h:1256
RSIAxisAddressType
Used to get firmware address used in User Limits, Recorders, etc.
Definition rsienums.h:451
RSINetworkInterfaceType
Network host interface type used for EtherCAT frame I/O.
Definition rsienums.h:1526
RSINetworkStartError
Network start errors.
Definition rsienums.h:715
RSIMultiAxisAddressType
Used to get firmware address used in User Limits, Recorders, etc.
Definition rsienums.h:514
RSIUserLimitTriggerType
Trigger types for UserLimits.
Definition rsienums.h:758
INtimeStatus
INtime status values.
Definition rsienums.h:1540
RSIHomeStage
Predefined Homing Stage sections.
Definition rsienums.h:397
RSINetworkType
Type of Network topology.
Definition rsienums.h:751
RSINodeType
Valid Node types.
Definition rsienums.h:804
RSISource
Possible sources that have caused an Error state.
Definition rsienums.h:1151
RSIOperationMode
DS402 modes of operation.
Definition rsienums.h:1472
RSINetworkIndexType
Network PDO index types for configuring axis input/output mappings.
Definition rsienums.h:1573
RSINetworkNodeAddressType
Address types for the dynamic status values of an EtherCAT node, for use with RapidCodeNetworkNode::A...
Definition rsienums.h:665
RSIAxisMasterType
Sources available to a slave Axis for electronic gearing & camming.
Definition rsienums.h:1359