syntax = "proto3"; package cmvr.msgs; message SdoFrame { uint32 node_id = 1; // 节点ID CommandSpecifier cs = 2; // SDO命令字 uint32 index = 3; // 对象字典索引 uint32 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; } // CANopen communication object dictionary indexes. // CiA402 drive-profile objects are defined in cia402.proto. enum CanopenObjectIndex { CANOPEN_OBJECT_INDEX_ZERO = 0; CANOPEN_PRODUCER_HEARTBEAT_TIME_1017 = 0x1017; // PDO 通信参数对象(Communication Object) CANOPEN_RPDO1_COMM_1400 = 0x1400; CANOPEN_RPDO2_COMM_1401 = 0x1401; CANOPEN_RPDO3_COMM_1402 = 0x1402; CANOPEN_RPDO4_COMM_1403 = 0x1403; CANOPEN_TPDO1_COMM_1800 = 0x1800; CANOPEN_TPDO2_COMM_1801 = 0x1801; CANOPEN_TPDO3_COMM_1802 = 0x1802; CANOPEN_TPDO4_COMM_1803 = 0x1803; // PDO 映射对象(Mapping Object) CANOPEN_RPDO1_MAP_1600 = 0x1600; CANOPEN_RPDO2_MAP_1601 = 0x1601; CANOPEN_RPDO3_MAP_1602 = 0x1602; CANOPEN_RPDO4_MAP_1603 = 0x1603; CANOPEN_TPDO1_MAP_1A00 = 0x1A00; CANOPEN_TPDO2_MAP_1A01 = 0x1A01; CANOPEN_TPDO3_MAP_1A02 = 0x1A02; CANOPEN_TPDO4_MAP_1A03 = 0x1A03; // Ti5 vendor-specific objects used through CANopen SDO. CANOPEN_USER_SAVE_PARA_2000 = 0x2000; CANOPEN_POSITION_OFFSET_2008 = 0x2008; } // 子索引 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; }