
IgH详解
EtherCAT.技术研究
如有需要可提供技术支持
展开
-
IgH详解十八、支持 AoE 读写
AoE 协议用于访问底层现场总线的从站设备的对象字典,例如,用于连接到 EtherCAT-CANopen 网关设备的 CAN 应用协议从站。EL6751是倍福的canopenmaster主站io,canopen从站的pdo数据可以映射的pdo中,但是要访问从站的对象字典要通过AoE来实现读写,当前IgH不支持AoE,在IgH上实现AoE的读写功能。通过抓包,可以看到AoE成功的写数据到EL6751从站中,查询返回无错误。AoE的读写报文头可参考ETG1020规范文档有详细说明。参考规范 ETG.1020。原创 2025-02-28 17:01:06 · 504 阅读 · 0 评论 -
IgH详解十七、支持(module)模块化IO
关于模块化IO的规范可参考 ETG5001_1_V0i10i0_S_D_MDP_GeneralSpec 描述。根据之前的IgH支持ENI功能,使用相关工具生成eni文件,根据eni文件配置参数进行配置,实现伺服的控制。模块化IO在总线上是一个从站 ,有耦合器,耦合器后面可以接多个卡片式IO,目前很多IO厂家都有相关产品。查找到PDO映射的地址。原创 2023-06-15 15:30:48 · 1704 阅读 · 0 评论 -
IgH详解十六、双主站
IgH支持双主站,只需要在配置文件中,配置双主站的MAC地址即可。启动主站后,可以看到两个主站。 IgH分别创建了EtherCAT0和EtherCAT1两个设备,分别对应双主站。 根据主站个数初始化各个主站的数据结构。网卡驱动中先获取到所有的网卡 网络驱动中会依次比较主站配置的mac地址和网卡的mac地址是否一致,如果一致就把网卡绑定当前主站。原创 2022-12-06 18:11:59 · 2176 阅读 · 8 评论 -
IgH详解十五、igh线缆冗余
线缆冗余是为了应对EtherCAT通信线缆断开的补救措施。通常环形拓扑结构就要用到线缆冗余。如果环线在一些点中断,仍然可以达到两个分支。 如果一个线缆断开,则在断开的线缆两端的帧将分别被处理。因此这两个帧均只包含输入数据的一部分。主站将它们结合起来,并通过所有输入数据整合成一个帧 IgH开启冗余需要在编译之前配置 --with-devices=2 表示两路网口。./configure --enable-generic --enable-8139too=no --with-devices=2同时配置两路ma原创 2022-12-06 17:29:14 · 1744 阅读 · 1 评论 -
IgH详解十四、igh添加总线链路状态监测功能
总线上连接两个清能德创S7伺服,先读取一次链路状态,然后拔掉伺服0和1之间的网线,然后插上网线。读取状态,可以看到两个伺服端口的错误计数有增加。在工业现场有可能因为复杂的现场环境导致ethercat网络链路出现异常。监测链路的异常是分析总线异常一个很重要的功能。EtherCAT从站芯片支持物理链路丢失计数和数据帧破坏计数。在igh tool加入linkstat命令,来读取分析相关寄存器。利用从站的错误计数功能实现链路状态监视功能。2、链路受到干扰有错包。原创 2022-11-28 13:59:05 · 1067 阅读 · 9 评论 -
IgH详解十三、igh支持 hot connect
ethercat hot connect原创 2022-11-13 16:48:11 · 1609 阅读 · 9 评论 -
IgH详解十二、IgH实现使用ENI文件配置从站(二)
实现eni数据解析,根据ETG2100_V1i0i1_S_R_ENISpec规范对eni的描述,在程序运行时,解析出eni数据。通过eni解析实现了eni配置参数自动配置到从站,增强了IgH的兼容性,解决不同厂家自带参数差异导致的IgH的兼容问题。把解析出的数据封装成IgH需要的格式,配置到从站中。ENI文件可借助TwinCAT生成。解析出的eni数据log。原创 2023-06-15 14:50:26 · 2345 阅读 · 16 评论 -
IgH详解十二、IgH实现使用ENI文件配置从站(一)
IgH实现使用ENI文件配置从站原创 2022-07-05 21:00:00 · 4320 阅读 · 4 评论 -
IgH详解十一、IgH(FSM)有限状态机
前面介绍过启动流程,下面介绍一下IgH的主要设计思想 FSM当驱动加载完成后就启动了Idle线程,idle线程就开始执行状态机函数idle线程会一直调用主站的fsm->state函数,在函数中对state函数指针赋值,从而改变fsm->state调用的函数。每当完成一个功能就把下一个功能的函数指针赋值给state,下次执行的就是新的功能函数了,执行完成后会赋值完成状态,通过判断就知道一个流程的完成。idle线程中还会判断...原创 2022-05-30 18:44:40 · 2285 阅读 · 2 评论 -
IgH详解十、EtherCAT DC(4)主站做参考时钟和从站作参考时钟性能对比
以主站为参考时钟效果如下,可以看到抖动的范围比较大,最大值受主站系统的实时性影响比较大,当主站实时性差的时候最大值会变大,档抖动范围不能收敛的实时从站就会报同步错误。以主站做参考时钟,主站经常会报did not sync after 警告,就是通过监视从站0x92c寄存器的值在一定时间后还不能达到一个稳定的范围。前面介绍过从站做参考时钟要比主站做参考时钟稳定,通过IgH主站和从站作参考时钟对比下两者的实际差异。通过实际的对比可以看到从站做参考时钟是比主站做参考时钟要稳定的。总线上接了两个清能德创的伺服。原创 2022-11-24 16:31:52 · 4192 阅读 · 25 评论 -
IgH详解十、EtherCAT DC(3)IgH实现
IgH DC计算IgH在主站启动后,等待从站状态机扫描完从站后,就开始计算传输延时。 ec_master_attach_slave_configs //主站绑定从站配置信息通过前面的分析我们知道,需要先选择一个从站作为参考时钟,根据总线的拓扑结构来计算各从站的传输延时。ec_master_find_dc_ref_clock // 没有指定参考从站就把第一个带DC的从站作为参考时钟同时初始化了时钟漂移补偿用的数据报文ec_datagram_fpwr...原创 2022-05-20 16:40:17 · 4754 阅读 · 19 评论 -
IgH详解十、EtherCAT DC(2)同步流程
DC同步流程在init阶段先计算传输延时、系统时间偏差 把计算的时间偏差和传输延迟写入各个从站 广播参考从站时钟若干次,进行时钟漂移补偿在preop状态设置从站的工作周期 设置从站启动触发sync的时间,周期的发信号给从站在safeop 、op状态一直广播参考从站的时钟进行动态的漂移补偿...原创 2022-05-20 16:30:00 · 3937 阅读 · 7 评论 -
IgH详解十、EtherCAT DC(1)理论
(Distributed Clocks) 分布式时钟分布式时钟相当于每个节点都有一个时钟,在同一时刻,触发所有节点做给定的动作,要达到同一时刻触发就要求大家的时钟保持一致,也就是同步。比如每个人都有手机,只要手机接入网络,就会进行时间同步,获得一致的时间,比如早上9点上班,网购的整点秒杀,如果我们的手机时间不同步,可能就上班迟到了,点开网页秒杀已经结束了。比如买了两个打印机,左边的1万,右边的9.9包邮,现在要在纸上打印一条斜线,左边的完全同步...原创 2022-05-20 16:20:43 · 5385 阅读 · 7 评论 -
IgH详解九、IgH PDO配置(2)
IgH配置pdo流程原创 2022-06-06 00:03:54 · 5061 阅读 · 33 评论 -
IgH详解九、EtherCAT PDO原理(1)
过程数据对象 (PDO)过程数据对象(PDO)是EtherCAT 从站在每个周期内传输的过程数据,是应用程序期望循环更新或发送到从站的用户数据(比如每个周期下发伺服的位置)。因此,EtherCAT 主站在启动阶段对每个 EtherCAT 从站进行参数化,以定义要与该从站传输或从该从站传输的过程数据(以位/字节为单位的大小、源位置、传输类型)PDO的配置(PDO通过邮箱SDO配置,SDO如何下发数据见上一篇文章)寄存0x1c12 RxPDO 0x1c13 TxPDO下面以一次实际配置过程来原创 2022-05-07 18:24:43 · 11164 阅读 · 5 评论 -
IgH详解八、EtherCAT SDO原理
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。从从站读取数据主站同样需要发起多次访问,以确保数据正确读取下面我们看下SDO是怎么封装到EtherCAT中的?邮箱协议从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会.原创 2022-04-27 20:44:20 · 11379 阅读 · 5 评论 -
IgH详解七、ethercat实时网卡驱动
IgH支持两种模式的网络驱动一、generic 通用模式的网卡驱动这种模式下是通过TCPIP协议栈对上层提供的socket接口来实现的,这种模式下网络收发的实时性取决于TCPIP协议栈的处理效率,一般实时性都不好,优点是通用性好,板卡自带的驱动就可以使用,不需要修改。 二、实时网卡驱动 以e1000e为例来对比,在普通网卡驱动上需要实现的功能来达到好的实时性。1、在网卡probe过程中,把网卡驱动注册到etherc...原创 2021-09-26 16:44:53 · 9846 阅读 · 4 评论 -
IgH详解六、IgH命令行工具使用
当加载好主栈驱动程序后,可以通过命令行工具查看主栈和从站的相关信息。下面接收命令行的具体功能1、ethercat alias [ OPTIONS ] < ALIAS >*--alias -a <alias>:从站的别名;*--position -p <pos>:从站的绝对位置;*--force -f:所有从站;配置从站别名sudo ethercat alias --p 0 0x10012、ethercat c...原创 2021-09-24 14:51:59 · 8941 阅读 · 14 评论 -
IgH详解五、从站扫描流程
当我们启动主栈后可使用ethercat命令行工具查看从站的的相关信息,比如:ethercat slave0 0:0 PREOP + CoolDrive RC 1 0:1 PREOP + CoolDrive RC ...原创 2021-09-01 16:35:33 · 5703 阅读 · 10 评论 -
IgH详解四、数据报接收流程
IgH通过调用ecrt_master_receive接口接收数据报文。ec_device_poll接口调用的就是我们在实时网卡驱动中注册的ec_poll接口,以e1000为例在初始化网卡驱动的时候会调用ecdev接口给协议栈注册网卡的轮询接收接口。到这里也只是注册了接收接口,那又是怎么把报文传递给协议栈的呢?接收的数据报文是怎么处理的呢? 也是通过在网卡驱动中调用协议栈接收函数来实现的。在网卡驱动中调用了协议栈的ecdev_receive函数,可以看到sk...原创 2021-09-01 10:38:50 · 2651 阅读 · 5 评论 -
IgH详解三、数据报发送流程
数据发送通过调用ecrt_master_send接口来发送报文。红框内容说明:为什么有条件的插入主站状态机数据呢?其实是和主栈的idle和op线程有关,通过之前的介绍我们知道,主站启动时启动了idle线程,idle线程会主动的调用ecrt_master_send接口来发送报文但是当我们在应用程序中请求主站的时候,idle线程就退出了,转而启动了op线程继续执行主站状态机可以看到op线程没有调用send函数,写过IgH应用程序就应该知道,我们会在周期任务中周期的调用sen...原创 2021-08-30 23:26:58 · 3856 阅读 · 0 评论 -
IgH详解二、主栈启动流程(二)
继续上一篇, ec_master.ko加载后只是初始化了主栈的一些数据和状态,并未运行主栈,因为此时网络并未启动,主栈无法和从站通信。当我们加载实时网卡驱动时,此时建立了网络连接,就可以启动主栈来根据连接的从站做信息的同步,这里以e1000网卡为例:加载网卡驱动时会调用主栈ecdev_open函数,来启动主栈idle线程下面主要分析一下idle的运行流程我们只分析正常流程,报文的收发我们以后分析介绍,这里只介绍处理流程idle线程中运行主栈状态机,之前我们说...原创 2021-08-26 18:04:36 · 3889 阅读 · 12 评论 -
IgH详解二、主栈启动流程(一)
前面已经介绍过,主栈代码位于master/ 目录下,IgH主栈编出来的是ec_master.ko,所以是以KO的形式加载的,驱动的入口函数在module.c中,声明了驱动入口函数ec_init_module上面是加载驱动时可以传入的一些命令行参数IgH支持多主站和双网口设备冗余,目前我们只讨论单主站和单网卡情况主栈初始化首先创建了一个字符设备,作用是IgH上层应用程序是通过ioctl接口来调用主栈驱动程序接口的,创建/dev/EtherCAT0设备,上层应用程序可以通...原创 2021-08-25 19:36:00 · 5884 阅读 · 2 评论 -
IgH详解 一、概述
IgH源码地址:https://gitlab.com/etherlab.org/ethercatIgH是开源的EtherCAT主站协议栈,虽然功能上和从站兼容性性比不上商业协议栈,但完全能满足学习和普通场景的使用,公司也可以基于IgH作产品开发,基本能满足大部分使用场景。 本系列博客主要分为三部分1、介绍IgH主站ec_master运行流程; 2、介绍IgH对网卡驱动的实时性优化;3、IgH上层应用程序开发。 关于IgH在不同实时系统上安装,和实时系...原创 2021-08-24 20:04:12 · 16192 阅读 · 2 评论