使用 SDO
简介
SDO 电报用于通过请求编程来不定期地访问任何 CANopen 对象。SDO 服务包括请求电报和响应电报。
请求 SDO 电报
从客户端发送至 LTMR 控制器的请求信息:
COB-ID |
字节 0 |
字节 1 |
字节 2 |
字节 3 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
---|---|---|---|---|---|---|---|---|
0x600 + 节点 ID |
请求代码 |
对象索引 |
对象子索引 |
请求数据 |
||||
LSB |
MSB |
位 7-0 |
位 15-8 |
位 23-16 |
位 31-24 |
响应 SDO 电报
从客户端发送至 LTMR 控制器的请求信息:
COB-ID |
字节 0 |
字节 1 |
字节 2 |
字节 3 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
---|---|---|---|---|---|---|---|---|
0x580 + 节点 ID |
响应代码 |
对象索引 |
对象子索引 |
响应数据 |
||||
LSB |
MSB |
位 7-0 |
位 15-8 |
位 23-16 |
位 31-24 |
请求和响应代码
请求数据和响应数据可能会因请求代码和响应代码的不同而有所不同。下表显示了每个不同请求代码的请求数据:
响应代码 |
命令描述 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
---|---|---|---|---|---|
0x23 |
写入 4 位数据 |
位 7-0 |
位 15-8 |
位 23-16 |
位 31-24 |
0x2B |
写入 2 位数据 |
位 7-0 |
位 15-8 |
0x00 |
0x00 |
0x2F |
写入 1 位数据 |
位 7-0 |
0x00 |
0x00 |
0x00 |
0x40 |
读取数据 |
0x00 |
0x00 |
0x00 |
0x00 |
0x80 |
中止当前的 SDO 命令* 1 |
位 7-0 |
位 15-8 |
位 23-16 |
位 31-24 |
下表显示了每个不同响应代码的响应数据:
请求代码 |
命令描述 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
---|---|---|---|---|---|
0x23 |
读取数据:4 字节数据 |
位 7-0 |
位 15-8 |
位 23-16 |
位 31-24 |
0x2B |
读取数据:2 字节数据 |
位 7-0 |
位 15-8 |
0x00 |
0x00 |
0x2F |
读取数据:1 字节数据 |
位 7-0 |
0x00 |
0x00 |
0x00 |
0x40 |
写入一条 1/2/4 位数据响应 |
0x00 |
0x00 |
0x00 |
0x00 |
0x80 |
检测到错误响应:返回中止代码*列出了所有支持的中止代码 |
0x00 |
0x00 |
0x00 |
0x00 |
SDO 中止代码
支持以下中止代码:
中止代码 |
描述 |
---|---|
0x 0503 0000 |
分段传输:切换位未发生改变 |
0x 0504 0000 |
SDO 协议超时 |
0x 0504 0001 |
请求代码无效或未知 |
0x 0601 0000 |
访问参数时发生访问脱扣(例如,针对某个只读参数的写入请求) |
0x 0601 0001 |
尝试对具有只写访问权限的参数执行读取请求 |
0x 0601 0002 |
尝试对具有只读访问权限的参数执行写入请求 |
0x 0602 0000 |
在请求中发送的索引引用了对象词典中不存在的对象 |
0x 0604 0041 |
PDO 对象映射:不能将参数映射至 PDO;当写入至 0x1600、0x1A00、0x1605 和 0x1A05 参数(PDO 映射)时发生此检测到的错误 |
0x 0604 0042 |
PDO 对象映射:要映射的参数的编号或长度将超出最大 PDO 长度。 |
0x 0609 0011 |
在请求中发送的子索引不存在 |
0x 0609 0030 |
超出了参数的取值范围(仅限写访问) |
0x 0609 0031 |
写入的参数值过高 |
0x 0609 0032 |
写入的参数值过低 |
0x 0609 0036 |
参数的最大值小于其最小值 |
0x 0800 0000 |
发生常规检测到的错误 |