此翻译主要是用翻译软件翻译,部分自己修改,若有不当之处,可以下方评论或私聊我提醒修改,若转载,请注明出处
这篇是5-9章内容,前四章链接

5状态机

EtherCAT主站的许多部分都实现为有限状态机(FSM)。 尽管这在某些方面导致了更高级别的复杂性,但也打开了许多新的可能性。
下面的短代码示例示例显示了如何读取所有从属状态,此外还说明了“顺序”编码的限制:

ec_master_simple io()函数提供了一个简单的接口,用于同步发送单个数据报并接收result1。 在内部,它对指定的数据报进行排队,调用ec_master_send_datagrams()函数发送带有排队数据报的帧,然后主动等待其接收。
这种顺序方法非常简单,仅反映三行代码。 缺点是,主机在等待数据报接收的时间内被阻塞。 当只有一个实例正在使用母版时,没有任何困难,但是如果有更多实例想要(同步地)使用母版,则不可避免地要考虑顺序模型的替代方案。
对于多个要同步发送和接收数据报的实例,必须对主机访问进行顺序化。 使用本方法,这将导致具有一个阶段的活动等待每个实例,这是不可接受的,尤其是在实时情况下,这是因为时间开销很大。
一种可能的解决方案是,将顺序执行所有实例以将其数据报排队,然后将控制权交给下一个实例,而不是等待数据报接收。最后,总线IO由更高的实例完成,这意味着所有排队的数据报都已发送和接收。下一步是再次执行所有实例,然后处理它们接收的数据报并发出新的数据报。
当将控件交还给更高的实例时,此方法导致所有实例必须保留其状态。 在这种情况下,使用有限状态机模型是很明显的。 5.1节将介绍一些使用的理论,而下面的清单通过将上面的示例编码为状态机来显示基本方法:

在所有实例执行了它们的当前状态并将它们的数据报排队之后,这些数据包便被发送和接收。 然后执行相应的下一个状态:

有关主代码中使用的状态机编程概念的介绍,请参见5.2节。

5.1状态机原理

有限状态机[9]是具有输入和输出的行为模型,其中输出不仅取决于输入,而且取决于输入的历史。 有限状态机(或有限自动机)的数学定义是六元组(Σ,Γ,S,s0,δ,ω),其中
•输入字母Σ,其中Σ=∅,包含所有输入符号,
•输出字母表Γ,其中Γ=∅,包含所有输出符号,
•状态S的集合,S =∅,
•初始状态s0的集合,其中s0 ⊆S,s0 != ∅
•转移函数δ:S×Σ→S×Γ
•输出函数ω。
状态转移函数δ通常由状态转移表或状态转移图指定。 过渡表提供了状态机行为的矩阵视图(请参见表5.1)。 矩阵行对应于状态(S = {s0,s1,s2}),列对应于输入符号(Γ= {a,b,ε})。 然后,在状态si中读取某个输入符号σj的情况下,特定行i和列j中的表内容代表了下一个状态(可能还有输出)。

同一示例的状态图类似于图5.1中的状态图。 状态用圆圈或椭圆表示,过渡用箭头表示。 靠近过渡箭头可能是满足过渡所必须满足的条件。 初始状态由实心黑色圆圈标记,箭头指向相应状态。

确定性和非确定性状态机:状态机可以是确定性的,意味着对于一个状态和输入,只有一个(只有一个)跟随状态。 在这种情况下,状态机仅具有一个启动状态。 对于单个状态输入组合,非确定性状态机可以具有多个转换。 在后一种情况下,有一组启动状态。
Moore 和 Mealy 状态机:所谓的Moore和Mealy机器之间是有区别的。 从数学上讲,区别在于输出函数ω:如果仅取决于当前状态(ω:S→Γ),则机器对应于“Moore模型”。 否则,如果ω是状态的函数并且输入字母(ω:S×Σ→Γ),则状态机对应于“ Mealy模型”。 在大多数情况下,小型机器是更实用的解决方案,因为它们的设计允许机器具有最少数量的状态。 实际上,经常使用两种模型的混合。
关于状态机的误解:有一种称为“状态爆炸”的现象,通常被视为反对在复杂环境中普遍使用状态机的说法。 必须提到的是,这一点误导了[10]。 状态爆炸通常是由于不良的状态机设计而发生的:常见的错误是将所有输入的当前值存储在状态中,或者没有将复杂的状态机划分为更简单的子状态机。 EtherCAT主站使用多个状态机,这些状态机是分层执行的,因此可以用作子状态机。 这些也在下面描述。

5.2主站的状态模型

本节将介绍主机中用于实现状态机的技术。
状态机编程:有某些方法可以用C代码实现状态机。 一种明显的方法是通过区分大写来实现不同的状态和动作:

对于小型状态机,这是一个选择。 缺点是,随着状态数量的增加,代码很快变得复杂,并且每次运行都会执行额外的区分大小写。 此外,浪费了很多压痕。
主机中使用的方法是在自己的函数中实现每个状态,并使用函数指针存储当前状态函数:


在主代码中,所有状态机3的状态指针都聚集在ec_fsm_master_t类的单个对象中。 这是有利的,因为每个状态机总是存在一个实例,并且可以按需启动。
Mealy and Moore:如果仔细查看上面的清单,可以看出执行的动作(状态机的“输出”)仅取决于当前状态。 这符合第5.1节中介绍的“Moore”模型。 如前所述,“ Mealy”模型提供了更高的灵活性,可以在下面的清单中看到:

第3+7行状态函数将根据状态转换执行即将完成的动作。
最灵活的选择是根据状态执行某些操作,然后根据状态转换执行一些操作:

该模型通常在母版中使用。 它结合了两种方法的最佳方面。
使用子状态机:为避免状态过多,已将EtherCAT主状态机的某些功能提供给子状态机。 这有助于封装相关的工作流程,而且避免了第5.1节中描述的“状态爆炸”现象。 如果主机改为使用一个大状态机,则状态数将是实际数的倍数。这会将复杂性级别提高到无法管理的水平。
执行子状态机:如果状态机开始执行子状态机,则它通常保持一种状态,直到子状态机终止。 通常,如下面的清单所示,它是从属设备配置状态机代码中删除的:

第3行change_state是状态更改状态机的状态指针。指针指向的状态函数被执行
第6行直到状态机以错误状态终止。
第11行或直到状态机终止于结束状态。 在此之前,“较高”状态机保持当前状态,并在下一个循环中再次执行子状态机。
状态机说明:以下各节描述了EtherCAT主站中使用的每个状态机。 状态机的文本描述包含对相应状态转换图中的转换的引用,这些转换标记有箭头,后跟连续状态的名称。 由琐碎的错误情况(即,从设备没有响应)引起的转换没有明确描述。 这些过渡在图中以虚线箭头绘制。

5.3主站状态机

主状态机在主线程的上下文中执行。 图5.2显示了其过渡图。 其目的是:
总线监控:监视总线拓扑。如果更改,则对总线进行(重新)扫描。
从站配置:监视从站的应用程序层状态。 如果从站未处于应有的状态,则将(重新)配置该从站。
要求处理:处理请求(来自应用程序或来自外部源)。 请求是主机必须异步处理的工作,例如SII访问,SDO访问或类似操作。

5.4从机扫描状态机

从机扫描状态机(如图5.3所示)引导着读取所需从机信息的过程。
扫描过程包括以下步骤:
节点地址:节点地址是为从站设置的,因此可以为随后的所有操作指定节点地址。
AL状态:读取初始应用程序层状态。
基本信息:基本信息(如支持的FMMU的数量)是从较低的物理内存中读取的。
数据链接:读取有关物理端口的信息。
SII大小:确定SII内容的大小以分配SII图像存储器。
SII数据:SII内容将读入母版图像。
PREOP如果从站支持CoE,则使用状态更改FSM(请参阅第5.6节)将其设置为PREOP状态,以启用邮箱通信并通过CoE读取PDO配置。
PDO使用PDO读取FSM,通过CoE(如果支持)读取PDO(请参见5.8节)。 如果成功,则将覆盖来自SII的PDO信息(如果有)。

5.5从站配置状态机

从机配置状态机(如图5.4所示)引导了配置从机并将其置于特定应用程序层状态的过程。
初始化(INIT):状态更改FSM用于使从设备进入INIT状态。
FMMU清除(FMMU Clearing):为避免从站对任何过程数据作出反应,将清除FMMU配置。 如果从站不支持FMMU,则跳过此状态。 如果INIT是请求的状态,则状态机完成。
邮箱同步管理器配置(Mailbox Sync Manager Configuration):如果从属服务器支持邮箱通信,则将配置邮箱同步管理器。否则,将跳过此状态。
预备(PREOP):状态更改FSM用于使从设备进入PREOP状态。 如果这是请求的状态,则状态机完成。
SDO配置(SDO Configuration):如果附加了从属配置(请参阅第3.1节),并且应用程序提供了任何SDO配置,则将这些配置发送到从属。
PDO配置(PDO Configuration):执行PDO配置状态机以应用所有必需的PDO配置。
PDO Sync Manager配置:如果存在任何PDO同步管理器,则将对其进行配置。
FMMU配置(FMMU Configuration):如果应用程序提供了FMMU配置(如果应用程序注册了PDO条目),则将应用它们。
安全运行状态(SAFEOP):状态更改FSM用于使从设备进入SAFEOP状态。 如果这是请求的状态,则状态机完成。
OP:状态更改FSM用于使从站进入OP状态。 如果这是请求的状态,则状态机完成。

5.6状态改变状态机

状态更改状态机(如图5.5所示)引导了更改从站的应用程序层状态的过程。 这实现了状态和转换中所述。


Start:通过“ AL控制请求”寄存器请求新的应用层状态
Check for Response :一些从站需要一些时间来响应AL状态更改命令,并且一段时间不响应。对于这种情况,将再次发出命令,直到确认为止。
Check AL Status:如果确认了AL状态更改数据报,则必须读出“ AL控制响应”寄存器,直到从机更改AL状态为止。
AL Status Code:如果从站拒绝了状态更改命令,则可以从“ AL状态更改”寄存器中的“ AL状态代码”字段中读取原因
Acknowledge State:如果状态更改不成功,则主机必须通过再次写入“ AL控制请求”寄存器来了解旧状态。
Check Acknowledge:发送确认命令后,它必须再次读出“ AL控制响应”寄存器。
“开始确认”状态是状态机的快捷方式,适用于以下情况:主机希望确认未请求的自发AL状态更改。

5.7 SII状态机

SII状态机(如图5.6所示)实现了通过Slave Information Interface中描述的Slave Information Interface读取或写入SII数据的过程。

这是状态机的读取部分的工作方式:
开始读取(Start Reading):读取请求和请求的字地址被写入SII属性。
检查读取命令(Check Read Command):如果已确认SII读取请求命令,则将启动计时器。 发出一个数据报,该数据报读取状态和数据的SII属性。
获取数据(Fetch Data):如果读取操作仍然很忙(通常将SII实现为EEPROM),则将再次读取状态。否则,数据将从数据报中复制。
写入部分的工作原理几乎相似:
开始写(Start Writing):将写请求,目标地址和数据字写入SII属性。
检查写命令(Check Write Command):如果已确认SII写请求命令,则启动计时器。 发出一个数据报,该数据报从SII属性中读取写操作的状态。
繁忙等待(Wait while Busy):如果写操作仍然很忙(由最小等待时间和忙标志的状态决定),则状态机将保持在此状态,以避免过早发出另一个写操作。

5.8 PDO状态机

PDO状态机是一组状态机,它们通过“对象访问”中描述的“ CoE通信区域”来读取或写入PDO分配和PDO映射。对于对象访问,使用基于EtherCAT的CANopen访问原语(请参见6.2节),因此从属服务器必须支持CoE邮箱协议。
PDO读取FSM(PDO Reading FSM):
该状态机(图5.7)旨在读取从站的完整PDO配置。它读取每个Sync Manager的PDO分配,并使用PDO Entry Reading FSM(图5.8)读取每个分配的PDO的映射。
基本上,它会读取每个Sync Manager的PDO分配SDO的(0x1C1x)个元素,以确定为此同步管理器分配的PDO的数量,然后读取SDO的子索引以获取分配的PDO的索引。 读取PDO索引后,将执行PDO条目读取FSM,以读取PDO映射的PDO条目。
PDO条目读取FSM(PDO Entry Reading FSM):此状态机(图5.8)读取PDO的PDO映射(PDO条目)。它通过先读取子索引零(元素数量)来确定映射的PDO条目的数量,从而读取给定PDO的相应映射SDO(0x1600 – 0x17ff或0x1a00 – 0x1bff)。 之后,读取每个子索引以获得映射的PDO条目索引,子索引和位大小。



6邮箱协议实现

EtherCAT主设备实现EtherCAT上的CANopen(CoE),EtherCAT上的以太网(EoE),EtherCAT上的文件访问(FoE),Ether CAT上的供应商特定(VoE)和EtherCAT上的伺服配置文件(SoE)邮箱协议。 有关详细信息,请参见以下各节。

6.1 Ethernet over EtherCAT (EoE)

EtherCAT主站实现了EtherCAT邮箱协议上的以太网,以实现将以太网帧隧道传输到特殊的从站,这些从站可以具有物理以太网端口以将帧转发到特定从站,也可以具有自己的IP堆栈来接收帧。
Virtual Network Interfaces:主机为每个支持EoE的从机创建虚拟EoE网络接口。这些接口称为对于没有别名地址的从站,请参见eoeXsY(请参见第7.1.2节),其中X是主索引,Y是从站的环位置;对于具有非零别名地址的从站,则eoeXaY,其中X是主索引, Y是十进制别名地址。
发送到这些接口的帧由主机转发到关联的从机,从机接收的帧由主机获取并转发到虚拟接口。
这具有以下优点:
•灵活性:用户可以决定具有EoE功能的从站如何与世界其他地方互连。
•可使用标准工具来监视EoE活动并配置EoE接口。
•Linux内核的第2层桥接实现(根据IEEE 802.1D MAC桥接标准)可以用于在支持EoE的从站之间桥接以太网流量。
•Linux内核的网络堆栈可用于在支持EoE的从站之间路由数据包并跟踪安全问题,就像具有物理网络接口一样。
EoE Handlers:虚拟EoE接口和相关功能在ec_eoe_t类中进行了封装。 此类的对象称为“ EoE处理程序”。例如,主服务器不会直接创建网络接口:这是在EoE处理程序的构造函数中完成的。EoE处理程序还包含一个帧队列。每次内核传递一个新的套接字缓冲区以通过接口的hard_start_xmit()回调进行发送时,套接字缓冲区都会排队等待EoE状态机进行传输(请参见下文)。如果队列已满,则通过调用netif_stop_queue()来暂停传递新的套接字缓冲区。
Creation of EoE Handlers:在总线扫描期间(请参阅第5.4节),主服务器确定每个从服务器的受支持邮箱协议。这是通过检查SII的字地址0x001C处的“支持的邮箱协议”掩码字段来完成的。 如果设置了位1,则从站支持EoE协议。 在这种情况下,将为该从属服务器创建一个EoE处理程序。
EoE State Machine:每个EoE处理程序都拥有一个EoE状态机,该状态机用于通过EoE通信原语将帧发送到相应的从站并从中接收帧。 此状态机如图6.1所示。

RX START:EoE状态机的开始状态。 发送邮箱检查数据报,以查询从属邮箱中的新帧。→ RX CHECK
RX CHECK:收到邮箱检查数据报。如果从属邮箱中不包含数据,则开始发送周期。→ TX START→ RX FETCH
如果邮箱中有新数据,则发送数据报以获取新数据。→ RX FETCH
RX FETCH:接收到数据报。 如果邮箱数据不包含“ EoE片段请求”命令,则将删除数据并开始发送序列。→ TX START
如果收到的以太网帧片段是第一个片段,则分配一个新的套接字缓冲区。无论哪种情况,数据都将复制到套接字缓冲区的正确位置。
如果该片段是最后一个片段,则将套接字缓冲区转发到网络堆栈,并开始发送序列。 → TX START
否则,开始新的接收序列以获取下一个片段。 → RX - START
TX START:传输序列的开始状态。 检查传输队列是否包含要发送的帧。 如果不是,则开始接收序列。→ RX START
如果有要发送的帧,则将其出队。 如果该队列之前处于非活动状态(因为已满),则通过调用netifake queue()唤醒该队列。 帧的第一个片段被发送。
TX SENT:检查是否成功发送了第一个片段。 如果当前帧包含其他片段,则发送下一个片段。→ TX SENT→ TX SENT
如果发送了最后一个片段,则开始新的接收序列。→ RX START
EoE Processing:要执行每个活动的EoE处理程序的EoE状态机,必须有一个循环过程。 最简单的解决方案是与主状态机同步执行EoE状态机(请参阅第5.3节)。 此方法具有以下缺点:
每几个周期只能发送或接收一个EoE片段。 这导致数据速率非常低,因为EoE状态机不在应用程序周期之间的时间内执行。此外,数据速率将取决于应用程序任务的周期。
为了克服这个问题,需要一个自己的循环过程来异步执行EoE状态机。为此,主机拥有一个内核计时器,该计时器在每个计时器中断时执行。这保证了恒定的带宽,但是带来了同时访问主服务器的新问题。为此所需的锁定机构在第3.4节中介绍。
Automatic Configuration:默认情况下,如果未应用任何配置,则从站将保持PREOP状态。 如果EoE接口链接设置为“ up”,则请求的从站的应用程序层状态将自动设置为OP。

6.2 CANopen over EtherCAT (CoE)

EtherCAT上的CANopen协议用于在应用程序级别配置从站并交换数据对象。
SDO Download State Machine:应用SDO配置的最佳时间是在从站的PREOP状态期间,因为已经可以进行邮箱通信,并且从站的应用将从在后续SAFEOP状态下更新输入数据开始。 因此,SDO配置必须是从属配置状态机的一部分(请参阅第5.5节):它通过SDO下载状态机实现,该状态机在进入从属设备的SAFEOP状态之前执行。这样,可以确保每次重新配置从站时都应用SDO配置。
SDO下载状态机的转换图如图6.2所示。

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节)。 代替SDO索引和子索引,所谓的标识号(IDN)标识参数。
该实现涵盖“ SCC读取”和“ SCC写入”原语,每个原语均具有对数据进行分段的能力。
有几种使用SoE实现的方法:
•通过命令行工具读取和写入IDN(请参阅第7.1.18小节)。
•通过应用程序接口存储任意IDN的配置(请参见第3章,即ecrt_slave_config_idn())。 这些配置在进入SAFEOP之前,在PREOP状态下的配置过程中被写入从站。
•用户空间库(请参阅第7.2节)提供了在阻塞模式下读写IDN的功能(ecrt_master_read_idn(),ecrt_master_write_idn())。

7 用户空间接口

对于主服务器作为内核模块运行,对其进行访问仅限于分析Syslog消息并使用modutils进行控制。
有必要实现更多接口,以便更轻松地从用户空间访问主服务器并产生更好的影响。应该可以在运行时查看和更改特殊参数。
总线可视化是另一点:例如,出于开发和调试目的,必须使用单个命令显示已连接的从站(请参见7.1节)。
应用程序接口必须在用户空间中可用,以允许用户空间程序使用EtherCAT主站功能。这是通过字符设备和用户空间库实现的(请参见7.2节)。
另一个方面是自动启动和配置。主机必须能够以持久配置自动启动(请参见第7.4节)。
最后一件事是监视EtherCAT通信。出于调试目的,必须有一种分析EtherCAT数据报的方法。最好的方法是使用流行的网络分析仪,例如Wireshark [8]或其他工具(请参见7.5节)。
本章涵盖所有这些要点,并介绍使所有这些成为可能的界面和工具。

7.1命令行工具

7.1.1字符设备

每个主实例将获得一个字符设备作为用户空间接口。 设备被命名为/ dev / EtherCATx,其中x∈{0…n}是母版的索引。
设备节点创建:如果已安装udev软件包,则将自动创建字符设备节点。 有关如何安装和配置的信息,请参见9.5节。
命令行工具这位大佬解释更详细,还带有例子
[命令行分析](https://blog.csdn.net/absinjun/article/details/81701496)

8时间方面

尽管EtherCAT的时间安排具有高度确定性,因此时间安排问题很少见,但仍可以(应)处理一些方面的问题。

8.0.1应用程序接口分析

最重要的时序方面之一是应用程序接口函数的执行时间,这些时间在循环上下文中调用。 这些功能构成了应用程序总体时序的重要组成部分。 为了测量功能的时序,使用了以下代码:

c0 = get_cycles () ;
ecrt_master_receive ( master ) ;
c1 = get_cycles () ;
ecrt_domain_process ( domain1 ) ;
c2 = get_cycles () ;
ecrt_master_run ( master ) ;
c3 = get_cycles () ;
ecrt_master_send ( master ) ;
c4 = get_cycles () ;
在每次调用接口函数之间,都会读取CPU时间戳计数器。 计数器差异借助cpu_khz变量转换为µs,该变量包含每ms的增量数。
为了进行实际测量,使用了具有2.0 GHz CPU的系统,该系统在RTAI线程中以100 µs的时间运行上述代码。 重复测量n = 100次,并将结果取平均值。 这些可以在表8.1中看到。

显然,访问硬件的功能构成了最大的份额。 ec_master_receive()执行以太网设备的ISR,分析数据报并将其内容复制到数据报对象的内存中。 ec_master_send()从不同的数据报中组装出一个帧并将其复制到硬件缓冲区中,有趣的是,这仅占接收时间的四分之一。
仅对主机内部数据结构起作用的功能非常快(∆t <1 µs)。 有趣的是,ec_domain_process()的运行时相对于平均值的标准偏差很小,而该比率大约是ec_master_run()的两倍:这可能是由于后者函数必须根据当前状态执行代码而导致的 不同的状态函数或多或少复杂。
对于大约10 µs的实时周期,理论频率可以高达100 kHz。 由于两个原因,该频率一直是理论上的:
1.处理器必须仍然能够在实时周期之间运行操作系统。
2.在下一个实时周期开始之前,必须发送和接收EtherCAT帧。 总线循环时间的确定很困难,这在8.0.2小节中有介绍。

8.0.2总线周期测量

为了测量时间,一帧是“在线”,必须采取两个时间戳记:
1.此时,以太网硬件从物理发送帧开始。
2.时间,帧被以太网硬件完全接收。
两次时间都难以确定。第一个原因是,在发送或接收帧时,中断被禁用并且主机未通知主机(轮询会使结果失真)。第二个原因是,即使启用了中断,从事件到通知的时间也是未知的。 因此,可靠地确定总线周期时间的唯一方法是电气测量。
无论如何,总线循环时间是设计实时代码时的重要因素,因为它限制了应用程序循环任务的最大频率。 实际上,这些时序参数高度依赖于硬件,通常必须使用反复试验法来确定系统的极限。
中心问题是:如果循环频率太高,会发生什么?答案是,在下一个周期开始时,尚未收到在周期结束时发送的EtherCAT帧。首先,这是由ecrt域process()注意到的,因为过程数据报的工作计数器没有增加。该功能将通过Syslog1通知用户。在这种情况下,过程数据将保持与上一个周期相同,因为该域不会删除该数据。当域数据报再次排队时,主机会注意到它们已经排队(并标记为已发送)。主机将再次将它们标记为未发送,并输出一条警告,指出数据报已“跳过”。
在提到的2.0 GHz系统上,可能的周期频率可以高达25 kHz,而不会跳过帧。通过选择更快的硬件,可以肯定地增加该值。特别是RealTek网络硬件可以用更快的硬件代替。此外,为EtherCAT设备实施专用的ISR也将有助于增加延迟。这是作者的任务清单上的两点。

9 安装

9.1 获取软件

有几种获取主软件的方法:
1.可以从EtherLab项目[1]的管理员网站1下载官方版(例如1.5.2)的压缩包。
2.最新的开发修订版(以及任何其他修订版)可以通过SourceForge.net2上主项目页面上的Mercurial [14]存储库获得。 可以使用以下命令克隆整个存储库

# hg clone http :// etherlabmaster . hg . sourceforge . net / hgweb /

etherlabmaster / etherlabmaster local-dir

3.如果没有本地Mercurial安装,则可以通过可浏览的存储库页面3中的“ bz2”链接下载任意版本的tarball。

9.2编译软件

在按9.1节所述下载tarball或克隆存储库后,必须为构建过程准备和配置源。
下载压缩包时,必须使用以下命令将其解压缩:

# tar xjf ethercat-1.5.2.tar.bz2
# cd ethercat-1.5.2/

软件配置由Autoconf [15]管理,因此发行的版本包含配置外壳脚本,必须执行该脚本以进行配置(请参见下文)。
Bootstrap:直接从存储库下载或克隆时,配置脚本尚不存在。 可以通过主资源中的bootstrap.sh脚本创建。 为此需要autoconf和automake软件包。
Configuration and Build:配置和编译过程遵循以下命令:

# ./configure
# make
# make modules



† 如果未指定此选项,则从Linux内核源中提取要使用的内核版本。

9.3建立接口文件

使用Doxygen [13]记录了源代码。 要构建HTML文档,必须安装Doxygen软件。 以下命令将在子目录doxygen-output中生成文档:

# make doc

可以通过将浏览器指向文件doxygen output / html / index.html来查看接口文档。 应用程序接口的功能和数据结构由自己的模块“应用程序接口”覆盖。

9.4安装软件

必须以root用户身份输入以下命令:第一个命令将Ether CAT标头,初始化脚本,sysconfig文件和用户空间工具安装到前缀路径。 第二个将内核模块安装到内核的modules目录中。 最后的depmod调用对于将内核模块包括到modules.dep文件中是必需的,以使其可用于init脚本中的modprobe命令。

# make install
# make modules_install

如果目标内核的模块目录不在/ lib / modules下,则可以使用DESTDIR make变量指定另一个目标目录。例如:

# make DESTDIR=/vol/nfs/root modules_install

此命令会将已编译的内核模块安装到内核发行版之前的/ vol / nfs / root / lib / modules中。
如果EtherCAT主站应作为service4运行(请参见7.4节),则必须将init脚本和sysconfig文件(或分别为systemd服务文件)复制(或链接)到适当的位置。 以下示例适用于SUSE Linux。 对于其他发行版,它可能有所不同。

# cd /opt/etherlab/
# cp etc/sysconfig/ethercat /etc/sysconfig/ethercat
# ln -s etc/init.d/ethercat /etc/init.d/ethercat
# insserv ethercat

现在,必须自定义sysconfig文件/ etc / sysconfig / ethercat(请参见7.4.2小节),或配置文件/etc/ethercat.conf(如果使用systemd)。最小的自定义设置是将MASTER0_DEVICE变量设置为要使用的以太网网络设备的MAC地址(或使用ff:ff:ff:ff:ff:ff:ff使用提供的第一个设备)并选择要加载的驱动程序 通过DEVICE_MODULES变量。
完成基本配置后,可以使用以下命令启动主机:

# /etc/init.d/ethercat start

使用systemd时,可以交替使用以下命令:

# ethercatctl start

这时,可以通过查看Syslog消息来观察主服务器的操作,该消息应如下所示。 如果将EtherCAT从设备连接到主设备的EtherCAT设备,则活动指示灯应开始闪烁。

1-2行主模块正在加载,并且一个主模块已初始化。
3-8行支持EtherCAT的e1000驱动程序正在加载。 主机接受地址为00:0E:0C:DA:A2:20的设备。
9-16行The master goes to idle phase, starts its state machine and begins scanning the bus.

9.5自动创建设备节点

ethercat命令行工具(请参阅第7.1节)通过字符设备与主机通信。 如果udev守护程序正在运行,则会自动创建相应的设备节点。 请注意,在某些发行版中,默认情况下未安装udev软件包。
默认情况下,将使用模式0660和组root创建设备节点。 如果“正常”用户应具有阅读权限,则必须使用以下内容创建一个udev规则文件(例如/etc/udev/rules.d/99-EtherCAT.rules):
KERNEL ==" EtherCAT [0 -9]*" , MODE =“0664”
创建udev规则文件并使用/etc/init.d/ethercat restart重新启动EtherCAT主站后,将自动以所需的权限创建设备节点:

# ln -l /dev/EtherCAT0

crw - rw -r - - 1 root root 252 , 0 2008 -09 -03 16:19 / dev / EtherCAT0
现在,即使是非root用户也可以使用ethercat工具(请参阅7.1节)。如果非root用户具有写访问权限,则可以使用以下udev规则代替:
KERNEL ==" EtherCAT [0 -9]*" , MODE =“0664” , GROUP =" users "

igh ethercat主站文档(中文翻译下)相关推荐

  1. igh ethercat主站文档(中文翻译上)

    此翻译主要是用翻译软件翻译,部分自己修改,若有不当之处,可以下方评论或私聊我提醒修改,若转载,请注明出处 本文是1-4章节. 1 The IgH EtherCAT Master 本章介绍有关Ether ...

  2. Pushy入门文档中文翻译

    本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/12/01/Pushy入门文档中文翻译/ pushy 这是我自己的翻译版本,原文地 ...

  3. ReactiveX文档中文翻译

    ReactiveX/RxJava文档中文版 项目地址:https://github.com/mcxiaoke/RxDocs,欢迎Star和帮忙改进. 有任何意见或建议,到这里提出 Create New ...

  4. Word文档中文翻译成英文的方法

    将Word文档在线翻译,有的时候我们在一些文档中放一些重要的内容,将这些内容放在文档中,然后通过在浏览器上进行搜索进入到在线翻译中,下面就让小编给大家简单介绍一下. 步骤一:首先我们需要在浏览器上进行 ...

  5. Surround360 Render目录下CALIBRATION文档——中文翻译

    该文档位于Surround360/Surround_render目录下 翻译正文如下: #Surround360 校准 为了在VR中产生更准确和舒适的结果,Surround 360渲染软件使用多个校准 ...

  6. Surround360 Render目录下RENDER文档——中文翻译

    该文档位于Surround360/Surround_render目录下 翻译正文如下: #Surround360 Render 步骤 为了渲染捕获的素材,我们使用位于surround360_rende ...

  7. axios 文档中文翻译

    axios中文文档(完全中文翻译) 由于使用网上一些翻译文档时发现,内容多被广告隔离成小块.用起来有点不方便同时夹杂部分英文.于是索性把 axios 自己翻译了一遍,贡献给大家便查. 原文档地址-- ...

  8. Next.js v4.1.4 文档中文翻译

    最近想稍稍看下 React的 SSR框架 Next.js,因为不想看二手资料, 所以自己跑到 Github上看,Next.js的文档是英文的,看倒是大概也能看得懂, 但有些地方不太确定,而且英文看着毕 ...

  9. RFC文档(中文翻译版本)

    RFC文档官方在线阅读地址:https://tools.ietf.org/rfc/index 以下是部分中文翻译的文档连接 RFC文档目录 RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 ...

最新文章

  1. yii2服务器无法加载文件夹,用Yii2做的项目在部署到云服务器后访问无反应,也没有任何数据响应...
  2. 写工作总结的要领是什么?
  3. The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xm
  4. JS-获取当前日期-月的天数
  5. php mariadb 查询语法,从PHP调用的查询中的MySQL(MariaDB)执行超时
  6. 旧访客设计模式的新生活
  7. 为什么很多人C语言学不下去
  8. 马云老师给AI留了几句话
  9. 什么才是Web前端开发的必备核心技能?
  10. linux 跳板机得搭建
  11. 将连接MySQL数据库的java项目程序打包成为.jar格式
  12. sqlserver 修改表字段长度(好记性不如烂笔头)
  13. 山东大学高频电子线路实验一 高频小信号放大实验详解
  14. win10系统CUDA10.0安装教程(for tensorflow2.0)
  15. 飞鱼星行为管理路由器【限制视频】方法(网页+客户端)
  16. linux下操作3G模块
  17. Web页面切图和CSS注意事项
  18. c语言程序中a表示什么区别,C语言中if(!a)表示什么意思?
  19. 导出pdf文件时加图片水印
  20. windows10更新报错0x80244022的解决方法

热门文章

  1. 喻红叶《Java并发-ReentrantReadWriteLock源码分析》
  2. PANGU 生态乐园 NFT 系列上线 The Sandbox 市场平台
  3. 从零开始学习3D可视化之坐标系
  4. 【题解】吉首大学第六届新星杯暨程序设计大赛(新生网络同步赛).2016
  5. pfam基本介绍,以及蛋白质序列下载
  6. 【IAP】新建虚拟产品、新建测试帐号、获取产品列表、向自己的服务器生成订单、发送购买请求、服务端数据安全
  7. 分享手机必备实用APP,建议收藏
  8. css 图片切换模版
  9. 【生动理解】深度学习中常用的各项评价指标含义TP、FP、TN、FN、Accuracy、Recall、IoU、mIoU
  10. Ignite集群搭建及整合SpringData实现增删改查