在 VisionFive2 实现 EtherCAT 主站控制器设备

大家好,

虽然我对工控这个领域的知识还是很有限,但我想尝试探索 VisionFive2 或 RISC-V 架构在工控领域的潜能。 :grinning:

这是我购买的EtherCAT 设备,
1.) OL3-E57H EtherCAT 步进驱动器
2.) LC42HS60 步进电机

应用软件方面,我选择了开源的 Simple Open EtherCAT Master Library (SOEM),
然后再用它编写程序应用(Application)

备注:我的操作系统是 Debian , 但 EtherCAT 主站最好是用实时操作系统。

请看下面这个是我上传的视频。当步进电机能按照命令转动起来时,还是很开心的 :grinning:

如果有网友不清楚什么是 EtherCAT, 请看这个

6 Likes

真棒!赛昉科技也积极在探索工业控制方面的应用,RVspace应用中心罗列了我们推荐的应用文章,正在持续更新中,有好的点子欢迎推荐。

2 Likes

非常高质量的分享!!! 我对这块也非常感兴趣,非常期待您能进一步分享在Debian系统上关于EtherCat主站控制设备的应用程序的实现,非常期待呀!!!

1 Like

好的,最近工作有点忙,等过一阵子我再分享。

3 Likes

OK, 能先简单科普一下比较基础的知识吗? 比如您基于Visionfive 2 移植EtherCat协议的时候,在内核做了哪些工作呀? 然后用户空间使用开源的Simple Open EtherCAT Master Library (SOEM),是通过socket接收/发送EtherCat协议报文吗?

内核不需要更改。

只是要参考驱动器的datasheet, 并根据驱动器支持的协议 (CoE) 来写代码。

我选择了 PV mode (velocity mode),当然还有其他的 mode 可以选择

那么根据 驱动器的datasheet

这是参数:

这是流程 :

例如 : 在 SOEM 那边的代码

#define WRITE(slaveId, idx, sub, buf, value, comment)
{
int __s = sizeof(buf);
buf = value;
int __ret = ec_SDOwrite(slaveId, idx, sub, FALSE, __s, &buf, EC_TIMEOUTRXM);
printf(“Slave: %d - Write at 0x%04x:%d => wkc: %d; data: 0x%.*x\t{%s}\n”, slaveId, idx, sub, __ret, __s, (unsigned int)buf, comment);
}

下面是设置加速度 (0x6083 是加速度, 可以参考上面的截图)
WRITE(l_slaveId, 0x6083, 0, buf32, acceleration, “Target Accerelation”)


ec_SDOwrite 是 SOEM 的 API 接口

3 Likes
  1. 您提到您选择的Simple Open EtherCAT Master Library (SOEM),但是EtherCAT还有另外一个开源主站源代码Igh EtherCAT Master,请问您选择之前是否有一些对比?
  2. 主站Visonfive 2:您提到用SOAM编写Application, 这个Application是否仅仅包含主站功能方面的吗,对于主站的控制界面是否要额外进行编写的图形界面?
  3. 从站OL3-E57H:在从站OL3-E57H您做了哪些工作来让它工作呢?

你好,

不好意思,最近没来看论坛了。

1.) 我是有注意到有两个开源主站代码,不过我没有深入去学习。我之前是想参考这个博客的 在RT-Thread上移植EtherCAT开源主站SOEM1.4.0_ethercat主机移植_lg28870983的博客-CSDN博客 , 但是我发现到 rt-thread 还没支持 VisionFive2, 所以我便继续在 Debian 上测试。

2.)我的代码是 console application, 并没有图形界面,不过这个和 EtherCAT 没有关联,我们可以用一些 platform 例如 Qt, 去创造一个图形界面然后再调用 SOEM 的 API 就可以完成一个有图形界面的 App 了。

3.)从站确实可以去弄一些定制, 但是我只是很普通的命令(速度,加速度),所以我并没有再从站去弄什么。我的理解是,在比较专业的应用里,是要在从站去做些设置,例如 PDO (Process Data Objects), 来决定每个都交换什么 data, PDO mapping 越大,意味着一次交换的数据越多,但是交换的频率也越慢, 所以选择需要的就好。

我觉得,可能瓶颈还是在 real-time (实时性), 因为目前好像还没有一个real-time OS (例如 rt-thread) 可以支持 VisionFive2.

另外我也注意到了,有人在 VisionFive2 上启用了 OpenPLC, 如果能把 EtherCAT 开源主站代码和 OpenPLC 结合起来,那应该很不错 :grinning:

2 Likes