cmvr-es/protos/cmvr/msgs/canopen.proto

203 lines
4.8 KiB
Protocol Buffer
Raw Normal View History

2025-08-21 13:56:39 +08:00
syntax = "proto3";
package cmvr.msgs;
message SdoFrame {
uint32 node_id = 1; // 节点ID
CommandSpecifier cs = 2; // SDO命令字
ObIndex index = 3; // 对象字典索引
ObSubIndex sub_index = 4; // 子索引
uint32 data = 5; // 数据区
}
enum PdoBaseId{
PDO_BASE_ID_UNSPECIFIED = 0;
RPDO1_BASE_ID_200 = 0x200;
RPDO2_BASE_ID_300 = 0x300;
RPDO3_BASE_ID_400 = 0x400;
RPDO4_BASE_ID_500 = 0x500;
TPDO1_BASE_ID_180 = 0x180;
TPDO2_BASE_ID_280 = 0x280;
TPDO3_BASE_ID_380 = 0x380;
TPDO4_BASE_ID_480 = 0x480;
}
// PDO 传输类型
enum TransmissionType {
// 同步传输
SYNC_EVENT_DRIVEN = 0x00; // 非循环同步
SYNC_CYCLIC = 0x01; // 循环同步
// 远程请求触发
REMOTE_SYNC = 0xFC; // 远程同步
REMOTE_ASYNC = 0xFD; // 远程异步
// 异步传输
ASYNC_MANUFACTURER_SPECIFIC = 0xFE; // 异步,制造商特定事件
ASYNC_DEVICE_SPECIFIC = 0xFF; // 异步,设备子协议特定事件
}
enum CommandSpecifier {
CS_NO = 0; // 默认无效
CS_WRITE_ONE_BYTE = 0x2F; // 写 1 字节
CS_WRITE_TWO_BYTES = 0x2B; // 写 2 字节
CS_WRITE_THREE_BYTES = 0x27; // 写 3 字节
CS_WRITE_FOUR_BYTES = 0x23; // 写 4 字节
CS_WRITE_SUCCESS_RESPONSE = 0x60; // 写成功响应
CS_READ_REQUEST = 0x40; // 发起读取请求
CS_READ_RESPONSE_ONE_BYTE = 0x4F; // 响应 1 字节
CS_READ_RESPONSE_TWO_BYTES = 0x4B;// 响应 2 字节
CS_READ_RESPONSE_THREE_BYTES = 0x47;
CS_READ_RESPONSE_FOUR_BYTES = 0x43;
CS_EXCEPTION_RESPONSE = 0x80; // 异常响应
}
enum NmtState {
// 0x00 - 正在初始化Initializing
NMT_INITIALIZING = 0x00;
// 0x01 - 未连接 / 应用复位Reset Application
NMT_RESET_APPLICATION = 0x01;
// 0x02 - 正在连接Connecting
NMT_CONNECTING = 0x02;
// 0x03 - 准备Preparing
NMT_PREPARING = 0x03;
// 0x04 - 停止状态Stopped开启 SDO关闭 PDO
NMT_STOPPED = 0x04;
// 0x05 - 运行状态Operational开启 SDO、PDO、NMT
NMT_OPERATIONAL = 0x05;
// 0x7F - 预运行状态Pre-Operational开启 SDO关闭 PDO
NMT_PRE_OPERATIONAL = 0x7F;
}
enum NmtCommand {
// 未指定命令
NMT_COMMAND_UNSPECIFIED = 0x00;
// 0x01 - 启动远程节点Start Remote Node
NMT_START_REMOTE_NODE = 0x01;
// 0x02 - 停止远程节点Stop Remote Node
NMT_STOP_REMOTE_NODE = 0x02;
// 0x80 - 进入预操作状态Enter Pre-Operational
NMT_ENTER_PRE_OPERATIONAL = 0x80;
// 0x81 - 复位节点Reset Node
NMT_RESET_NODE = 0x81;
// 0x82 - 复位通信Reset Communication
NMT_RESET_COMMUNICATION = 0x82;
}
// 索引
enum ObIndex {
INDEX_ZERO = 0;
USER_SAVE_PARA_2000 = 0x2000; // 下发命令 1 保存参数
POSITION_OFFSET_2008 = 0x2008; // 位置偏移,子索引 0x00用于设置零点、起始位置
// Error Codes
ERROR_CODE_6007 = 0x6007;
ERROR_CODE_603F = 0x603F;
// Control and Status
CONTROL_WORD_6040 = 0x6040;
STATUS_WORD_6041 = 0x6041;
// Operation Modes
OPERATION_MODE_6060 = 0x6060;
MODE_DISPLAY_6061 = 0x6061;
// Actual Values
ACTUAL_POSITION_6064 = 0x6064;
ACTUAL_SPEED_606C = 0x606C;
ACTUAL_CURRENT_6078 = 0x6078;
// Torque-related
TARGET_TORQUE_6071 = 0x6071;
MAX_TORQUE_6072 = 0x6072;
DEMAND_TORQUE_6074 = 0x6074;
// Position-related
TARGET_POSITION_607A = 0x607A;
SOFTWARE_POSITION_LIMIT_607D = 0x607D; // Sub-indexes: 1, 2
// Speed-related
MAX_SPEED_607F = 0x607F;
PROFILE_SPEED_6081 = 0x6081;
PROFILE_ACCELERATION_6083 = 0x6083;
PROFILE_DECELERATION_6084 = 0x6084;
// Same as DEMAND_TORQUE? Verify correctness.
// TORQUE_SLOPE_6074 = 0x6074;
// PID Control
CURRENT_LOOP_PID_60F6 = 0x60F6; // Sub-indexes: 1, 2
SPEED_LOOP_PID_60F9 = 0x60F9; // Sub-indexes: 1, 2
POSITION_LOOP_PID_60FB = 0x60FB; // Sub-indexes: 1, 2, 3
// Target Speed
TARGET_SPEED_60FF = 0x60FF;
QUICK_STOP_OPTION_605A = 0x605A;
QUICK_STOP_DECEL_6085 = 0x6085;
// -------------------------
// PDO 通信参数对象Communication Object
RPDO1_COMM_1400 = 0x1400;
RPDO2_COMM_1401 = 0x1401;
RPDO3_COMM_1402 = 0x1402;
RPDO4_COMM_1403 = 0x1403;
TPDO1_COMM_1800 = 0x1800;
TPDO2_COMM_1801 = 0x1801;
TPDO3_COMM_1802 = 0x1802;
TPDO4_COMM_1803 = 0x1803;
// PDO 映射对象Mapping Object
RPDO1_MAP_1600 = 0x1600;
RPDO2_MAP_1601 = 0x1601;
RPDO3_MAP_1602 = 0x1602;
RPDO4_MAP_1603 = 0x1603;
TPDO1_MAP_1A00 = 0x1A00;
TPDO2_MAP_1A01 = 0x1A01;
TPDO3_MAP_1A02 = 0x1A02;
TPDO4_MAP_1A03 = 0x1A03;
PRODUCER_HEARTBEAT_TIME = 0x1017;
}
// 子索引
enum ObSubIndex {
SUB_INDEX_0 = 0;
SUB_INDEX_1 = 1;
SUB_INDEX_2 = 2;
SUB_INDEX_3 = 3;
SUB_INDEX_4 = 4;
SUB_INDEX_5 = 5;
SUB_INDEX_6 = 6;
SUB_INDEX_7 = 7;
}