EtherCAT理论学习笔记【二】——寻址服务与FMMU
文章目录
- 前言
- 一、报文寻址
- 1.网段寻址
- 2.设备寻址
- 二、逻辑寻址和FMMU
- 1.逻辑寻址
- 2.具体实现
- 3.实际案例解析
- 三、总结
前言
作为EtherCAT的第二篇学习笔记,本文重点介绍数据链路层中的寻址方法。第一章介绍网段寻址和段内寻址,第二章重点介绍逻辑寻址和Ethercat特有的FMMU(现场总线内存管理单元)。
EtherCAT通信由主站发送EtherCAT数据帧读写从站设备的内部存储区来实现,EtherCAT报文使用多种寻址方式操作ESC内部存储区,实现多种通信服务。
EtherCAT网络寻址方式如上图所示。一个EtherCAT网段相当于一个以太网设备,主站首先使用以太网数据帧头的MAC地址寻址到网段,然后使用EtherCAT子报文头中的32位地址寻址到段内设备。
段内寻址可以使用两种方式:设备寻址和逻辑寻址。设备寻址针对某一个从站进行读写操作。逻辑寻址面向过程数据,可以实现多播,同一个子报文可以读写多个从站设备。支持所有寻址模式的从站称为完整型从站,而只支持部分寻址模式的从站称为基本从站。
一、报文寻址
1.网段寻址
2.设备寻址
在设备寻址时,EtherCAT 子报文头内的32位地址分为16位从站设备地址和16位从站设备内部物理存储空间地址,如下图所示。16 位从站设备地址可以寻址65535个从站设备,每个设备内最多可以有64K字节的本地地址空间。
<顺序寻址>
顺序寻址时,从站的地址由其在网段内的连接位置确定,用一一个负数来表示每个从站在网段内由接线顺序决定的位置。顺序寻址子报文在经过每个从站设备时,其位置地址加1;从站在接收报文时,地址为0的报文就是寻址到自己的报文。由于这种机制在报文经过时更新设备地址,所以又被称为“自动增量寻址”。
如图所示,主站发出3个子报文,其中地址分别是0,-1,-2。数据帧到达从站1后,从站1检查到子报文的地址为0,知道这就是寻址到自己的报文,经过从站1后,所有地址加1,此时地址变为1,0,-1。从站2检查到子报文2地址为0;同理,从站3检查到子报文3地址为0。
在实际应用中,顺序寻址主要用于启动阶段,主站配置站点地址给各个从站。此后,可以使用与物理位置无关的站点地址来寻址从站。这种寻址机制能自动为从站设定地址。
<设置寻址>
设置寻址:在设置寻址过程中,从站地址在网段内的连接顺序也可以与其自身没有对应关系。该地址可以通过两种方式获取,一是在数据链路启动阶段由主站配置给从站,二是在上电初始化的时候由从站在自身的配置数据存储区里装载,在后续的运行使用中,便可以在链路启动阶段由主站应用顺序寻址的方式来读取各个从站的设置地址。
二、逻辑寻址和FMMU
1.逻辑寻址
逻辑寻址时,从站地址并不是单独定义的,而是使用寻址段内4 GB 逻辑地址空间中的一段区域。报文内的32位地址区作为整体的数据逻辑地址完成设备的逻辑寻址。
就如同我们去取快递,快递堆放在不同的货架有着不同的地址,但是快递员并不会将快递所在的地址给你,而是给你一个编号:例如B14给你,B14就是实际地址的映射,可以理解为逻辑地址。
这样的映射方式提高了效率,但是还存在着问题,如果我们有不同种类的数据存放在地址中,如果只是按照顺序编号,不同种类的数据夹杂在一起,不方便我们寻找。此时我们在映射时采取措施,将相同种类的数据映射到虚拟空间时排列在一起,就好比我们用笔记本记录语数英的笔记,如果按照上课时间来,一定是语数英混杂,现在我们将所有的语文记在一起,数学、英语记在一起,并记录语数英的第几页对应笔记本的页数,就很方便。
EtherCAT中,我们形容数据的传输就像一列高速火车,数据在指定位置上车下车就是通过逻辑寻址来实现,而管理上下车的实现就是FMMU(现场总线内存管理单元)。其原理如下图所示。
2.具体实现
FMMU存在与从站芯片ESC中,负责对从站物理地址与主站逻辑地址进行翻译并建立映射关系。主站在总线启动过程中对FMMU进行配置,内容包括:
*逻辑地址的起始地址
*数据长度(按跨字节数计算)
*逻辑地址的起始位
*逻辑地址的终止位
*从站物理地址的起始地址
*从站物理地址的起始位
*操作类型(只读、只写、读写)
*使能
以上图为例,FMMU将逻辑地址中0x00012345第2位开始的,到0x00012346以第2位终止的区域,与从站物理地址中0x0010第0位开始的区域进行映射。
从站设备收到一个数据逻辑寻址的EtherCAT子报文时,检查是否有FMMU单元地址匹配。如果有,它将输入类型数据插入到EtherCAT 子报文数据区的对应位置,以及从EtherCAT子报文数据区的对应位置抽取输出类型数据。
它的操作具有一下特点:
(1)每个数据逻辑地址字节只允许被一个FMMU读和另一个FMMU写操作,或被同一个FMMU进行读写交换操作:
(2)对一个逻辑地址的读写操作与使用一个FMMU读和另一个FMMU写操作具有相同的结果;
(3)按位读写操作不影响报文中没有被映射到的其他位,因此允许将几个从站ESC中的位数据映射到主站的同一个逻辑字节:
(4)读写一个未配置的逻辑地址空间不会改变其内容。对于主站而言,相同一个逻辑地址可以对应多个从站的物理地址,从而能够实现1条报文访问多个从站的特定数据。
指令 | 含义 |
---|---|
LRD | 使用逻辑地址读取一定长度的数据 |
LWR | 使用逻辑地址写入一定长度的数据 |
LRW | 使用逻辑地址与从站交换数据 |
3.实际案例解析
案例来源于公众号-流浪者云轩
数据帧帧头的LRW表明使用逻辑地址与从站交换数据,主站在初始化时对从站进行设置。
Slave1:FMMU0的配置为,逻辑地址是0x1000000,数据长度为8个字节,对应的从站地址为0x1800。操作类型为读。
FMMU1的配置为,逻辑地址是0x1000000,数据长度为5个字节,对应的从站物理地址为0x1C00,操作类型为写。
实际流程:Slave1将逻辑地址0x1000000开始的8个字节数据映射(写)到从站物理地址0x1800的内存区中。FMMU0通道同时映射从站2,将地址0x1000008开始的4个字节数据写到从站2物理地址0x1800的内存区。而Slave1同时将0x1C00的内存区开始的5个字节数据读到逻辑地址区。
三、总结
1、顺序寻址:
一般用在启动阶段对从站进行配置。
2、设置寻址:
设置寻址适用于主站与单个从站的大量数据交换,常用于主站和从站的邮箱通信中。
3、逻辑寻址
逻辑寻址适用于过程数据的通信,通过逻辑空间的映射,从站可以在数据帧的指定位置读取数据并插入数据帧,效率得到很大提高。
4、常见的控制系统中,逻辑映射单元都集成于主站,而ethercat在从站ESC芯片中负责这一部分任务,减轻了主控制系统的负担。
EtherCAT理论学习笔记【二】——寻址服务与FMMU相关推荐
- EtherCAT理论学习笔记【三】——WKC和SM同步管理器
文章目录 前言 一.WKC码 1.简介 2.案例 二.SyncManger 1.简介 2.案例分析 前言 详细的理论分析和案例讲解,帮助理解WKC码和SyncManager. 一.WKC码 1.简介 ...
- EtherCAT理论学习笔记【一】-数据帧结构
文章目录 前言 一.EtherCAT简介 1.运行机制 2.OSI模型 3.灵活的拓扑结构 二.EtherCAT数据帧分析 1.数据帧结构 2.Wireshark抓取数据包验证 前言 EtherCAT ...
- Netty学习笔记(二) 实现服务端和客户端
在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...
- Netty学习笔记(二)Netty服务端流程启动分析
先贴下在NIO和Netty里启动服务端的代码 public class NioServer { /*** 指定端口号启动服务* */public boolean startServer(int por ...
- 学习笔记:带你十天轻松完成 Go 微服务系列(二)- 服务拆分
学习笔记:带你十天轻松搞定 Go 微服务系列(二) 1.学习课程 2.服务拆分 2.1 按业务服务拆分 2.2 按调用方式拆分 3.创建项目目录 3.1 在 code 中新建项目 3.2 创建 mal ...
- EtherCAT (学习笔记)
文章目录 1. 简介 1.1 运动控制 1.2 实时以太网 1.3 EtherCAT 2. EtherCAT原理介绍 2.1 实时性 2.2 端口管理 2.3 EtherCAT网络拓扑 2.4 Eth ...
- 网络层笔记二、虚拟互连网络概念
网络层笔记二.虚拟互连网络 网络层笔记二.虚拟互连网络 1.现实问题 2.网络互连的中间设备 3.TCP/IP虚拟互连方式 4.一个实际例子 引言:由于不同物理网络的异构性,存定了各自寻址方式.网络接 ...
- [转载]dorado学习笔记(二)
原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...
- 趣谈网络协议笔记-二(第十三讲)
趣谈网络协议笔记-二(第十三讲) 套接字Socket:Talk is cheap, show me the code 前言 这只是笔记,是为了整理刘超大神的极客时间专栏的只是而存在的! 经常会在网络上 ...
最新文章
- spark 朴素贝叶斯
- python类变量继承_python 类的成员及继承
- 用javascript读取xml,并进行修改xml数据,解决保存没有权限问题
- [python] 命令行模式下出现cp65001异常
- gpt efi win7 linux,科学网—UEFI+GPTSSD+HDD 成功安装win10+Centos linux7 过程 - 陈长云的博文...
- poj_2299Ultra-QuickSort,树状数组离散化
- 好系统教你如何禁用或删除启动应用程序以加速Windows
- 怎样在Linux中用Vim对文件进行密码保护
- 凸优化与非线性优化基础(3)-- 二次规划Quadratic Programming
- Java中的正则表达式
- 摘录自《蔡康永的说话之道》-笔记
- android 常用URI
- 页面埋点H5 大数据uniapp 按需要更改代码就行
- 如何制作一个高转化的广告落地页(文末有福利)
- html计时器重置的代码,javascript 秒表计时器实现代码
- 等保系列之——网络安全等级保护测评:工作流程及工作内容
- 第十节 Java工具包-Collections 流--lambada表达式
- c++ opencv 身份证OCR识别:前期数据训练库准备(tesseractOCR)
- 菜鸟窝大数据课程(免费试听):Linux基础课程
- Vue文件上传、下载