赞
踩
本部分为IgH Master 1.5.2 Documentation 中文翻译
英文原文链接 :http://www.etherlab.org/en/ethercat/
原文链接:http://blog.csdn.net/woshidahuaidan2011
作者:woshidahuiadan2011@hotmail.com
EtherCat-1.5.2理论上适用任何实时性(rtai,xenomai)或者非实时性的内核(linux-2.6以上的版本),一方面考虑到在内核空间相比用户空间函数的延迟时间短且内核空间可直接操作网络硬件,另一方面,由于主站大多是周期工作,而周期工作的时间大多有内核定时器触发,因此作用在内核空间定时器将更准确。因此早期就把主站设计整合到内核空间。
EtherCat-1.5.2提供8139too、e100、e1000、e1000e、 r8169等几个本地化的网络驱动,使能这些驱动后,EtherCat-1.5.2将不会调用linux kernel内置的网络驱动,无中断直接操作硬件底层,因此实时性比较好;除此之外,EtherCat-1.5.2为了解决兼容性的问题,也支持通用的网卡驱动(linux kernel 自带的网络驱动),但是相比之下实时性没有EtherCat-1.5.2本土驱动好。
EtherCat master 代码提出的域的概念。域可以使过程数据根据不同的从站组或者任务周期进行分组发送。所以说在不同的任务周期可以处理多个的域,FMMU和同步管理单元将对每个域进行配置,从而自动计算过程数据的内存映射。
本驱动支持的功能有:
Ø 通过几个有限的状态机进行通信
Ø 分布时钟的支持
Ø 支持CANopen over EtherCAT (CoE)
Ø 此外还支持 EOE VOE FOE SOE
Ø ethercat还提供了用户空间命令行工具
Ø 为了调试监听虚拟出只读网络接口
上面的图完整的描述出来主站的整个构架,对于主站驱动来说,一个驱动可生成多个主站,具体驱动加载方法为:
假如驱动只有一个主站,则为:
insmod ec_master main_devices=00:0E:0C:DA:A2:20
其中后面的为网卡的MAC地址
假如驱动要多个主站,则:
insmod ec_master main_devices=00:0E:0ncC:DA:A2:20,00:e0:81:71:d5:1c
当然加载驱动的时候还可以带上
图中可以看到,主站可运行在孤儿阶段、空间阶段和可操作阶段。
在孤儿阶段,主站等待以太网设备连接。
在空闲状态,主站已经连接了以太网设备,但是应用空间并没有对主站请求。在此阶段,主站会自动扫面从站总线并等待应用空间的操作。在此阶段,命令行工具可以访问总线,但是由于缺少总线配置,不能进行过程数据的交换。
在操作状态,主站被应用层请求,此时可对总线进行配置也可进行过程数据的交换。
主站通过过程数据对象(ProcessData Objects (PDOs))来获取从站的输入输出,PDO既可以通过SII从eeprom(一般存放的固定的PDOs数据)中读取,也可以使用COE进行配置PDOs。应用层可以在周期数据交换中注册一个PDOs条目,所有注册的PDOs条目之和通过逻辑寻址定义了过程数据映像(processdata image)。
通过创建域(Domains)可以方便的管理过程数据映像,,域允许分组PDO交换。域还负责管理pdo交换所需的数据报结构。域为数据交换过程是强制性的,所以至少有一个。因为如下原因提出了域的概念:
一般在程序的开始阶段,都要对从站进行配置以达到应用者的目的。首先应用开发者根据自己的需求创建一个配置从站的数据结构,然后将该数据结构跟实际的从站进行绑定,假如绑定成功后,从站就可按照应用者的配置进行相关的工作。
配置文件根据设定的从站在总线上面的位置、厂商ID和产品码与具体的从站进行绑定。对于从站在总线上的位置,驱动提供了别名和位置编码相结合的方式寻找对应的从站。别名和位置编码都是16位的数字,其存放在从站的EEPROM中,具体的含义是:
别名
|
位置 |
描述
|
0 | 0 - 65535 | 由于别名为0,因此其位置编码就是从站在总线上的绝对位置。 |
1 -65535 | 0 -65535 | 别名为非0值,此时,位置编码就是从站在总线上的相对别名的偏移量,从站的位置是别名的值+位置的值。 |
举个例子,比如总线上有如下几个从站,其信息为:
编号 参数 | Slave2 | Slave3 | ||
Vendor | 0X00000001 | 0X00000002 | 0X00000001 | 0X00000001 |
Product | 0X00000001 | 0X00000004 | 0X00000002 | 0X00000002 |
Alias | 0 | 0X1000 | 0X2000 | 0 |
其中假设连接顺序是Slave0------- Slave1-------Slave2------- Slave3
现假设有如下几个从站的配置:
编号 参数 | A | B | C | D | E |
Alias | 0 | 0 | 0x2000 | 0x3000 | 0x2000 |
Position | 1 | 0 | 0 | 0 | 1 |
Vendor | 0X00000002 | 0X00000001 | 0X00000001 | 0X00000001 | 0X00000001 |
Product | 0X00000004 | 0X00000002 | 0X00000002 | 0X00000002 | 0X00000002 |
那么现在就从编号为A的配置依次说明配置到底跟那个从站进行绑定
一般情况下,一个EtherCat驱动有多个实例,多个实例之间是通信可能会出现竞争,比如应用程要与从站进行数据交换的的同时,主站同时通过EOE请求与内核交换以太网数据。此时,主站在为每个实例共享资源的同时还要保证他们可以顺序访问。
由于主站本身无法知道应用层到底是使用那么锁机制(主要是实时系统跟普通的系统的锁机制不太一样),因此主站不会提供锁机制。那么他们之间如何访问方式为:EOE程序在访问之前会询问应用层是否也在访问,以免发生发文冲突。所以应用层可以通过适当的锁机制来保证多实例间的访问冲突。其原理可用下图来表示:驱动代码中,同步时钟涉及到如下几个概念:
本地时钟:每一个支持DC的从站都有一个纳秒级分辨率的本地时钟寄存器。每次从机上电,则寄存器从0开始计时,这就意味着不同的从机因为上电开机的时间不同而本地时钟也会有差异,所以需要对从机的本地时钟对比参考时钟进行偏移补偿。再者,从机的时钟一般由时钟单元为参考,所以每个从机的时钟频率也会有极小的误差,但是由于这种极小的误差在长时间的工作中会累积,所以想要完全的时钟同步,也要对这种时钟漂移做出补偿。
应用时间:应用层为总线提供的基础时间,应用时间 有如下用途:
配置从站的时间偏移
为从站的同步脉冲发生器设定开始时间
为主站时钟同步参考时钟
偏移补偿:对于偏移补偿,每个从站都有偏移补偿寄存器 ,偏移补偿值加上从站本地时钟的初始值就是参考系统时钟的值,数学表达式为:
ethercatgraph [ OPTIONS ]
输出总线拓扑图
最后输出是依靠doc工具(位于Graphviz工具包里)输出的图形,(doc 工具可参考http :// www . graphviz . org /doc / info / lang . html ),因此使用如下命令可以看到总线图形拓扑图:
ethercat graph |dot -Tsvg > bus . svg
关于doc的更详细的说明可以参考其说明文档。
英文原文链接 :http://www.etherlab.org/en/ethercat/
原文链接:http://blog.csdn.net/woshidahuaidan2011
作者:woshidahuiadan2011@hotmail.com
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。