倍福EAP协议应用讲解

news2024/9/20 7:55:18

倍福EAP协议应用讲解

前言

倍福提供了用于在以太网上进行实时通信的EtherCAT协议,EtherCAT协议属于现场层协议,即具有主从结构,通信只能由主站发起,从站不具备发起通信的功能,只能被动接收数据并插入数据到通信帧中。

EtherCAT协议中主站使用标准以太网卡实现,例如intel i210网卡等,一般PC上均配备有以太网卡,也称为以太网适配器(Ethernet Adapter),从站装配有专门处理EtherCAT 协议的芯片,称之为ESC(EtherCAT SubDevice Controller)芯片,注意,ESC芯片≠以太网卡芯片,其是专有芯片,仅用于EtherCAT从站设备使用

EAP协议

既然已经有了EtherCAT协议,为什么还要开发一个EAP协议呢,如上所述,EtherCAT协议是主从通信,如果是需要两个主站之间进行实时通信,那就不存在主从的说法,这种情况下就不可以使用EtherCAT协议进行通信,针对这种需求,开发了EAP协议,EAP协议用于两个或多个主站之间进行实时通信

这里有两个重要的知识点:

1)主站指的是运行有TwinCAT XAR环境的PC,没有运行TwinCAT XAR环境不可以称之为主站;

2)主站通信所使用的网卡都是标准以太网网卡,网卡必须兼容且安装有TwinCAT实时网卡驱动程序,如果不能安装实时网卡驱动是无法进行实时通信的!

EAP通信模型

EAP协议使用“发布/订阅”模型(但不限于此),发布者不需要知道网络中是不是存在订阅者,只负责“发布”,订阅者也不知道是不是存在发布者,只负责“接收”,至于是谁发送的,订阅者并不关心。实际上使用的时候,大部分情况下都会事先进行网络规划,规划员就可以清楚地知道有几个发布者,有几个订阅者,以及他们彼此之间如何进行通信。

EAP发送方式

EAP即支持确定性的实时通信,也支持异步的非实时通信,非实时通信仅支持AoE(ADS over EtherCAT)

等等,这里说的是EAP通信,为什么又提到EtherCAT了,要注意EAP是EtherCAT协议族的一部分,定义在ETG 1020中,属于EtherCAT Protocol Enhancement 部分所以并不是说EAP和EtherCAT是并列关系,属于包含关系!

1)推送模式

EAP实现了主站间的实时通信,这里所说的实时就是指过程数据交换,这种情况下,发布者可以周期性发送过程数据或者过程数据有变化时触发发送,使用的是“发布/订阅”模型,也是EAP最主要的应用方式。

2)拉取模式

拉取模式使用的是“客户端/服务器”模型,这种情况下,由EAP Client发起请求向EAP Server请求数据,EAP Server将请求的数据发送回EAP Client完成一次通信,拉取模式只能是点对点的通信!而且对于一个EAP设备而言,可以即做服务器也做客户端!这种模式效率低,因为需要客户端发起请求,消耗一个数据帧,服务器响应请求还要消耗一个数据帧。

EAP寻址方式

EAP协议支持单播,组播,广播三种连接类型,支持基于MAC寻址,基于 AMS NetID寻址,基于IP地址寻址三种寻址方式,不同的寻址方式会影响连接类型!例如,基于AMS NetID的寻址方式不支持组播和广播!

1)基于MAC寻址

基于MAC寻址支持单播,组播,广播,由于是使用MAC地址进行寻址,所以不存在网络层的概念,仅支持到数据链路层这个级别,因此想要“跨网”通信是不可能的,不支持路由器(因为路由器工作在网络层)

MAC地址是唯一的,没有网络的概念,那怎么能支持组播和广播呢,这里规定了一个固定的规则:

广播MAC地址必须是:FF-FF-FF-FF-FF-FF;

组播MAC地址是:01-01-05-04-00-00,这里有一个复杂的计算规则,对于倍福的设备,只需填写这个地址即可。

2)基于AMS NetID寻址

这中寻址方式更上一个台阶,到了网络层上,本质上是使用了ARP协议,将AMS NetID的地址和MAC地址由ARP协议来进行解析对应,ARP协议是应用在局域网中的一种地址解析协议,该种寻址方式也不能支持“跨网”通信,也不支持路由器。

3)基于IP寻址

基于UDP/IP进行寻址,IP地址由ARP协议负责解析到MAC地址上,此种方式支持“跨网”通讯,可以接入路由器。

广播的IP地址:255.255.255.255;

组播的IP地址范围:244.0.0.0-239.255.255.255

EAP性能

由于EAP可以工作在网络层上,也可以工作在数据链路层上,支持仅有交换机的局域网,也支持包括路由器的广域网,但是不同工作环境下EAP的性能会受到显著的影响。

1)仅有交换机的局域网内,不存在向上转发数据的时间开销,一般可以达到10ms的周期。

2)如果网络中有路由器,需要进行跨网通信,EAP需要使用UDP/IP的寻址方式,时间开销增大,数据包需要进入NDIS堆栈进行处理,此时可以达到100ms的周期

EAP帧结构

EAP可以通过Ethernet协议传输,也可以通过UDP/IP协议传输,通过Ethernet协议传输时,Ethernet type=0x88A4,通过UDP/IP协议传输时,UDP端口=0x88A4。通过Ethernet传输时,使用符合EtherCAT规定的数据帧结构,整个EAP帧被包含在了EtherCAT的用户数据区。

这里需要特别注意,一台PC的网口可以实现多个Publisher,每个Publisher有自己的ID,通常按照顺序ID依次为1,2,3…

EAP telegram structure 1:

不同架构下数据的对齐方式在EAP通信中的处理办法

倍福的PC有基于X86架构的,例如CX2030,也有基于ARM架构的,例如CX9020,不同架构平台下,数据的对齐方式有区别,对于X86架构,最小对齐单位是1byte,对于ARM架构,最小对齐单位是2byte或者4byte,如果你使用的两个PC的架构不一样,如下图所示的情况,就需要特别注意对齐的问题,否则可能导致变量出现错位无法正确识别!

EAP telegram structure 4:

一般处理办法是,当需要使用自定义的数据类型,例如结构体或者已有数据类型,最好按照以下顺序编排变量,优先4字节的变量,例如DINT,DWORD等,其次2字节的变量,例如UINT,WORD,最后1字节的变量,例如BOOL,SINT等。对于STRING类型的变量,默认长度为80byte+1byte,如果自己指定长度为x,则必须保证x+1是4的整数倍

EAP诊断

我们通常最为关注的是EAP的实时性能,即变量更新的最短周期,这个关键参数可以通过订阅者Subscriber下的变量的属性项Quality来判断,Quality表示该变量已经经过多少个100us没有更新,但是这个值也会受cycle time的影响,例如发布者的任务周期是10ms,但是订阅者所关联的任务周期是100ms,那就是说虽然发布者每10ms就会发送一次,但是订阅者每100ms才会去更新一次变量,所以这种情况下,Quality的值必定包含了中间空跑的9个周期,所以最理想的情况也不会低于90ms,Quality≥900.同样地,如果发布者的周期是100ms,订阅者的周期是10ms,那就意味着至少有9个周期订阅者收不到发布者的信息,Quality也不会低于900,所以在一个网络环境中,如果要测试实时性能,需要把发布者和订阅者所关联的任务周期需要设置成一样的时间,这样Quality反应出来的就是网络传输导致的延时。

另一个重要的变量属性是CycleIndex,此变量属性随发布者每个Task周期进行更新,同时随变量进行传送,订阅者通过接收的的CycleIndex来判断变量已经更新了几次,如果发布者的Cycleindex比订阅者接收到的CycleIndex要大,说明中间丢失了几次数据。

随变量进行传送,订阅者通过接收的的CycleIndex来判断变量已经更新了几次,如果发布者的Cycleindex比订阅者接收到的CycleIndex要大,说明中间丢失了几次数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础之switch分支语句

switch分支语句 ​ switch语句也称为分支语句,其和if语句有点类似,都是用来判断值是否相等,但switch默认只支持byte、short、int、char这四种类型的比较,JDK8中也允许String类型的变量做对比。 语法: switch (表达式…

了解数据库中常用存储引擎数据结构(3)

接上文了解数据库中常用存储引擎数据结构(2)-CSDN博客 目录 CoW BTree 补充:写入时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略; Lazy BTree(惰性BTree&…

【Linux】缓冲区和文件系统

目录 一、缓冲区 1.1 概念 1.2 用户缓冲区和内核缓冲区 二、磁盘的结构 三、文件系统 3.1 初识“块”和inode 3.2 磁盘分区和文件系统 一、缓冲区 1.1 概念 要理解什么是缓冲区&#xff0c;先看这段代码 #include <stdio.h> #include <string.h> #includ…

OpenTelemetry:新一代的开源可观测性标准

OpenTelemetry是由OpenTracing和OpenCensus两个开源项目合并而成&#xff0c;由云原生计算基金会&#xff08;CNCF&#xff09;托管。该项目旨在提供一套标准化的、跨语言的观测性工具&#xff0c;帮助开发人员和运维人员更好地理解和管理分布式系统的性能和行为。通过统一的Me…

html5宠物网站模板源码

文章目录 1.设计来源1.1 主界面1.2 主界面菜单1.3 关于我们界面1.4 宠物照片墙界面1.5 宠物博客界面1.6 宠物服务界面1.7 宠物团队界面1.8 联系我们界面 2.效果和源码2.1 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 【博主推荐】&a…

微信小程序同城信息共享

前端uniapp 后端thinkphp 热乎的纯手工代码

机械学习—零基础学习日志(如何理解线性代数3)

零基础为了学人工智能&#xff0c;正在快乐学习&#xff0c;每天都长脑子 行列式 最早行列式&#xff0c;是莱布尼茨用于判断&#xff0c;一个方程有没有解。例如&#xff0c;三元一次方程&#xff0c;如果有解&#xff0c;对应行列式就有值&#xff0c;但是如果无解&#xf…

一篇文章理清Java持久化脉络(关于JDBC、JPA、Hibernate、Spring Data JPA)

Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC&#xff08;古老的东西&#xff0c;只需简单知道是啥&#xff09;1.1 JDBC概念1.2 JDBC示例 三、JPA&#xff08;第二代持久化&#xff0c;代表是Hibernate等框架&#xff09;3.1 JPA概念3.2 JPA示例 四、Spri…

GB/T 38082-2019 生物降解塑料购物袋检测

生物降解塑料购物袋是指以生物降解树脂为主要原料制得的&#xff0c;具有提携结构的&#xff0c;在销售、服务等场所用于盛装及携提商品的袋制品。 GB/T 38082-2019 生物降解塑料购物袋检测项目&#xff1a; 检测项目 测试标准 尺寸偏差 GB/T 38082 感官 GB/T 38082 提掉…

html+css+js网页设计 大一电商6个页面 带js 有轮播图,增删改查等功能

htmlcssjs网页设计 大一电商6个页面 带js 有轮播图&#xff0c;增删改查等功能 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等…

JTAG标准笔记:IEEE1149.1、IEEE1149.4、IEEE1149.5、IEEE1149.6、 IEEE1500等协议之前的发展和联系

JTAG (Joint Test Action Group) 是一种串行通信协议。对于典型的串行通信&#xff0c;总线较少&#xff0c;线路数通常为1到4条&#xff0c;数据是以位为单位依次传输的。笔记中大部分图片来自JTAG标准介绍UP的视频 IEEE 1149.1&#xff0c;通常称为JTAG&#xff08;Joint Tes…

安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构&#xff0c;兼容性强、支持多协议接入&#xff0c;包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

设计模式22-迭代器模式

设计模式22-迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;动机定义结构定义结构结构图解释注意事项 C代码推导多态属性&#xff08;虚函数&#xff09;实现迭代器1. **返回值问题**2. **对象切割问题**3. **内存管理问题**4. **迭代器生命周期问题**5. **接口…

static、extern,const关键字

1、static关键字 static关键字&#xff1a;延长生命周期&#xff0c;限制作用域 static修饰局部变量&#xff1a;静态局部变量 static修饰全局变量&#xff1a;静态全局变量 static修饰函数&#xff1a;静态函数 2、extern关键字 extern&#xff1a;引用其他文件 .c 中的全局…

对敲期权组合如何操作?

对敲期权组合按照你说的对沖敲出期权应该是一种期权套利行为&#xff0c;在买入的同时卖出一个执行价格不同的期权进行对冲&#xff0c;或者在卖出一张期权合约的时候同时买进一张执行价不动的同类期权进行对中&#xff0c;这样亏报有限&#xff0c;是种套利行为&#xff0c;下…

Java基础之进制转换

1 进制基础 概念&#xff1a; ​ 进制就是进位制&#xff0c;是人们规定的一种进位方法&#xff0c;二进制逢2进1&#xff0c;八进制是逢8进1&#xff0c;十进制逢10进1&#xff0c;十六进制逢16进1。 不同进制形式&#xff1a; 二进制 0b或0B开头&#xff0c;由0和1组成 八…

爬虫配置代理:保护隐私有效地抓取数据

爬虫配置代理的详细指南 在进行网络爬虫时&#xff0c;使用代理可以帮助我们更有效地抓取数据&#xff0c;避免IP被封禁&#xff0c;并提高隐私保护。本文将详细介绍如何在爬虫中配置代理&#xff0c;包括不同的代理类型、如何选择合适的代理以及在Python中实现代理的具体步骤…

中国软件评测中心:2024年最新人工智能大语言模型技术发展研究报告 (附文档)

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力&#xff0c;正在引发经济、社会、文化等领域的变革和重塑&#xff0c;2023 年以来&#xff0c;以 ChatGPT、GPT-4 为代表的大模型技术的出台&#xff0c;因其强大的内容生成及多轮对话能力&#xff0c;引…

python-A+B again

[题目描述] 小理有一个非常简单的问题给你&#xff0c;给你两个整数 A 和 B&#xff0c;你的任务是计算 AB。输入格式&#xff1a; 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数&#xff0c;然后 2∗T 行&#xff0c;分别表示 A 和 B 两个正整数。注意整数…

调研在深度学习中如何读代码

这里调研了四个up主的内容&#xff0c;对他们讲的内容摘了一下主要的内容。想要看原文的画可以看原篇。 1.如何学习别人的代码&#xff08;代码量较大时&#xff09;_怎么学习别人的代码-CSDN博客 想要掌握的好&#xff0c;光阅读是不够的&#xff0c;一定要动手写、训练模型…