ethcat学习笔记:ethcat 进行FOE升级报错误代码0x8004的原因、分析以及解决方法
发布日期:2021-06-30 13:42:16
浏览次数:2
分类:技术文章
本文共 1009 字,大约阅读时间需要 3 分钟。
原因 : 数据帧最后一帧是全为0的帧 从站认为这种操作是非法操作。可以修改主站将最后一帧全为0的帧 不发送。也可以修改从站代码,判定 全为零的帧也是正常帧。
公司的产品需要开发一个通过FOE 进行升级的功能。之前一直用codesys的升级功能,一直也都很正常,但是产品大量销售之后肯定不能让技术支持全跑现场去用codesys去进行升级,故而有了使用SOEM(Simple Open EtherCAT Master) 开发一个能进行FOE升级的插件的需求,然后就有了之后的一系列的踩坑与填坑。- 公司使用的ethcat 通讯邮箱不是boot 邮箱,而只是简单的通用邮箱。
- 不同的邮箱大小不一定一样!
- 错误代码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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月09日 09时54分57秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java线程生命周期之旅
2019-05-01
机器学习-简单逻辑回归实现
2019-05-01
如何快速定位JVM相关GC问题
2019-05-01
java线程相关概念之解析
2019-05-01
Python清洗常用工具
2019-05-01
java内存模型及线程案例分析
2019-05-01
小议创建线程的若干方式
2019-05-01
ThreadLocal应用场景分析
2019-05-01
线程池原理及应用之个人心得
2019-05-01
线程池excute方法执行底层过程
2019-05-01
线程池同步异步调用callable和Future
2019-05-01
梯度算法之初见
2019-05-01
解决python安装库较慢的方式
2019-05-01
Maven安装问题总结
2019-05-01
Maven 插件配置,安装配置问题
2019-05-01
PermGen space-永久区内存溢出
2019-05-01
Maven继承和聚合
2019-05-01
maven私服nexus配置
2019-05-01
nexus发布工程版本问题总结
2019-05-01
maven私服配置-发布工程版本到nexus
2019-05-01