The RMP Motion Controller APIs
UserLimit

RPCs

rpc UserLimit (UserLimitRequest) returns (UserLimitResponse) {};
rpc UserLimitBatch(UserLimitBatchRequest) returns (UserLimitBatchResponse) {};

Request

message UserLimitRequest {
// Common request header.
RSI.RapidServer.RequestHeader header = 1;
// UserLimit index.
int32 index = 2;
optional UserLimitConfig config = 3;
optional UserLimitAction action = 4;
}

Response

message UserLimitResponse {
// Common response header. Always check the response header for errors.
RSI.RapidServer.ResponseHeader header = 1;
// UserLimit index.
int32 index = 2;
optional UserLimitConfig config = 3;
optional UserLimitAction action = 4;
optional UserLimitInfo info = 5;
optional UserLimitStatus status = 6;
}

Batch Request and Response

message UserLimitBatchRequest {
// Common request header.
RSI.RapidServer.RequestHeader header = 1;
repeated UserLimitRequest requests = 2;
}
message UserLimitBatchResponse {
// Common response header. Always check the response header for errors.
RSI.RapidServer.ResponseHeader header = 1;
repeated UserLimitResponse responses = 2;
}

Config

message UserLimitConfig {
// The type of trigger.
optional RSIUserLimitTriggerType trigger_type = 1;
// The primary condition.
optional UserLimitCondition condition_0 = 2;
// The second condition. Condition 1 will not be set if trigger type is SINGLE_CONDITION or invalid
optional UserLimitCondition condition_1 = 3;
// Optionally set some output when the UserLimit triggers.
optional UserLimitOutput output = 4;
// Optionally perform an action on an Axis when the UserLimit triggers.
optional RSIAction action = 5;
// Perform the optional action on this Axis.
optional int32 action_axis = 6;
// Duration the trigger state must be active before triggering. (Seconds)
optional double duration = 7;
// True if the UserLimit should trigger once, then disable itself.
optional bool is_single_shot = 8;
// Configurable interrupt data.
repeated UserLimitInterruptUserData user_data = 9;
// Internal messages.
message UserLimitCondition {
// The data type to be evaluated.
RSIDataType data_type = 1;
// The logic of the UserLimit.
RSIUserLimitLogic logic = 2;
// A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
uint64 address = 3;
// A 32-bit AND mask.
optional uint32 mask = 4;
// The 32-bit trigger value. (for 32-bit data types)
optional int32 integer_limit_value = 5;
// The 64-bit double trigger value (for 64-bit doubles data types only).
optional double double_limit_value = 6;
}
message UInt32Masks {
// 32-bit AND mask.
uint32 and_mask = 1;
// 32-bit OR mask.
uint32 or_mask = 2;
}
message UInt64Masks {
// 64-bit AND mask.
uint64 and_mask = 1;
// 64-bit OR mask;
uint64 or_mask = 2;
}
message UserLimitOutput {
// True if enabled
bool enabled = 2;
// The type of data to output.
RSIDataType data_type = 3;
// A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
uint64 address = 4;
// The type of output.
oneof output {
// Perform an AND and OR on a 64-bit value.
UInt32Masks uint32_masks = 6;
// Output a 32-bit value.
int32 int32_value = 7;
// Peform an AND and OR on a 64-bit value.
UInt64Masks uint64_masks = 8;
// Output a 64-bit double.
double double_value = 9;
// A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
// Use this field when you want the UserLimit to copy data from the input address to the output address.
uint64 input_address = 10;
}
}
message UserLimitInterruptUserData {
// Interrupt data index (0-4).
uint32 index = 1;
// A 64-bit host address, see InfoGet on MotionController, Axis, MultiAxis.
optional uint64 address = 2;
}
}

Action

message UserLimitAction {
optional Reset reset = 1;
optional Enable enable = 2;
optional Disable disable = 3;
message Reset {};
message Enable {};
message Disable {};
}

Info

Status

message UserLimitStatus {
// The UserLimit's index.
int32 index = 1;
// Is the UserLimit processing in the RMP firmware_version?
bool enabled = 2;
// Is the UserLimit currently triggered?
bool state = 3;
}