ethercat通讯移植

本文主要用于记录

一、尝试在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)”。也就是移植所真正要做的东西,接下来就是朝着这个方向学习了,加油!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值