映射都配好了,怎么还是没数据?
EtherCAT PDO 配置,一步步来
有个场景挺常见。
新买的驱动器接上,主站扫到了,型号也认出来了,映射也照着手册一条条填进去了。结果一跑,要么卡在 Pre-Op 死活上不去,要么状态是上去了,但主站那边位置一直是 0,怎么看都不对。
十有八九是漏了一步。
这篇讲 EtherCAT 上 PDO 到底怎么配。上一篇说过 PDO 就是事先印好的一张表,这篇讲这张表具体怎么印、怎么交上去。
一、先搞清楚这是两层活
很多人卡住,是因为以为配 PDO 就是一件事。其实是两件。
▲ 装表和交表是两件事,都得做
第一层叫装表。你告诉驱动器:这张表里要放控制字、目标位置这几样东西,每样占几个字节。这一步填的是 1600h(收的表)和 1A00h(发的表)。
第二层叫交表。你再告诉驱动器:这次通信,收的这边用第几张表,发的这边用第几张表。这一步填的是 1C12h 和 1C13h。
为什么要分两层?因为一台驱动器里可以存好几张表。比如 1600h 一张、1601h 一张、1602h 一张,分别对应不同的用法。装表只是把这些表准备好,具体这次用哪张,得靠交表这步指定。
开头那个「状态上去了但收不到数据」,绝大多数就是表印好了没交上去。1600h 填得漂漂亮亮,1C12h 是空的,驱动器当然什么都不发。
二、这几个编号分别是干嘛的
把上面那张图翻译成编号,就是这么四组:
编号 | 干什么用的 | 谁收谁发 |
1600h ~ 17FFh | 装表:驱动器要收的那几个参数 | 主站发给驱动器 |
1A00h ~ 1BFFh | 装表:驱动器要发的那几个参数 | 驱动器报给主站 |
1C12h | 交表:收的这边用哪几张表 | 对应 SM2 |
1C13h | 交表:发的这边用哪几张表 | 对应 SM3 |
SM2 和 SM3 是 EtherCAT 里的同步管理器,你可以简单理解成两个数据通道,一个管收一个管发。1C12h 对应收,1C13h 对应发,记住这个对应关系就够了。
这里最容易看反的还是收发方向。这两个字是站在驱动器角度说的:1600h 是驱动器收的,装的是主站发下来的控制字、目标位置;1A00h 是驱动器发的,装的是要报给主站的状态字、当前位置。翻手册的时候留意一下。
三、表里填的那串数是什么意思
打开映射表,你会看到一串像 0x60400010 这样的数。这个数不是随便编的,是三段拼起来的。
▲ 一条映射值是三段拼起来的
前四位是参数编号,中间两位是子索引,最后两位是这个参数占多少位。
以 0x60400010 为例:6040h 是控制字,00 是子索引,10 是十六进制的 16,也就是这个参数占 16 位、2 个字节。
常用的几个直接抄就行:
参数 | 编号 | 长度 | 映射值 |
控制字 | 6040h | 16 位 | 0x60400010 |
目标位置 | 607Ah | 32 位 | 0x607A0020 |
目标速度 | 60FFh | 32 位 | 0x60FF0020 |
状态字 | 6041h | 16 位 | 0x60410010 |
当前位置 | 6064h | 32 位 | 0x60640020 |
当前模式 | 6061h | 8 位 | 0x60610008 |
<o:p>
最后两位的位长最容易写错。32 位的参数写成了 0x10,驱动器按 2 个字节去取,后面所有数据全部错位,读出来的位置就成了一堆看不懂的数。
四、大部分人其实不用手动配
讲了这么多,先说个好消息:真正需要自己一条条填的场合并不多。
▲ 先看有没有现成的,实在没有再手动配
驱动器厂家一般会在 ESI 文件里预置好几组常用组合。比如 CSP 模式一组、CSV 模式一组、带转矩前馈的一组。主站软件把 ESI 文件导进去,在下拉框里挑一组,配置就完成了。九成场合这样就够用。<o:page></o:page>
什么时候才需要手动配?就一种情况:预设组合里没有你要的参数。比如你想在每个周期都读到电机温度或者母线电压,而厂家给的几组预设里都没有这一项。
手动配之前先确认一件事:这台驱动器支不支持改映射。有些低成本型号是固定映射,表印死了改不了。这个在 ESI 文件里能查到,主站软件里通常也会显示映射项是不是可编辑。
五、真要手动配,顺序是这样
如果确实要自己排格子,那顺序不能乱。跳步的话从站一般会直接拒绝,返回一个错误码。
▲ 八步走完,顺序不能乱
为什么要先写 0?因为驱动器需要知道你是在「重新排表」,而不是在往一张已经生效的表里乱插东西。子索引 0 存的是「这张表有几项」,把它写成 0,等于告诉驱动器这张表现在作废了,可以重排。等你把各项都填完,再把项数写回去,这张表才重新生效。
交表那一步也是同样的道理,1C12h 的子索引 0 也要先清零再往回写。
上面八步是收的这一组。发的那组步骤完全一样,把 1C12h 换成 1C13h、1600h 换成 1A00h 就行。
实际操作的时候,这些写入动作都是通过 SDO 完成的。所以状态必须在 Pre-Op 以上,因为 Pre-Op 才会打开邮箱通道。
六、几个容易卡住的地方
●卡在 Pre-Op 上不去 Safe-Op,先查映射。这是最高频的问题。主站按 ESI 文件配了一组 PDO,驱动器固件里没这几个参数,或者长度对不上,从站就拒绝往下走。看主站给出的 AL Status Code,一般能查到具体是哪一项。
●状态到了 Op 但数据全是 0,查 1C12h 和 1C13h。这就是开头那个场景,表没交上去。<o:page></o:page>
●位置读不回来,八成是忘了映射 6064h。有人只顾着配控制字和目标位置,忘了把当前位置放进发的那张表。指令发得出去,反馈读不回来,主站做闭环就抓瞎了。CSP 模式下这个特别常见。
●改完 ESI 文件记得让主站重新扫描。驱动器固件升级换了 ESI 之后,主站还拿着旧的配置去对,肯定对不上。
●映射项加起来别超上限。每个从站能装多少字节是有限的,ESI 文件里写着。超了从站会在切状态的时候报错。
●改映射一定要在 Pre-Op 做。到了 Safe-Op 和 Op,这些参数基本都是只读的,写进去会返回错误。
整个流程说白了就八个字:先印表,再交表,顺序别乱。配好之后跑起来,主站每个周期就能按固定格子取数了。
下一篇我们接着讲 EtherCAT 从站的落地方案:ESC 专用芯片和 FPGA 到底怎么选、成本和开发周期各是什么量级。欢迎关注我们,一起把这些看着唬人的技术名词一个个拆明白。
#工业总线 #EtherCAT #伺服驱动器 #工业通信 #运动控制<o:page></o:page>