6 邮箱协议实现

6 邮箱协议实现

EtherCAT主站实现了 CANopen over EtherCAT(CoE),Ethernet over EtherCAT(EoE),File-access over EtherCAT(FoE),Vendor-specific over EtherCAT(VoE)和 Servo Profile over EtherCAT(SoE)的邮箱协议。有关详细信息,请参阅以下部分。

6.1 Ethernet over EtherCAT (EoE)

EtherCAT主站实现了 Ethernet over EtherCAT 邮箱协议[3,sec. 5.7] ,以启用以太网帧到特殊从站的隧道传输,从站既可以是有能够转发帧的物理以太网端口,也可以是有能够接收帧的IP堆栈。

虚拟网络接口 主站为每个具有EoE功能的从站创建了一个虚拟EoE网络接口。 调用接口

eoeXsY 用于没有别名地址的从站(见第7.1.2节),其中X是主站索引,Y是从站的环位置,或者调用接口

eoeXaY 用于具有非零别名地址的从站,其中X是主站索引,Y是十进制的别名地址。

发送到这些接口的帧由主站转发到相连的从站。
从站接收的帧由主站获取并转发到虚拟接口。

这具有以下优点:

  • 灵活性:用户可以决定支持EoE的从站如何与世界其他地方互连。
  • 可以使用标准工具监视EoE活动和配置EoE接口。
  • Linux内核的第2层的桥接实现(根据IEEE 802.1D MAC桥接标准)可以本地用于在支持EoE的从站之间进行以太网桥接。
  • Linux内核的网络栈可用于在支持EoE的从站之间路由数据包,并跟踪安全问题,就像具有物理网络接口一样。

EoE处理程序 虚拟EoE接口和相关功能封装在 ec_eoe_t 类中。这个类的对象称为“EoE处理程序”。 例如,主站不直接创建网络接口:它是在EoE处理程序的构造函数内部完成的。EoE处理程序还包含一个帧队列。每次,内核通过接口的hard_start_xmit()回调发送一个新的套接字缓冲区,EoE状态机将套接字缓冲区排队等待发送(见下文)。如果队列被填满,则通过调用netif_stop_queue()来暂停新套接字缓冲区的传递。

创建EoE处理程序 在总线扫描期间(参见第5.4节),主站确定每个从站所支持的邮箱协议。 这是通过检查SII的字地址0x001C处的“支持邮箱协议”掩码字段来完成的。 如果位1置1,则从站支持EoE协议。 在这种情况下,为该从站创建一个EoE处理程序。

EoE状态机 每个EoE处理程序拥有一个EoE状态机,用于通过EoE通信原语向相应的从站发送帧,并从其接收帧。 这种状态机如图6.1所示。

6 邮箱协议实现_第1张图片

图6.1:EoE状态机的转移图

RX_START

EoE状态机的初始状态。
发送邮箱检查数据报,以查询从站邮箱的新帧。 → RX_CHECK

RX_CHECK

接收邮箱检查数据报。
如果从站的邮箱不包含数据,则开始发送循环。 → TX_START
如果邮箱中有新数据,则发送数据报以获取新数据。 → RX_FETCH

RX_FETCH

接收到提取数据报。
如果邮箱数据不包含“EoE片段请求”命令,则丢弃数据,并开始发送序列。 → TX_START
如果接收到的以太网帧片段是第一个片段,则分配新的套接字缓冲区。 在任一种情况下,数据都被复制到套接字缓冲区的正确位置。
如果片段是最后一个片段,则套接字缓冲区被转发到网络栈,并且发送序列开始。 → TX_START
否则,启动新的接收序列以获取下一个片段。 → RX _START

TX START

发送序列的开始状态。
检查传输队列是否包含要发送的帧。 如果不是,则启动接收序列。 → RX_START
如果有一个帧要发送,它将被出队。 如果队列在之前处于非活动状态(因为它已满),队列将通过调用netif_wake_queue()来唤醒。发送帧的第一个片段。 → TX_SENT

TX SENT

检查第一个片段是否发送成功。
如果当前帧由更多的片段组成,则下一个帧被发送。 → TX_SENT
如果发送了最后一个片段,则开始新的接收序列。 → RX_START

EoE处理 要执行每个活动EoE处理程序的EoE状态机,必须有一个循环过程。 最简单的解决方案是与主站状态机同步执行EoE状态机(参见第5.3节)。 该方法具有以下缺点:

每几个周期只能发送或接收一个EoE片段。 这导致数据速率非常低,因为EoE状态机不在应用程序周期之间的时间中执行。 此外,数据速率将取决于应用程序任务的周期。

为了克服这个问题,需要一个独自的循环过程来异步地执行EoE状态机。 为此,主站拥有一个内核定时器,即每次定时器中断时执行。 这保证了恒定的带宽,但是提出了对主站并发访问的新问题。 所需的锁定机制在第3.4节中介绍。

自动配置 默认情况下,如果未应用任何配置,则从站将处于PREOP状态。 如果EoE接口链路设置为“up”,则所请求的从站的应用层状态被自动设置为OP。

6.2 CANopen over EtherCAT (CoE)

CANopen over EtherCAT协议[3, sec. 5.6]用于在应用程序级别配置从站并交换数据对象。

SDO下载状态机 应用SDO配置的最佳时间是在从站的PREOP状态期间,因为已经可以进行邮箱通信,从站的应用程序将从后续的SAFEOP状态更新输入数据开始启动。 因此,SDO配置必须是从配置状态机的一部分(见第5.5节):它通过一个SDO下载状态机实现,该状态机在从站进入SAFEOP状态之前执行。 这样,保证每次应用SDO配置时,都重新配置从站。

SDO下载状态机的转移图如图6.2所示。

6 邮箱协议实现_第2张图片

图6.2:CoE下载状态机的转移图

START

CoE下载状态机的开始状态。
发送“SDO下载正常请求”邮箱命令。→ REQUEST

REQUEST

检查从站是否接收到CoE下载请求。
然后,发出邮箱检查命令并启动定时器。→ CHECK

CHECK

如果没有邮箱数据可用,则检查定时器。

  • 如果超时,SDO下载中止。→ ERROR
  • 否则,将再次查询邮箱。→ CHECK

如果邮箱包含新数据,则会提取响应。→ RESPONSE

RESPONSE

如果无法提取邮箱响应,则数据无效,接收到错误的协议或接收到“中止SDO传输请求”,则SDO下载中止。→ ERROR

如果收到“SDO下载正常响应”确认,则SDO下载成功。→ END

END SDO下载成功。

ERROR SDO下载由于错误而中止。

6.3 Vendor specific over EtherCAT (VoE)

VoE协议打开了实现供应商特定邮箱通信协议的可能性。 VoE邮箱消息前缀由包含32位供应商ID和16位供应商类型组成的VoE头,此外这个协议没有更多的约束。

EtherCAT主站允许通过应用程序接口为每个从站配置创建多个VoE处理程序(参见第3章)。 这些处理程序包含通过VoE进行通信所需的状态机。

有关使用VoE处理程序的更多信息,请参阅第3.3节或 examples/ 子目录中提供的示例应用程序。

6.4 Servo Profile over EtherCAT (SoE)

SoE协议实现了通过EtherCAT邮箱在IEC 61800-7 [16]中规定的服务信道层。

SoE协议与CoE协议非常相似(参见第6.2节)。 由所谓的标识号(IDN)标识参数代替了SDO索引和子索引。实现涵盖了“SCC读”和“SCC写”原语,每个都具有切分数据的能力。

有几种方法来使用SoE实现:

  • 通过命令行工具读取和写入IDN(参见第7.1.18节)。
  • 通过应用程序接口存储任意IDN的配置(请参见第3章,即ecrt_slave_config_idn())。 在进入SAFEOP之前,这些配置在PREOP状态下进行配置期间写入从站。
  • 用户空间库(见第7.2节)提供在阻塞模式(ecrt_master_read_idn(),ecrt_master_write_idn())下读/写IDN的功能。

你可能感兴趣的:(IGH,EtherCAT,Master,EtherCAT)