ethcat学习笔记:ethcat 进行FOE升级报错误代码0x8004的原因、分析以及解决方法
发布日期:2021-06-30 13:42:16 浏览次数:3 分类:技术文章

本文共 1009 字,大约阅读时间需要 3 分钟。

原因 : 数据帧最后一帧是全为0的帧 从站认为这种操作是非法操作。可以修改主站将最后一帧全为0的帧 不发送。也可以修改从站代码,判定 全为零的帧也是正常帧。

公司的产品需要开发一个通过FOE 进行升级的功能。之前一直用codesys的升级功能,一直也都很正常,但是产品大量销售之后肯定不能让技术支持全跑现场去用codesys去进行升级,故而有了使用SOEM(Simple Open EtherCAT Master) 开发一个能进行FOE升级的插件的需求,然后就有了之后的一系列的踩坑与填坑。

  1. 公司使用的ethcat 通讯邮箱不是boot 邮箱,而只是简单的通用邮箱。
  2. 不同的邮箱大小不一定一样!
  3. 错误代码0x8004。
    这几个问题都是在前辈的帮助下才解决的,本文主要介绍的就是第二三个问题。
    针对第二个问题,邮箱的大小跟处理器的性能有一定的关系,所以我们的产品的几个从站的邮箱大小是不一致的!在实际的使用中,发现有一些从站能升级上去,而另外的几个处理器性能更强的 反而是升级不成功,经过排查最终问题是出在邮箱的额大小上,wincat可以给所有的从站进行升级,codesys也是,所以第一步就排除了从站代码的问题。经过一番查找,在大佬的指导下将单帧数据的最大值限定为(256-12)个 成功解决问题,猜测可能是我们的ethcat网卡芯片有限制,这里也没去深究,毕竟是能正常用了。 上述问题需要修改的是 soem\ethercatfoe.c
    在这里插入图片描述
    这里需要对单个数据帧的大小进行限制,我在实际使用中将单个数据帧大小限制为128 -12 。
    就是判断当前的maxdata 是否大于128 如果大于 则令其等于128 。
    针对于第三个问题是比较巧合的情况下发生的,具体的表现就是 同样一个从站,在进行不同版本的升级的时候有时候能必现 0x8004 有的时候直接就是正常的升级成功。 找问题的过程需要从站跟主站联调,最终发现是主站在发送完整个的固件之后补发了一个全零的帧。而从站在主站发送最后的全零帧之前就已经结束了升级的过程,所以收到这一帧数据之后 从站就报非法操作的错误码。而这最后是否会补一帧全为零的结束帧取决于代码和FOE固件的长度,在SOEM的代码soem\ethercatfoe.c 在这里插入图片描述在如上图所示的位置的代码处可以人为的删除掉最后一个全为零的数据帧的发送!

出于保密的要求 我这里并没有放修改之后的代码,还请各位读者见谅。

转载地址:https://jeason.blog.csdn.net/article/details/112105719 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:嵌入式linux 学习笔记--如何使用udhcpc获取动态IP
下一篇:工作笔记 -- AltiumDesigner20 设置铺铜改变之后自动重新铺铜方法

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月12日 00时00分23秒