本文主要用于记录
一、尝试在Linux系统下进行ethercat通讯
1.使用Igh进行通讯
安装etherlab环境,并在命令行中对下位机进行操作
具体命令参见:Ethercat解析(十二)之命令行工具的使用_absinjun的博客-CSDN博客_ethercat 命令
经过简单的调试后,可以通过总线调取下位机的输入信息,包括开关状态、LED状态以及模拟量输入。但是存在一个致命性的问题,所有端口均显示为只读,并不能通过写入来修改状态,从而控制LED灯。
为了找到原因,我在Windows系统下,尝试使用倍福自家的TwinCAT进行同样的操作,非常顺利,没有出现任何的问题。但是在无意间,我在TwinCAT中复刻了Linux上的问题,即无法更改端口值。并且错误报告指向了状态机——没有进入OP状态。
回到Linux,经过一系列状态调取以及转换后,我发现,Igh的ethercat无法进入倍福板子的OP状态,这才导致了所谓的“只读”。
之后是这篇文章:LinuxCNC搭配Igh EtherCat Master开源Ethercat主站通讯控制测试_fengfengcloud的博客-CSDN博客
这篇文章提到了Igh与倍福、SOEM读取信息方法不同的问题,但因为板子不同,所以尝试无果。
2.转换思路,使用SOEM
在碰壁后,我转而投向了上文提到的SOEM,主要还是看重其系统兼容性,方便移植。
SOEM的使用较为简单,不会对硬件或者配置文件有很多的限制,只需要按照最基本的.c文件编译规则编译写好的.c文件即可,轻松完成了与板子的信息交互。
重点便来到了MAKEFILE的读写与SOEM程序的修改上。
MAKEFILE的学习可以参考Makefile教程(绝对经典,所有问题看这一篇足够了)_GUYUEZHICHENG的博客-CSDN博客_makefile其实只需要学一部分就可以解决会遇到的问题了,但全学了更好呗,艺多不压身嘛。
SOEM的程序上,移植要做的,一个是各种程序的引用需要变,另一个就是一些关键位置的语法化。例如:在Windows上用开关控制LED的语句是“IOmap[0]=IOmap[6]”,而这个语句的实现,在Linux这边就需要变成“*(ec_slave[0].outputs) = *(ec_slave[0].inputs)”。也就是移植所真正要做的东西,接下来就是朝着这个方向学习了,加油!