热点:

    EtherCAT主站协议栈解析

      [   原创  ]   作者:
    收藏文章 暂无评论

    EtherCAT工业实时以太网凭借其高速度和高稳定性,广泛应用于运动控制、机器人及CNC等领域。为实现主站产品的快速高效开发,采用成熟的商业版EtherCAT主站协议栈进行移植,具备实施简便、开发周期短、成本合理等优势,是当前极具可行性的技术路径。

    1、 KPA EtherCAT主站协议栈功能与特点概述

    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等不同处理器平台,适应工业自动化中多样化的硬件环境。这种跨平台、多版本的支持能力,使其在复杂应用场景中具备广泛的适用性与良好的可扩展性,为系统集成提供了高效可靠的解决方案。

    4、 选择合适的硬件与操作系统平台

    5、 在硬件平台选择上,X86、ARM与Zynq各具优势。X86常用于工业控制设备,ARM广泛应用于各类控制器,而Zynq融合FPGA与ARM架构,性能更优,适用于高精度场景。从软件移植与开发难度来看,X86和ARM相对简单,Zynq则因结构复杂,开发门槛较高。

    6、 在操作系统选择上,优先考虑INtime、Linux Posix rt-preempt及Xenomai等实时系统,可实现微秒级循环周期,能充分发挥EtherCAT的高速性能;普通非实时系统如Windows和常规Linux则次之。通常为展现EtherCAT的通信优势,采用实时操作系统尤为必要。

    7、 以下为各平台及操作系统的测试结果数据。

    8、 选择合适的功能版本

    9、 依据ETG协会发布的EtherCAT技术规范,EtherCAT主站被划分为两个主要等级:基础级(Class B)和标准级(Class A)。基础级主站支持PDO、CoE、FoE以及S2S等核心功能,满足基本的通信与控制需求。而标准级在继承基础级所有功能的基础上,进一步集成了EoE(以太网数据封装)、SoE(伺服通信扩展)、AoE(ADS通信扩展)、VoE(变量通信扩展)以及至关重要的分布式时钟(DC)功能,显著提升了系统的实时性与同步精度,因此在工业应用中更为普遍,广泛采用标准级配置。此外,KPA公司开发的EtherCAT主站协议栈在标准功能之外,还提供了进阶版与扩展版解决方案,涵盖有线冗余、热插拔连接、TCP/UDP邮箱通信、运行数据与报文帧记录、外部时钟同步、DBC-CAN协议转换、事件触发机制以及多主站协同运行等多项增强特性。这些功能均基于大量客户实际应用场景深入调研后设计实现,充分兼顾了系统稳定性、灵活性与工程实用性,能够有效应对复杂工业环境下的多样化需求。

    10、 KPA EtherCAT主站协议栈的结构设计与功能组成

    11、 KPA EtherCAT主站协议栈可划分为多个功能模块。

    12、 用于EtherCAT网络管理与配置的API函数

    13、 主站启动与设置

    14、 进程间通信处理

    15、 处理邮箱通信

    16、 主从站状态调控

    17、 网络状态(从站扫描中)

    18、 主站数据统计与故障诊断

    19、 记录与错误处理

    20、 过程通信是指在系统中各进程间的信息交换与协调机制。

    21、 通过邮箱通信机制实现进程间的数据传递与同步功能。

    22、 主站进程包括三个主要周期:高实时性要求的PI更新周期,负责周期性地同步过程数据;非实时性的邮箱处理周期,用于主从站之间的配置信息与非关键数据交换;以及低优先级的自动恢复与诊断周期,用于执行故障检测、状态监控和系统自恢复功能。这三个周期协同工作,确保通信稳定、故障及时响应,并维持系统的可靠运行,适用于工业自动化中对实时性与可靠性兼具的应用场景。

    23、 帧调度器负责管理图形渲染中的帧处理顺序与执行。

    24、 操作系统抽象层是屏蔽底层操作差异,提供统一接口的中间层软件。

    25、 提供EtherCAT网络驱动支持,包含ecat_open、ecat_close、ecat_is_opened等核心API函数,实现网络连接的开启、关闭及状态检测功能。

    26、 该驱动程序提供了一系列核心接口函数,包括发送与接收以太网帧、获取及重置统计信息、查询链路状态、设置回调函数、检测设备可用性以及获取适配器列表等功能。这些功能模块与操作系统的网络协议栈及底层网卡驱动深度集成,确保了高效的数据交互与系统协同工作。通过紧密耦合的设计,驱动能够实时响应网络事件,精确管理通信流程,并支持灵活的配置与监控机制,从而保障了以太网通信的稳定性与实时性,适用于对响应速度和可靠性要求较高的工业自动化等场景。

    27、 集成进程管理、同步机制(如互斥锁、信号量)以及时钟控制等功能,提供完整的系统级支持。

    28、 深入解析EtherCAT主站协议栈结构

    29、 主站进程包含三个循环处理任务,负责初始化EtherCAT帧并将其发送至帧调度模块。这三个循环分别执行过程通信更新(HI)、邮箱通信(NR),以及系统的诊断与自恢复功能(LO),确保通信稳定与系统可靠性。

    30、 所有硬实时任务必须在HI周期内完成,且HI在三个主站进程中具有最高优先级。

    31、 NR用于邮箱数据处理,其优先级低于HI但高于LO。

    32、 LO用于从站状态调整、监控、自恢复及诊断,时序要求不如HI和NR严格,因此优先级最低。

    33、 应用程序是一个独立运行的进程,通过调用主站提供的API函数来实现各项功能。借助这些接口,可对EtherCAT主站进行全方位控制,包括启动与停止、系统配置以及实时更新过程数据(PI)等操作,具备高度的灵活性和控制能力。

    34、 处理任务(外部任务)——用于实现各类控制逻辑的回调函数,每次更新PI时(即HI进程执行期间)均会触发该回调函数的调用。

    35、 过程映像由隐藏缓冲区与活跃缓冲区共同组成,用于实现数据的暂存与实时更新,确保系统运行过程中信号处理的稳定性和连续性。

    36、 用于存储与EtherCAT网络收发数据的隐藏缓冲区域。

    37、 用于用户交互的临时存储区,如待发送数据的准备。

    38、 帧调度负责收集EtherCAT数据帧,并依据其优先级顺序,将其分发至EtherCAT网络驱动进行后续处理。

    39、 EtherCAT网络驱动负责将EtherCAT主站核心与底层网络进行隔离,实现通信协议的封装与数据传输的管理,确保上层应用能够高效、稳定地与EtherCAT网络设备进行交互。

    40、 NIC1和NIC2为物理网卡接口,负责向EtherCAT网络发送或接收数据报文。

    41、 负责管理物理网络接口卡的驱动程序,确保硬件与系统正常通信。

    42、 封装了线程、互斥锁、定时器等功能,用于处理进程同步、资源互斥访问及定时任务等依赖操作系统的核心操作。

    43、 RPC服务器是主站协议栈的重要组成部分,主要用于与远程RPC客户端(例如KPA EtherCAT Studio软件)建立连接,并将接收到的操作请求转发至EtherCAT主站协议核心进行处理。该服务器支持两种通信模式:一种是用户空间到用户空间的交互方式,另一种是通过代码调用实现的用户空间到内核空间的数据传输,从而灵活满足不同应用场景下的通信需求,提升系统集成与控制的效率。

    44、 远程客户端可使用KPA EtherCAT Studio或其它兼容软件进行连接与操作。

    45、 移植前言

    46、 移植前建议优先采用动态链接库(DLL)实现功能,以规避库初始化相关问题。简言之,在调用任何Master API或执行EcatMkpaDestroy()之前,用户程序必须首先调用EcatMkpaInit(NULL),确保初始化流程正确无误,从而保障系统稳定运行和资源的合理分配。

    47、 在调用Master API之前,必须先加载相应的主站库文件,例如Windows平台的ecatmkpa.dll、INtime环境中的ecatmkpa.rsl,以及RTX系统下的RTXEcatKPAMaster.rtdll等。以Windows为例,可通过调用LoadLibrary函数来加载ecatmkpa.dll这一动态链接库,确保后续API接口能够正常运行。此步骤是实现主站功能的前提,不可省略。所示,库的正确加载为后续操作提供了基础支持,保障系统稳定通信与控制。

    48、 采用封装库的方式可提升应用对硬件平台的独立性,增强跨操作系统的兼容与适应能力。

    49、 主站启动初始化

    50、 主站需至少初始化一次方可启动用户程序,该过程包含若干必要步骤。

    51、 调用EcatGetAdapterList函数,获取当前系统中可用的网络适配器列表信息。

    52、 调用EcatCreateMaster()函数,为主站生成一个唯一标识,供后续使用。

    53、 调用EcatConnectMaster()函数,将步骤1选定的网口与已创建的主站建立连接,并提前设定期望的操作模式。

    54、 调用EcatLoadConfigFromString()函数加载ENI文件,该文件包含主站周期相关参数的定义,例如周期时间等信息。

    55、 调用EcatStartCyclicOperation()函数以启动并初始化周期性数据交换操作。

    56、 调用EcatSetAutoRecoveryTimeout()函数可设定辅助任务的执行时间,该任务不仅能扫描EtherCAT网络中的从站数量,还可完成其他相关操作。

    57、 主站初始化至此顺利完成。

    58、 过程映像指系统运行时内存中的数据状态快照。

    59、 协议栈架构中,过程映像被划分为活跃区和隐藏区,此举旨在防止主站与用户程序在同时访问数据时发生冲突,确保系统运行的稳定性和数据的一致性。

    60、 隐藏缓冲区的数据更新速度略快于活跃缓冲区,但其仅适用于主站同步操作模式,且在此模式下,仅有用户程序具备访问过程映像(Process Image)的权限。由于系统限制,同时请求过程映像数据的客户端数量非常有限。当在用户应用程序中集成多个HMI组件(如SCADA系统、PLC配置工具或KPA EtherCAT Studio等)时,这些HMI设备对过程映像数据的访问请求将无法被有效执行,否则可能引发系统运行的不确定性。例如,在控制程序直接读写隐藏缓冲区的过程中,若HMI尝试访问活跃缓冲区,可能导致隐藏缓冲区内容被意外覆盖。这种并发访问会破坏数据的一致性,使得隐藏缓冲区中的原始数据状态难以追踪,进而无法准确判断哪些数据会被实际发送至EtherCAT网络。因此,在使用隐藏缓冲区时必须严格管控访问权限与访问时机,避免多源访问带来的冲突与数据紊乱,确保控制系统稳定可靠运行。

    61、 通常建议优先采用活跃缓冲区以提升性能。

    62、 所示,展示了Active buffer与Input Process Image之间的工作流程。在t1时刻,主站完成输入数据的更新,并将Shadow buffer中最后一次更新的数据复制至Active buffer中。到了t2时刻,client2调用EcatStartReadInputs()函数,启动对PI输入数据的读取操作。由于t2与主站更新时间t1并不一致,应用程序此时只能访问t1时刻写入Active buffer中的数据副本,该数据在此期间处于锁定状态。直到t5时刻,client2调用EcatDoneReadInputs(),标志着本次PI输入数据读取过程结束,系统随之释放该数据,用户程序方可完整获取这一周期内的真实输入信息。若另一客户端client1在t3时刻发起PI输入数据读取请求,由于此前的数据尚未解锁,因此它也只能获得与client2相同、即t1时刻的数据缓存。而当client1在t7时刻再次请求PI输入数据时,此时主站在t6时刻已完成新一轮的数据更新,并将新数据写入Active buffer,因此client1能够获取到t6时刻刷新后的最新PI输入数据,从而确保了数据的时效性与一致性。整个机制通过缓冲区切换与访问控制,保障了多客户端环境下输入数据读取的稳定与准确。

    63、 另一张图展示了与输入PI协同工作的流程。

    64、 调用EcatStartReadInputs()函数启动当前输入数据块的读取初始化操作。

    65、 通过调用EcatGetVariable()函数从PI系统中读取所需数据。

    66、 调用EcatDoneReadInputs()函数,确认已成功从PI读取输入数据。

    67、 Output Process Image的工作原理与Input相似,仅数据传输方向相反,具体流程可参考第三和第四图示。

    68、 主站运行方式

    69、 KPA EtherCAT主站协议栈具备三种运行模式。

    70、 异步模式指任务在不同时间独立执行,无需等待彼此完成。

    71、 用户的应用程序(控制逻辑)与主站的循环数据更新彼此独立运行,二者并不同步。主站依据初始化设定的周期频率更新过程数据,而控制逻辑则按照自身的运行节奏独立执行,两者各自按预定频率进行操作,互不影响,保持分离的运行状态。

    72、 同步模式一,即同步传输方式之一,确保数据发送与接收严格同步进行。

    73、 用户的控制逻辑由过程任务回调函数实现,在每个主站循环周期内,主机都会调用该回调函数来执行相关操作。这意味着应用程序本身不包含直接的控制流程,所有控制功能均集中于回调函数中处理。尽管主程序未显式编写控制代码,但通过这一机制,控制逻辑仍能随主站循环同步运行。主站的数据更新频率在初始化时已设定,并在整个运行过程中保持不变,而控制逻辑也严格遵循该周期频率执行,确保系统响应的实时性与稳定性,实现高效、有序的数据交互与控制处理。

    74、 同步模式二,即Synchronous 2 mode,是一种数据传输方式。

    75、 用户程序直接与EtherCAT从站通信交换数据,主站循环中不再包含PI数据更新环节。

    76、 同步2a模式:通过调用EcatUpdateProcessImage()函数,实现输入与输出数据的同时更新。

    77、 在同步2b模式下,通过调用EcatUpdateProcessImageInputs()函数来更新输入数据,同时通过EcatUpdateProcessImageOutputs()函数更新输出数据。输入与输出的更新操作分别在不同的EtherCAT通信帧中进行,彼此之间互不影响,具有独立性。该机制确保了数据传输的稳定性与实时性,适用于对时序控制要求较高的应用场景,有效提升系统响应的精确度和可靠性。

    78、 KPA EtherCAT主站协议栈的CoE主要划分为若干功能模块。

    79、 获取从站对象字典的流程所示。

    80、 创建Ecat从站对象字典并完成初始化操作

    81、 获取从站设备所有对象索引的相关信息。

    82、 获取指定索引的详细描述信息。

    83、 获取指定子索引的详细描述信息。

    84、 EcatSlaveODDestroyObject() 函数用于释放已分配的内存资源,移除指定对象,确保系统内存的有效管理与无泄漏运行。

    85、 读写OD全部索引数据

    86、 读写OD中单个索引的数据。

    87、 紧急消息服务

    88、 主站状态控制机制

    89、 通过调用KPA EtherCAT主站协议栈中的两个函数,可实现对主站状态机的有效控制。

    90、 设置主站状态机所需的目标状态。

    91、 EcatGetMasterState()用于检测主站状态机的当前运行状态。

    92、 状态机在不同状态间的切换需要一定时间,并非瞬间完成,该时长受网络中EtherCAT从站数量的影响。

    93、 从站状态控制

    94、 在KPA EtherCAT主站协议栈中,通过调用两个特定函数即可实现对从站状态机的有效控制。

    95、 EcatRequestSlaveState()函数用于设定从站状态机的目标状态。

    96、 EcatGetSlaveState()函数用于检测单个从站状态机的运行状态。

    97、 EcatGetSlaveStateByPosIndex()函数用于检测多个从站状态机的运行状态。

    98、 状态机在不同状态间切换需要一定时间,无法瞬间完成,所需时长由从站内部特性决定,例如从站应用数据的初始化时间等因素均会影响切换速度。

    99、 除上述情况外,多种因素(如数据链路错误、初始化指令错误等)均可能使从站状态机进入非预期的异常状态。在此情况下,部分从站会通过在其应用层状态寄存器中置位EcatStateErrorFlag来标记通信状态异常,以提示主站当前设备状态不符合预期,需进行相应处理与恢复操作。

    100、 关闭主站

    101、 在KPA EtherCAT主站协议栈中,依照规定流程逐步执行主站关闭操作。

    102、 调用EcatStopCyclicOperation()函数以终止周期性数据更新操作。

    103、 调用EcatDisconnectMaster()函数以释放占用的网卡接口资源。

    104、 调用EcatFreeMaster()函数释放主站占用的资源。

    105、 启用主站函数库功能,调用并运行主站内置的各类程序模块。

    106、 补充:

    107、 KPA EtherCAT主站协议栈配备二十多个示例工程及配套帮助文档,便于开发人员快速掌握其使用方法,显著提升开发效率,有效缩短项目开发周期。

    soft.zol.com.cn true https://soft.zol.com.cn/1078/10781257.html report 12600 EtherCAT工业实时以太网凭借其高速度和高稳定性,广泛应用于运动控制、机器人及CNC等领域。为实现主站产品的快速高效开发,采用成熟的商业版EtherCAT主站协议栈进行移植,具备实施简便、开发周期短、成本合理等优势,是当前极具可行性的技术路径。 1、 KPA EtherCAT主站...
    不喜欢(0) 点个赞(0)
    随时随地资讯查报价 就上ZOL手机客户端,点击或扫描二维码下载
    立即下载

    Timers

    更新时间:2009年07月06日

    用户评分:0 | 0人点评

    软件类型:免费软件

    软件语言:英文

    Timers
    • 更新时间:2009年07月06日
    • 软件大小:0.3MB
    • 软件分类:美化增强
    • 语言种类:英文
    • 软件评级:0 人点评