除了 PDO 实时数据交换,如何通过 SDO 读取/写入从站的参数?

作者
Beard Hu 24 天前更新
时间
发布于 2026-07-30 · 最后更新 2026-07-30 15:23
解答

 SDO (Service Data Object) 用于非实时的参数配置和诊断:

 1. SDO 写操作 (主站 → 从站)

    int32_t ECM_EcatSdoWrite(uint8_t slave,     // 从站编号

                              uint16_t index,    // 对象索引 (如 0x6060)

                              uint8_t subindex,  // 子索引

                              uint16_t size,     // 数据大小 (字节)

                              uint8_t *data);    // 数据指针

 2. SDO 读操作 (从站 → 主站)

    int32_t ECM_EcatSdoRead(uint8_t slave,      // 从站编号

                             uint16_t index,     // 对象索引

                             uint8_t subindex,   // 子索引

                             uint16_t *size,     // [in]缓冲区大小 [out]实际大小

                             uint8_t *data);     // 读取数据缓冲区

 使用示例:

   // 设置操作模式为 CSP

   uint8_t mode = 8;

   ECM_EcatSdoWrite(1, 0x6060, 0x00, 1, &mode);

   // 读取当前操作模式

   uint8_t readMode;

   uint16_t size = 1;

   ECM_EcatSdoRead(1, 0x6061, 0x00, &size, &readMode);

   // 读取编码器分辨率

   uint32_t encoderRes;

   uint16_t readSize = 4;

   ECM_EcatSdoRead(1, 0x608F, 0x01, &readSize, (uint8_t*)&encoderRes);

 常用 SDO 对象:

   ┌──────────┬──────────────────────┬──────────────┬────────────┐

   │ 索引     │ 名称                 │ 方向         │ 常见用途   │

   ├──────────┼──────────────────────┼──────────────┼────────────┤

   │ 0x6040   │ Control Word         │ 写           │ 控制电机   │

   │ 0x6041   │ Status Word          │ 读           │ 读取状态   │

   │ 0x6060   │ Modes of Operation   │ 写           │ 设置模式   │

   │ 0x6061   │ OpMode Display       │ 读           │ 读取模式   │

   │ 0x6064   │ Position Actual Value │ 读           │ 实际位置   │

   │ 0x607A   │ Target Position      │ 写           │ 目标位置   │

   │ 0x608F   │ Encoder Resolution   │ 读           │ 编码器参数 │

   │ 0x609A   │ Position Accuracy    │ 读           │ 位置精度   │

   │ 0x607C   │ Following Window     │ 写           │ 跟随误差窗 │

   └──────────┴──────────────────────┴──────────────┴────────────┘

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
搜索