应用程序接口
应用程序接口为应用程序访问EtherCAT主站提供了函数和数据结构。接口的完整文档作为Doxygen[13]注释包含在头文件include/ecrt.h中。它可以直接从文件注释读取,也可以作为一个更易读的HTML文档。HTML的生成在3节中描述。
以下部分包含应用程序接口的一般说明。
每个应用程序应该通过两个步骤使用主站:
配置请求主站并应用配置。例如,创建域,配置从属并注册PDO条目。
运行运行循环代码和交换过程数据。
主站配置
总线配置通过应用程序接口提供。1给出了可由应用程序配置的对象的概述。
主站配置
从站配置
应用程序必须告诉主站有关预期的总线拓扑。这可以通过创建“从站配置”来完成。从站配置可以看作是预期的从站设备。当创建从站配置时,应用程序提供总线位置,供应商ID和产品代码。
当应用总线配置时,主站会检查,在给定位置是否存在给定供应商ID和产品代码的从站。如果存在,从站配置将“附加”到总线上的实际从站,并根据应用程序提供的设置配置从站。从站配置的状态可以通过应用程序接口或通过命令行工具查询。
从站位置从站位置必须指定为“别名”和“位置”的元组。允许通过绝对总线位置或通过保存的称为“别名”的标识符或两者的混合来对从站寻址。别名是存储在从站E2PROM中的16位值。它可以通过命令行工具进行修改。表1显示了如何解释这些值。
表指定从站位置
0 | 0-65535 | 位置寻址。 位置参数被解释为总线中的绝对环位置。 |
1-65535 | 0-65535 | 别名寻址。 位置参数被解释为在具有给定别名地址的第一从站之后的相对位置。 |
显示了如何连接从站配置的示例。添加了一些配置,而其他配置保持分离。下面的列表给出了从最高开始的各从站配置的原因。
从站配置连接
别名为0意味着使用简单的位置寻址。从站1存在,并且供应商ID和产品代码与预期值匹配。虽然找到了位置为0的从站,但产品代码不匹配,因此不添加配置。别名非0,因此使用别名寻址。从站2是别名为0x2000的第一个从机。由于位置值为0,因此使用相同的从站。没有具有给定别名的从站,因此无法添加配置。从站2再次是别名为0x2000的第一个从机,但位置现在为因此添加从站
如果主站源代码配置了–enable-wildcards,则0xffffffff将匹配任何一个供应商ID和/或产品代码。
循环操作
要进入循环操作模式,必须“激活”主站来计算过程数据映像,并首次循环操作时应用总线配置。激活后,应用程序负责发送和接收帧。激活后无法更改配置。
VoE处理程序
在配置阶段,应用程序可以创建第3节中描述的VoE邮箱协议的处理程序。一个VoE处理程序总是属于某个从站配置,因此创建函数是从站配置的一个方法。
VoE处理器管理VoE数据和用于发送和接收VoE消息的数据报。它包含传输VoE消息所需的状态机。
VoE状态机一次只能处理一个操作。一次可以进行一个读或写操作操作启动后,处理程序必须循环执行,直到完成。之后,可以检索操作的结果.
VoE处理程序具有自己的数据报结构,它将被标记,用于在每个执行步骤之后进行交换。应用程序可以决定在发送相应的EtherCAT帧之前执行多少个处理程序。
并发主站访问
在某些情况下,一个主站由多个实例使用,例如,当应用程序执行循环过程数据交换的同时时,存在支持EoE的从站需要与内核交换以太网数据。为此,主站是共享资源,并且对其的访问必须被顺序化。这通常通过锁定信号量或其他方法保护关键部分来完成。
主站本身不能提供锁定机制,因为它没有机会知道合适的锁定类型。例如,如果应用程序在内核空间中并且使用RTAI功能,则普通内核信号量将是不够的。为此,作出了一个重要的设计决定:预定主站的应用程序必须具有完全控制,因此它必须负责提供适当的锁定机制。如果另一个实例想要访问主站,它必须通过回调请求总线访问,这必须由应用程序提供。此外,如果应用程序认为实例在当时是不合适的,则可以拒绝对主机的访问。
示例显示了两个进程如何共享一个主站:应用程序的循环任务使用主站进行过程数据交换,而主站内部EoE进程使用主站与具有EoE功能的从站通信。两者都不时访问总线,但EoE进程通过“请求”应用程序访问总线。这样,应用程序可以使用适当的锁定机制来避免同时访问总线。有关如何使用这些回调,请参阅应用程序接口文档。
并发主站访问
分布式时钟
从版本5开始,主站支持EtherCAT的“分布式时钟”功能。可以将总线上的从站量化接口,时钟同步到“参考时钟”,并且将参考量化接口,时钟同步到“主站时钟”。总线上的所有其他时钟被视为“从站时钟”。
分布式时钟
本地时钟任何支持DC的EtherCAT从站都有一个具有纳秒分辨率的本地时钟寄存器。如果从站被供电,则时钟从零开始,这意味着当从站在不同时间上电时,它们的时钟将具有不同的值。这些“偏移”必须通过分布式时钟机制来补偿。另一方面,时钟不是以相同的速度精确地运行,因为所使用的石英单元具有固有的频率偏差。该偏差通常非常小,但是在较长时间段内,误差将累积,而且本地时钟之间的差异将增大。这个时钟“漂移”也必须由DC机制补偿。
应用程序时间总线的公共时基必须由应用程序提供。使用此应用程序时间的tapp
以配置从站的时钟偏移,以编程从器件的同步脉冲产生的开始时间,以将参考量化接口,时钟同步到主时钟。
偏移补偿对于偏移补偿,每个从站提供一个“系统时间偏移”寄存器toff,它被添加到内部时钟值tint以获得“系统时间”tsys:
⇒tint=tsys−toff
主站读取两个寄存器的值,以某种方式计算新的系统时间偏移,结果系统时间应与主机的应用时间tapp匹配:
⇒tint+toff≅tapp
⇒toff=tapp−tint
⇒toff=tapp−(tsys−tof
⇒toff=tapp−tsys+toff
由读取和写入寄存器的不同时间产生的小的时间偏移误差将由漂移补偿进行补偿。
漂移补偿由于每个支持DC的从站中有特殊机制,因此可以进行漂移补偿:对“系统时间”寄存器的写操作将使得内部时间控制循环对写入时间与当前系统时间进行比较。计算出的时间误差将用作时间控制器的输入,根据误差的符号将本地时钟速度调整为稍快或慢一些
传输延迟以太网帧从从站到从站需要少量时间。所得的传输延迟时间累积在总线上,并且可以达到微秒级别,因此在漂移补偿期间必须被考虑。支持DC的EtherCAT从站提供一种测量传输延迟的机制:对于四个从站端口中的每一个,有一个接收时间寄存器。从对端口0的接收时间寄存器的写操作开始测量,一旦在相应端口上接收到帧,则当前系统时间被锁存并存储在接收时间寄存器中。主站可以读出相对接收时间,然后计算从站之间的时间延迟,最后计算从参考时钟到每个从机的时间延迟。这些值通过编程被写到从站的传输延迟寄存器中。以这种方式,漂移补偿可以达到纳秒级同步。
检查同步性支持DC的从站在地址0x092c处提供32位“系统时间差”寄存器,其中最后一次漂移补偿的系统时间差以纳秒分辨率和符号-幅值编码方式存储为了检查总线同步性,系统时间差寄存器也可以通过命令行工具循环读取:、
同步信号同步时钟是总线上同步事件的先决条件。每个支持DC的从站提供两个“同步信号”,其可以被编程以创建事件,这将,例如,使得从站应用程序在某个时刻锁存其输入。同步事件可以一次生成或循环生成,取决于哪种对从站应用程序有意义。编程同步信号设置所谓的“AssignActivate”字和同步信号的周期和移位时间。AssignActivate字是从站确定的,并且必须取自XML从站描述,其中还可以找到典型的同步信号配置“OpModes”。
如果需要同时发送和接收,则可以为从配置创建两个VoE处理程序。2本地从时钟将每10ns以9ns,10ns或11ns的频率递增。3这允许广播读取总线上的所有系统时间差寄存器以获得向上近似
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点