EtherCAT主站源代码或API函数库:德国KPA EtherCAT主站协议栈
X86/ARM/Zynq等硬件平台,注意CPU和NIC(网卡)的型号
X86/ARM/Zynq相对应的开发环境
INtime,QNX,RTX,VxWorks,Xenomai,Linux Posix rt-preempt,Windows等实时或非实时操作系统
EtherCAT配置工具:KPA Studio配置工具软件
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等。
硬件平台和操作系统的选择:硬件平台方面,X86,ARM和Zynq(即FPGA+ARM)各有特点,X86大多用于工控机,ARM多用于控制器,Zynq的话性能最强,多用于高精度场合。而从移植难度看,X86和ARM的开发难度相对Zynq要小一些。操作系统方面,INtime,Linux Posix rt-preempt,Xenomai等实时操作系统是首选,可让循环周期达到us级别,其次是Windows,Linux等普通的非实时操作系统。一般情况下,为了体现EtherCAT的速度优势,实时操作系统是必要的。下面是一些平台和操作系统的测试数据。
功能版本的选择:根据ETG协会的EtherCAT规范,EtherCAT主站可分为两个版本,基础版本(ClassB)和标准版本(Class A)。其中基础版本包括PDO,CoE,FoE,S2S等功能,而标准版本在基础版本的基础上又增加了EoE,SoE,AoE,VoE和最主要的DC功能。所以一般情况下用得最多的是标准版本(Class A)。除此之外,KPA EtherCAT主站协议栈还带有进阶版本和拓展版本,有线缆冗余,热链接,TCP/UDP邮箱,数据记录,帧记录,外部同步,DBC-CAN,事件处理,多主站机制等功能。这些功能都是KPA公司在结合客户的真实需求之后开发出来的,实用性和可操作性都是非常强的。
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主站协议栈架构详解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)——KPA EtherCAT Studio或其它兼容的软件。
写在移植之前:在移植之前,强烈建议只使用动态链接库(dll)去实现各种功能,以避免库的初始化问题。换局话说,用户的应用程序在使用任何Master API和EcatMkpaDestroy()之前必须先调用EcatMkpaInit(NULL)。此时,在使用Master API之前加载Master Library是非常必要的,如Windows下的ecatmkpa.dll,INtime中的ecatmkpa.rsl,RTX下的RTXEcatKPAMaster.rtdll等。如下图,Windows下通过调用LoadLibrary函数加载动态连接库ecatmkpa.dll。换句话说,使用封装库的方法可以让您的应用更独立于硬件平台,且更容易适应到其它的操作系统中。
主站初始化在用户应用程序开始之前,主站至少必须被初始化一次。主站初始化包含以下几个步骤:1、调用EcatGetAdapterList()函数获取可用的网络接口列表。2、调用EcatCreateMaster()函数为后面用到的主站创建一个唯一的标识。3、调用EcatConnectMaster()函数把步骤1选择的网口连接到已创建的主站,并预先指定期望的操作模式。4、调用EcatLoadConfigFromString()加载ENI文件。ENI文件包含了主站周期的一些参数描述,如周期时间等。5、调用EcatStartCyclicOperation()初始化周期数据交换。6、调用EcatSetAutoRecoveryTimeout()设置辅助任务的时间,辅助任务可扫描EtherCAT网络中的从站数量,也可实现其它功能。至此,主站初始化进程完成。
主站工作模式KPA EtherCAT主站协议栈支持以下三种操作模式。1、异步模式(Asynchronous mode)指的是用户的应用程序(控制逻辑)与主站的循环(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帧完成的,也就是说两者是相互独立的。
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、紧急报文服务。
主站状态机控制在KPA EtherCAT主站协议栈中,调用以下两个函数可以实现对主站状态机的控制。 ◆EcatRequestMasterState()——设置需要的主站状态机状态 ◆EcatGetMasterState()——检查当前主站状态机状态需要注意的是状态机从某个状态切换到另一个状态是需要时间的,而不是瞬时的。这个时间取决于网络中EtherCAT从站的数量。
从站状态机控制在KPA EtherCAT主站协议栈中,调用以下两个函数可以实现对从站状态机的控制。 ◆EcatRequestSlaveState()——设置需要的从站状态机状态 ◆EcatGetSlaveState()——检查单个从站状态机状态 ◆EcatGetSlaveStateByPosIndex()——检查几个从站状态机状态需要注意的是状态机从某个状态切换到另一个状态是需要时间的,而不是瞬时的。这个时间取决于从站的内部特性(如从站应用数据的初始化时间等)。除此之外,多种不同的原因(如DC错误,错误初始化命令等)都可能导致从站状态机进入错误的状态(非请求的状态),此时,一些从站会在他们的AL Status寄存器中设置错误标志位EcatStateErrorFlag。
停止主站在KPA EtherCAT主站协议栈中,按以下步骤完成主站的关闭。1、调用EcatStopCyclicOperation()停止周期数据更新;2、调用EcatDisconnectMaster()释放被占用的网卡接口;3、调用EcatFreeMaster()释放主站资源;4、释放主站函数库(used Master's libraries)
补充:1、KPA EtherCAT主站协议栈的功能还远远不止这些,从下面的说明文档截图就可以看出来了。说到这里,不得不提一下,KPA在说明文档和技术支持方面真的做得很详细,很到位。2、除此之外,KPA EtherCAT主站协议栈还提供了超过20个的样例工程和相应的帮助文件。这可以有效地帮助开发人员理解和使用协议栈,大大缩短开发周期。
选择好符合您要求的硬件,最主要是CPU和网卡
选择合适的操作系统