工控协议(一):Ethernet POWERLINK 学习笔记

时间:2024-04-10 08:05:05

注:本文内容基于 ETHERNET POWERLINK 的官方文档 EPSG DS 301 V1.3.0 进行整理小结。

Ethernet POWERLINK 是一个运行在数据链路层上的协议,该协议本身的设计目的是为了满足工业控制中的实时控制需求,低延迟。Ethernet POWERLINK 在使用时不需要额外分配 IP 地址,因为它的交互基于数据链路层,只需要物理地址(MAC)即可实现设备间的交互。Ethernet POWERLINK 也提供了在数据传输层进行交互的方式来满足远程的一些需要,但是限制比较多。

一、Ethernet POWERLINK 拓扑模型

Ethernet POWERLINK 基本兼容所有的拓扑模型,树形,星形,线形
工控协议(一):Ethernet POWERLINK 学习笔记
如果是总线形连接,设备内部应当如 Hub 一般将输入信号向另一端口转发,这个需求也是由POWERLINK 的通讯模式所决定的。POWERLINK 本身的连接方,除了本文将讨论的RJ-45(常规网线),也支持其它串口通讯,例如 M12.
注意:由于Ethernet POWERLINK 对低延迟的需求,同时一般情况下设备不需要远程控制,在这个网络中不应该出现路由器, 通常采用 Hub 或者 Switch 来构建网络(Hub 优先)。

二、Ethernet POWERLINK 通信模型

1. 节点(Node)----设备

在一个完整的POWERLINK 网络中,应当包含两个部分,控制节点(MN,Managing Node)以及N个受控节点(CN, Controlled Node)。MN 和 CN 是它们的称呼方式,其本质就是一个主从控制系统。
MN 作为控制节点,把握全场节奏,有权点名CN回答问题。
CN 作为受控节点,等待MN点名并回答指定问题(无法*发表意见)。

一般的,CN有两种类型,一种为 等时/同步CN(Isochronous CN),一种为 异步CN(Asynchronous CN) 。
这两个类型的区别与POWERLINK的通讯模式有关,简单的讲 POWERLINK 一个周期中有两个环节,同步与异步环节,那么 同步CN 能够参与这两个环节,而异步CN只能参与异步环节。
因为没有IP,一般一个网络内允许的设备上限是255,MN的地址默认为240,CN的地址一般从1-239。

2. 周期(Cycle)

POWERLINK 或者其它的工控协议,大致的逻辑都是相同的,周期性的向某些单元进行访问或写入数据,以达到实时监控或者控制的作用。
POWERLINK所使用的方法是将一个周期分为三个阶段,同步阶段、异步阶段以及空闲阶段。
工控协议(一):Ethernet POWERLINK 学习笔记

2.1 同步阶段(Isochronous phase)

在进入这个阶段时,MN首先会广播一个名为SoC (Start of Cycle)的数据包,提示网络内所有的CN 注意点名。然后开始挨个点名。在每一次点名的过程中,一个叫做 PReq(Poll-Request)的数据包会被定向发给特定的CN,这个数据包中包含了MN 对CN中变量的期望值。CN 收到这个数据包之后,会对这些变量进行处理,并广播一个PRes(Poll-Respond),这个数据包中包含了CN 希望其它节点看到的变量的当前值。
那有同学就问了,每次同步阶段,MN 都要对所有 CN 进行一次同步,如果在网络中有大量的CN,岂不会使得每个周期都变长,变相的增加了信息的交互时间吗?是不是有办法能够降低同步时间要求低的CN的访问频率呢?
那么POWERLINK 引入了 复用时隙的概念(Multiplexed Timeslots),对某些CN,MN 不必在每个周期中都对其进行数据同步,而是在特定次数个周期之后,对这些CN进行数据同步。
工控协议(一):Ethernet POWERLINK 学习笔记

2.2 异步阶段 (Asynchronous phase)

在进入这个阶段时,MN 会广播一个 SoA (Start of Asynchronous)数据包,告知网络内所有用户,现在是异步时间,并且这个数据包中应当包含需要交互的对象。
在这一阶段,MN 只会与一个CN 进行交互或者不与任何CN交互。
如果交互,将以ASnd (Asynchronous Send)数据包发送,MN 只提供一条服务,并且CN 在接收服务后可能不会即时反馈,而是在数个周期后再给出服务评价,这就是所谓的异步阶段。
那么这一阶段MN 提供的服务都有哪些?

  1. 身份认证(Ident Requests)
  2. 状态认证(Status Requests)
  3. 通用传输请求(Generic transmit Requests)
  4. 发言请求(Transmit Requests)

前三者的发起人都是 MN, 而第四者的发起人为 CN。这里大概讲下四个服务的内容

  1. 身份认证:在MN 启动之初,所有的CN 都将标记为未**状态,身份认证就是**这些CN的第一步。如果被点名的CN未作出相应,那么MN 将点名下一位CN,直到全部点名完毕后。重新开始新一轮点名,在新一轮点名中,标记为**状态的将被跳过。
  2. 状态请求:一般在出现错误时,MN会向CN发起状态请求,CN应当立即相应该请求,相应内容中应包含详细错误信息。除此情况外,异步CN 也会被周期性的发起该请求以检查其状况。
  3. 通用传输请求:这个请求。。。官方文档语焉不详,目测应该包含所有除上述两者外的所有请求吧(CN的网络状态配置,CN的对象映射)。
  4. 发言请求:同上,应当只在CN出现某些特定状况时会发起该请求(诸如数据错误?)。

2.3 空闲阶段(Idel Phase)

就空着 -.-

三、Network Management(NMT)

NMT 是POWERLINK的一个网络管理工具,每一个节点都配套有该服务,该服务的一部分会自动运行配置,一部分需要MN在异步阶段来对 CN进行配置。NMT 有初始化部分,这一部分对MN 与 CN都是一样的,一般的都会自动配置,这里不详述其各个状态。在初始化完成后,MN 与 CN的状态列表除命名方式外基本都是一样的,区别是MN会自动进行配置,而CN需要MN 发送NMT命令来**,并且CN多一个Stopped状态。在数据传输的过程中,只有发送NMT命令的部分是可以在网络中观测到的,其它部分都有节点自己完成。
这里以CN 的NMT 状态为例有(将状态中的CS改为MS即为MN的状态,MN没有STOPPED 状态):

  1. NMT_CS_NOT_ACTIVE: 这个状态下,设备仅允许监听网络,能够识别NMTReset 指令。当检测到SoC,PReq,PRes或者SoA的超时状态时,会进入 NMT_CS_BASIC_ETHERNET 状态。当检测到正常的SoA或SoC 时,会进入 NMT_CS_PRE_OPERATIONAL_1 状态。
  2. NMT_CS_BASIC_ETHERNET: 该状态下,设备能够响应基于 IEEE802.3 的传统以太网协议。当检测到正常SoC,PReq,PRes或SoA时,将进入NMT_CS_PRE_OPERATIONAL_1 状态。
  3. NMT_CS_PRE_OPERATIONAL_1: 该状态下,仅在接收到来自MN通过SoA 给予的 AsyncInvite 指令授权后方能发送数据包。可通过MN 的 IdentRequest 身份认证指令进行认证,认证过后应当自动跳转到NMT_CS_PRE_OPERATIONAL_2 状态。
  4. NMT_CS_PRE_OPERATIONAL_2: 该状态下,CN 将等代自身配置完成。此时能够接收并响应来自MN的 PReq指令。需要注意的是,这个时候PDO 可能还未进行映射,接收到的指令数据可能会被丢弃。在进行响应时,CN 会通过 RD flag来表明自己当前不接受这些数据。当接收到NMTEnableReadyToOperate 时,跳转至 NMT_CS_READY_TO_OPERATE 状态。当检测到错误发生时,将跳转至OPERATION_1 状态。当检测到NMTStopNode指令时,将进入NMT_CS_STOPPED状态
  5. NMT_CS_READY_TO_OPERATE: 此时应当向MN 发出准备运行的信号,并参与到正常的周期响应中。RD flag 此时因设为0,不管设备本身是否能够处理这些数据。当检测到NMTStartNode 指令时,进入NMT_CS_OPERATIONAL 状态。其它同上。
  6. NMT_CS_OPERATIONAL: 该状态是正常操作状态。可通过指令进入OPERATIONAL_2 或 STOPPED 状态,检测到异常时,将进入OPERATIONAL_1状态。
  7. NMT_CS_STOPPED: 自闭模式,该状态下CN不参与正常沟通,但任旧观察SoA阶段的数据包,可通过NMT命令重新进入NMT_CS_PRE_OPERATIONAL_2状态,检测到异常时进入OPERATIONAL_1状态。

对于MN, 其NMT 会自动配置至NMT_MS_OPERATIONAL状态(如果没有意外的话)。对于CN, 在接收到来自MN 的身份认证请求后,其将进入OPERATIONAL_2 状态,根据不同的厂家应用的方式也不一样,以B&R家的PLC为例,CN开机后第一次进入OPERATIONAL_2状态后,需要MN进行一系列的SDO命令来完成配置,配置完成后MN会向CN发送一个NMTRestConfiguration的命令来重置CN的配置(PDO映射),之后会重新发送身份认证的请求,这次CN认证之后,MN将发送NMT指令使CN进入NMT_CS_OPERATIONAL 状态。

四、应用层

1. 数据包格式

如开始所说,一般的,POWERLINK 运作在 数据链路层上(Data-Link Layer),Wireshark中的第二层。其EtherType 为固定的 (88AB)h, Ethernet 的数据内容即为POWERLINK 的内容。

Ethernet HEADER POWERLINK (Header + Data) CRC

工控协议(一):Ethernet POWERLINK 学习笔记
下表列举了各种广播时,数据链路层所对应的物理地址。

信息类型 缩写 对应物理地址
Start of Cycle SoC 01:11:1E:00:00:01
PollRequest PReq 点名
PollResponse PRes 01:11:1E:00:00:02
Start of Asynchronous SoA 01:11:1E:00:00:03
Asynchronous Send ASnd 01:11:1E:00:00:04

注意在POWERLINK 中还有Destination和Source,这里其对应的是节点序号,MN为240,CN序号取决于程序设计时的给定值(1-239)。

信息类型 格式 示例
SoC 工控协议(一):Ethernet POWERLINK 学习笔记 工控协议(一):Ethernet POWERLINK 学习笔记
PReq 工控协议(一):Ethernet POWERLINK 学习笔记 工控协议(一):Ethernet POWERLINK 学习笔记
PRes 工控协议(一):Ethernet POWERLINK 学习笔记 工控协议(一):Ethernet POWERLINK 学习笔记
SoA 工控协议(一):Ethernet POWERLINK 学习笔记 工控协议(一):Ethernet POWERLINK 学习笔记

POWERLINK也支持数据传输层的应用,但是因为对延迟响应的限制只有异步阶段能够支持。(并非每个厂家的设备都支持.)

Ethernet HEADER IP Header UDP Header POWERLINK CRC

POWERLINK 钦定了在使用数据传输层应当使用IP地址(192.168.100.节点地址)。对于不支持该功能的设备,POWERLINK 提供了一个POWERLINK Router的耦合设备,它能够接收并识别这些设备发出的数据加以调整,配上IP发送出去以实现部分远程控制。

2. 对象字典 (Object Dictionary)

POWERLINK 的对象有以下几个元素
索引(Index),对象类型(Object Type),名字(Name),数据类型 (Data Type),类别(Category),访问权限(Access),取值范围(Value Range),默认值(Default Value),处理数据对象映射(PDO Mapping)。
Access:决定了该对象是否可读可写以及数据的存储是否与子索引有关。
PDO Mapping: PDO(Process Data Object)有三个可能值,分别为 Opt 可映射, Def 默认值(取决于设备),No 不可映射。

3.服务数据 SDO(Service Data)

通过SDO 服务,MN 可以访问修改对象字典中的内容,这个步骤会出现在MN 启动初对 CN 的配置阶段(SoA 中出现)。
SDO 服务本身有两层,序列层以及命令层。
序列层负责对分段传输命令的各段进行排序,以便为POWERLINK命令层提供正确的字节流。
命令层定义用于访问对象字典参数的命令。 该层区分快速转移和分段转移。
因为SDO 是 异步阶段中的服务,所以可以通过数据传输层来实现。其逻辑原理同在数据链路层基本无异,所以不单独讨论。(唯一的区别是终点及源头的地址由原先的在POWERLINK中的1-240变为在IP中的192.168.100.1-240)
工控协议(一):Ethernet POWERLINK 学习笔记
需要注意的是,SDO服务需要初始化以建立连接。
工控协议(一):Ethernet POWERLINK 学习笔记
连接建立完成后,MN方可进行其它配置操作。配置完成后,MN会结束连接。
工控协议(一):Ethernet POWERLINK 学习笔记

小结

一般正常的工业使用过程中,只要会接线,会编程就行了,并不需要过多了解这些内容,厂商会提供完整的网络解决方案。但如果由特殊需求,需要了解其工作原理的,主要要注意的就是启动时MN是如何对CN配置的,配置完成后,SoC阶段中数据的交互值是什么,编码原理是什么。网上也有opern POWERLINK的源码,感兴趣的可以下来研究研究。