EtherCAT主站协议栈

 时间:2024-10-15 00:24:15

1、KPA EtherCAT主站协议栈简介优势:1、最小周期时间;2、高性能;3、最小成本投入KPA EtherCAT主站协议栈的模块化结构使得该代码可完全兼容地移植到不同的操作系统中,如INtime,Linux Posix rt-preempt,QNX,RTX,VxWorks,Xenomai,Windows,WinCE等;也可以扩展至不同的功能版本,如Basic(Class B),Standard(Class A),Feature/Extension等;当然该协议栈也可以移植到各种各样不同的硬件平台上,如ARM,X86,Zynq,ppc等。

EtherCAT主站协议栈

2、硬件平台和操作系统的选择:硬件平台方面,X86,ARM和Zynq(即FPGA+ARM)各有特点,X86大多用于工控机,ARM多用于控制器,Zynq的话性能最强,多用于高精度场合。而从移植难度看,X86和ARM的开发难度相对Zynq要小一些。操作系统方面,INtime,Linux Posix rt-preempt,Xenomai等实时操作系统是首选,可让循环周期达到us级别,其次是Windows,Linux等普通的非实时操作系统。一般情况下,为了体现EtherCAT的速度优势,实时操作系统是必要的。下面是一些平台和操作系统的测试数据。

EtherCAT主站协议栈

3、功能版本的选择:根据ETG协会的EtherCAT规范,EtherCAT主站可分为两个版本,基础版本(ClassB)和标准版本(Class A)。其中基础版本包括PDO,CoE,FoE,S2S等功能,而标准版本在基础版本的基础上又增加了EoE,SoE,AoE,VoE和最主要的DC功能。所以一般情况下用得最多的是标准版本(Class A)。除此之外,KPA EtherCAT主站协议栈还带有进阶版本和拓展版本,有线缆冗余,热链接,TCP/UDP邮箱,数据记录,帧记录,外部同步,DBC-CAN,事件处理,多主站机制等功能。这些功能都是KPA公司在结合客户的真实需求之后开发出来的,实用性和可操作性都是非常强的。

EtherCAT主站协议栈

4、KPA EtherCAT主站协议栈的整体架构KPA EtherCAT主站协议栈可分为以下几个部分:1、API函数,吹涡皋陕用于管理和配置EtherCAT网络 ◆主站初始化和配置 ◆过程通信处理 ◆邮箱通信处理 ◆主/从站状态控制 ◆网络状态(从站扫描) ◆主站信息统计,主站诊断 ◆记录/错误处理2、过程通信(Process Image)3、邮箱通信实现(Mailbox implementation)4、主站进程(PI update cycle(HI-time-critical cycle),Mailbox update cycle(NR-mailbox processing cycle),Autorecovery and diagnostics cycle(LO-auto-recovery,diagnostics cycle))5、帧调度(Frame scheduler)6、操作系统抽象层(OS abstraction layer) ◆EtherCAT网络驱动(API函数:ecat_open, ecat_close, ecat_is_opened,ecat_send_frame, ecat_recv_frame, ecat_get_statistics, ecat_reset_statistics,ecat_get_link_state, ecat_set_callback, ecat_is_available, ecat_get_adapterslist.该驱动与OS网络协议栈或网卡驱动紧密结合。) ◆封装了进程处理功能,过程同步功能(如mutexes,semaphores等),时钟处理功能等。

EtherCAT主站协议栈

5、EtherCAT主站协议栈架构详解1、主站进旯皱镢涛程(Master threads)——共三个处理循环,用于初始化EtherCAT帧并传送给帧调度(frame scheduler),其中包括夸臾蓠鬏过程通信更新(HI),邮箱通信(NR),诊断和自恢复(LO)。 ◆所有要求硬实时的任务都必须在HI(PI update cycle)中完成。HI在这三个主站进程中拥有最高的优先级。 ◆NR用于邮箱数据处理。NR的优先级比HI低,但比LO要高。 ◆LO用于改变从站状态,监控,自恢复和诊断。LO并不像HI和NR那样对时序要求非常严格,所以它的优先级是最低的。2、应用程序(Application)——这是一个独立的进程,调用主站API函数实现功能。通过调用API函数,几乎可以完全控制EtherCAT主站:启动/停止主站,配置主站,更新过程数据(PI)等。3、Process task(external task)——实现各种控制逻辑的回调函数。每一次更新PI时(即HI进程)都会调用这个回调函数。4、过程映像(Process Image)——由隐藏缓冲区(Shadow buffer)和活跃缓冲区(Active buffer)构成。隐藏缓冲区:接收或发送给EtherCAT网络的数据。活跃缓冲区:与用户交互的数据,如发送数据的准备。5、帧调度(Frame scheduler)——收集EtherCAT帧并根据帧的优先级转发给EtherCAT网络驱动。6、EtherCAT网络驱动(EtherCAT network driver)——从底层网络中抽象出EtherCAT Master Stack core。7、NIC1,NIC2——物理网卡接口,用于发送报文或从EtherCAT网络接收报文。8、网卡驱动(NIC drivers)——物理网卡接口的驱动。9、Threads, mutexes, timers, etc.——封装了一些依赖于操作系统的功能,处理进程,互斥,定时等。10、RPC服务器(RPC-server)——主站协议栈的一部分。用于连接RPC远程客户端(如KPA EtherCAT Studio软件)并转发请求给EtherCAT Master Stack core。它支持user-to-user和user-to-kernel(通过代码调用)两种模式。11、远程客户端(Remote Client)——KPAEtherCAT Studio或其它兼容的软件。

6、写在移植之前:在移植之前,强烈建议只使用动态链接库(dll)去实现各种功能,以避免库的初始化问题。换局话说,用户的应用程序在使用任何Master API和EcatMkpaDestroy()之前必须先调用EcatMkpaInit(NULL)。此时,在使用Master API之前加载Master Library是非常必要的,如Windows下的ecatmkpa.dll,INtime中的ecatmkpa.rsl,RTX下的RTXEcatKPAMaster.rtdll等。如下图,Windows下通过调用LoadLibrary函数加载动态连接库ecatmkpa.dll。换句话说,使用封装库的方法可以让您的应用更独立于硬件平台,且更容易适应到其它的操作系统中。

EtherCAT主站协议栈
EtherCAT主站协议栈

7、主站初始化在用户应用程序开始之前,主站至少必须被初始化一次。主站初始化包含以下几个步骤:1、调用EcatGetAdapterList()函数获取可用的网络接口列表。2、调用EcatCreateMaster()函数为后面用到的主站创建一个唯一的标识。3、调用EcatConnectMaster()函数把步骤1选择的网口连接到已创建的主站,并预先指定期望的操作模式。4、调用EcatLoadConfigFromString()加载ENI文件。ENI文件包含了主站周期的一些参数描述,如周期时间等。5、调用EcatStartCyclicOperation()初始化周期数据交换。6、调用EcatSetAutoRecoveryTimeout()设置辅助任务的时间,辅助任务可扫描EtherCAT网络中的从站数量,也可实现其它功能。至此,主站初始化进程完成。

EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈

8、过程映像(Process Image)之前介绍协议栈架构已经提到,过程映像分为活跃区和隐藏区两部分。之所溅局柑氍以分为两部分是为了避免主站和用户程序同时调用数据时造成的各种各样的冲突。隐藏缓冲区的速度要比活跃缓冲区的快一点。但它只能工作在主站同步操作模式下(只有用户程序有接触Process Image的权限)此时,只有极少的client可以同时请求Process Image的数据。当使用不同的HMI(如SCADA,PLC配置器,或是KPA EtherCAT Studio等)作为用户应用的附加组件时,HMI对PI数据的请求是不会被实行的,否则将会引起各种不确定性。例如,当控制程序直接调用隐藏缓冲区时,HMI调用了活跃缓冲区,此时隐藏缓冲区会被重写,我们并不能确定隐藏区的数据导致是什么,也不能确定通过隐藏区发送至EtherCAT网络的数据是什么。一般情况下,强烈推荐使用活跃缓冲区。下图是Active buffer与Input Process Image的工作机制。在t1时刻,Master更新Input数据,并从Shadow buffer把数据(输入数据的最后一次更新)复制到Active buffer。在t2时刻,client2调用EcatStartReadInputs()启动PI输入数据获取操作,而t2与主站更新时刻(t1)并不是同一时刻,那么应用程序只能获取到t1时刻更新的数据缓存,此时PI输入数据是"锁定的",再到t5时刻,client2调用EcatDoneReadInputs()完成PI输入数据获取操作,"释放"PI输入数据,此时,用户程序再真正获取到真实的PI输入数据。如果另一个client1在t3时刻请求PI输入数据,那么也只能取到与t2相同的数据缓存。而当client1在t7时刻请求PI输入数据时,获取到的是t6时刻主站更新的PI输入数据。另外一个图是work with Input PI的流程图。1、调用EcatStartReadInputs()初始化当前输入数据块读操作;2、调用EcatGetVariable()从PI中获取必要的数据;3、调用EcatDoneReadInputs()确认已从PI中读到输入数据。而Output Process Image的工作机制和流程图与Input类似,只是传输方向相反而已。如第三图和第四图。

EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈

9、主站工作模式KPA EtherCAT主站协议栈支持以下三种操作模式。1、异步模式(Asynchronous mod髫潋啜缅e)指的是用户的应用程序(控制逻辑)与主站的循环(PI数据更新)这两部分是相互独立运行的。换句话说,用户的控制逻辑与主站循环是不同步的。主站循环根据初始化时的频率去更新过程数据,而控制逻辑也是按着自己的频率在运行。2、同步模式1(Synchronous 1 mode)指的是用户的控制逻辑是由Process Task callback function完成的,在每一次主站循环周期内HI都会调用Process Task callback。换句话说,用户的应用程序中并没有控制逻辑,而是Process Task callback function带有。此时,主站循环依然按照初始化频率更新数据,控制逻辑也跟着主站循环以同样的频率运行。3、同步模式2(Synchronous 2 mode)用户应用程序直接启动与EtherCAT从站进行数据交换,而主站的循环中已不带有PI数据更新部分。 ◆Synchronous 2a mode:调用EcatUpdateProcessImage()同时更新输入输出数据。 ◆Synchronous 2b mode:调用EcatUpdateProcessImageInputs()更新输入数据,调用EcatUpdateProcessImageOutputs()更新输出数据。更新输入与输出是在不同的EtherCAT帧完成的,也就是说两者是相互独立的。

EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈

10、CAN applicatilon protocol over EtherCAT® (CoE)KPA EtherCAT主站协议栈中,CoE可溅局柑氍以分为以下几块:1、获取从站的对象字典(OD),流程图如下 ◆EcatSlaveODCreateObject()——OD初始化 ◆EcatSlaveODGetObjectsIndexes()——获取从站所有索引的信息 ◆EcatSlaveODGetDescription()——返回确切索引的描述 ◆EcatSlaveODGetEntryDescription()——返回确切子索引的描述 ◆EcatSlaveODDestroyObject()——移除(releases used memory)2、读写整个OD的所有索引; ◆EcatAddCoEObject()3、读写整个OD的单个索引; ◆EcatAddCoEObject()4、紧急报文服务。

EtherCAT主站协议栈
EtherCAT主站协议栈

11、主站状态机控制在KPA EtherCAT主站协议栈中,调用以下两个函数可以实现对主站状态机的控制。 ◆EcatRequestMasterState()——设置需要的主站状态机状态 ◆EcatGetMasterState()——检查当前主站状态机状态需要注意的是状态机从某个状态切换到另一个状态是需要时间的,而不是瞬时的。这个时间取决于网络中EtherCAT从站的数量。

EtherCAT主站协议栈
EtherCAT主站协议栈

12、从站状态机控制在KPA EtherCAT主站协议栈中,调用以下两个函数可以实现对从站状态机的控制。 ◆EcatRequestSlaveState()——设置需要的从站状态机状态 ◆EcatGetSlaveState()——检查单个从站状态机状态 ◆EcatGetSlaveStateByPosIndex()——检查几个从站状态机状态需要注意的是状态机从某个状态切换到另一个状态是需要时间的,而不是瞬时的。这个时间取决于从站的内部特性(如从站应用数据的初始化时间等)。除此之外,多种不同的原因(如DC错误,错误初始化命令等)都可能导致从站状态机进入错误的状态(非请求的状态),此时,一些从站会在他们的AL Status寄存器中设置错误标志位EcatStateErrorFlag。

EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈

13、停止主站在KPA EtherCAT主站协议栈中,按以下步骤完成主站的关闭。1、调用EcatStopCyclicOperation()停止周期数据更新;2、调用EcatDisconnectMaster()释放被占用的网卡接口;3、调用EcatFreeMaster()释放主站资源;4、释放主站函数库(used Master's libraries)

EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈

14、补充:1、KPA EtherCAT主站协议栈的功能还远远不止这些,从下面的说明文档截图就可以看出来了。说到这里,不得不提一下,KPA在说明文档和技术支持方面真的做得很详细,很到位。2、除此之外,KPA EtherCAT主站协议栈还提供了超过20个的样例工程和相应的帮助文件。这可以有效地帮助开发人员理解和使用协议栈,大大缩短开发周期。

EtherCAT主站协议栈
EtherCAT主站协议栈
EtherCAT主站协议栈
  • 请求筛选模块配置为拒绝超过请求内容长度请求?
  • Altium Designer怎么关闭优化导线总线
  • 计算机网络的常见的6种拓扑结构
  • 驭灵师姬少青最后怎么了
  • 加密芯片SMEC98SP的使用方法
  • 热门搜索
    关于环保手抄报的内容 家庭文明公约手抄报 做美德少年手抄报 关于迎新年的手抄报 关于春节的手抄报大全 全国学生营养日手抄报 环保小报手抄报 字谜手抄报 关于成语的手抄报 畅想未来手抄报