PROFINET如何实现实时性
平时我们都听过文艺作品要“源于生活而高于生活”。PROFINET是基于工业以太网的,用文艺范儿的词汇说就是“源于以太网而高于以太网”。那么,PROFINET是怎么做到“高于以太网”的呢?
要做到比普通以太网要犀利,重要的是PROFINET要做到实时性,而要做到实时性,首先就要解决确定性的问题。前面提到普通以太网会出现介质访问冲突的问题,不满足“确定性”的标准。那么一般解决冲突的方法有哪些呢?
- 既然PROFIBUS总线和PROFINET关系密切,先看看总线是如何的解决方法吧。PROFIBUS的通信方式是主从式,使用“令牌”控制,就像十字路口交通信号灯的作用;
- 可以想办法改进普通以太网所用的CSMA/CD,或者无线局域网(WLAN)所使用的CSMA/CA;
- 广域网中使用信道复用,分为频分复用(FDM)和时分复用(TDM)。频分复用将一条高带宽的信道划分成带宽较小的多个信道,就像在一条公路上划分出多个车道;时分复用通过把通信数据包分配在不同时隙进行传输来实现信道复用。
PROFINET的通信方式是生产者/消费者,各个通信节点是平等的,随时都可以收发数据,所以总线的那种“令牌”控制不能适用,只能在后两个方案中想办法。从而也造就了前面所提到的PROFINET不同于PROFIBUS的地方。
1、交换技术
普通以太网设备有可能会出现数据碰撞,也就是所谓的CSMA/CD造成了数据发送的延迟,从而不能保证通信的确定性,也就无法谈及通信的实时性。而且前面提到冲突域的范围是有大小的。普通以太网使用传统的交换机(switch)或者是集线器(Hub)构成局域网,使用集线器连接使得整个局域网都是一个数据的冲突域。那是不是可以在从冲突域的角度对普通以太网改进一下,以彰显PROFINET的“先进性”呢?答案是肯定的。
PROFINET采用支持IEEE 802.Q标准的交换机,或者PROFINET设备本身就集成一个带交换功能的双网口,使得同时有多个设备和一个设备所使用的带宽都是一样(100M),这样数据冲突的区域缩小到设备本身的区域内。因为端口可能有多个用户与该端口连接的用户通信,有可能发生介质访问冲突,支持IEEE 802.Q标准的交换机还采用了带有优先级的方式安排发送顺序,于是将冲突域缩小到一个具体的端口,从两个方面大大缩小了数据冲突区域,确保了通信的确定性。
打个比方说,在两条道路交汇的十字路口,东南西北四个方向的车不可能同时通过,得通过交通信号灯来进行指引,交换机相当于建了个立交桥,甚至是多层立交桥,使得多个方向的车辆能够同时通行。而在局域网中使用支持IEEE 802.Q标准的交换机,将通信网络搭建得像沪宁高速公路一样,在一个方向中划分出多个车道(双向8车道),并且规定大车在一般不得占用内侧的车道,不仅大大提高了通行效率,而且行车的安全性也大大提高了。
2、循环通信
图
如图,对于由控制器、设备组成的PROFINET IO系统来说,工作的方式就是输入、处理、输出,这一过程循环罔替,周而复始。处理是循环的,T1是PLC程序的循环扫描时间;而且通信也是循环的,T2是总线刷新时间,也就说每个循环周期(Cycle1…n),控制器与设备之间会进行通信。从这个角度说,PROFINET运用了时分复用中时隙的概念,这将大大提高整个网络的通信效率。时隙这个话题将在后面的章节中详细描述。
3、精简协议栈
前面提到PROFINET IO系统是循环通信的,在一个周期内(总线刷新时间)做的事情无非是发送与接收,包括以下过程:
- 在生产者的应用程序中创建一个变量;
- 通过PROFINET通信报文的形式将该变量发送给通信伙伴(消费者);
- 在消费者的应用程序中再次获得该变量。
这个过程所花费的时间如图所示,是T1到T5的累加,详细说明如下。
普通以太网通信使用TCP/IP协议,设备处理报文的时间是ms级别。对于PROFINET实时通信来说,PROFINET使用100Mbps(快速以太网)的传输速率,以传输一个最长的PROFINET报文1522字节为例,其传输时间T3大约是125μs,与采用TCP/IP协议报文的处理时间相比,传输时间T3是很短的。于是,要缩短刷新时间,最有效的办法就要精简通信协议栈,也就是缩短T2和T4。这种简化信息接受难度的做法就像鄙人当年逃课收看NBA总决赛的现场直播,现场画面和主持人的讲解让人能很快、很直接的、很“实时”的感受到现场气息,获得身临其境的效果,让鄙人看完比赛后会意犹未尽、得意洋洋地向老老实实上课的球迷同学炫耀。如果当时只有文字直播,需要花一些时间通过文字理解去想象比赛画面,你觉得还有必要逃课去当铁杆球迷吗?
另外,PROFINET精简了通信堆栈的结构,对于时间要求苛刻的数据采用特别报文及协议,不使用TCP/IP协议栈处理,从而大大缩短了通信时间,保证了通信的实时性。这也属于实时报文类型,将会在后面章节将会详细描述。
总而言之,PROFINET采用精简的通信堆栈结构,100Mbps快速以太网,使用交换机或带交换功能的设备,带有优先级标识VLAN标签的报文,还有就是其循环通讯的协议机制,这些是PROFINET实时的原因。
PROFINET如何实现实时性的更多相关文章
- 什么是PROFINET IO系统的实时性
实时系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行. PROFINET IO系统的实时性就是指当有一个外部事件发生时,从输入信号到传输.到控制 ...
- CNC系统实时性分析
该系统有哪些强实时功能需求?需要对哪些实时事件进行实时响应,对允许的实时延迟的数量级进行估计. 答:数控系统中控制装置与现场设备通信的实时性要求,数控系统要快速而有效的对复杂而庞大的操作任务进行处理. ...
- Linux 2.6 内核实时性分析 (完善中...)
经过一个月的学习,目前对linux 下驱动程序的编写有了入门的认识,现在需要着手实践,编写相关的驱动程序. 因为飞控系统对实时性有一定的要求,所以先打算学习linux 2.6 内核的实时性与任务调 ...
- 用Vue开发一个实时性时间转换功能,看这篇文章就够了
前言 最近有一个说法,如果你看见某个网站的某个功能,你就大概能猜出背后的业务逻辑是怎么样的,以及你能动手开发一个一毛一样的功能,那么你的前端技能算是进阶中高级水平了.比如咱们今天要聊的这个话题:如何用 ...
- 针对Properties中实时性要求不高的配置参数,用Java缓存起来
Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求 ...
- 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]
树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...
- Linux操作系统实时性分析
1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素: 第一是应用.如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux ...
- 《即时消息技术剖析与实战》学习笔记3——IM系统如何保证消息的实时性
IM 技术经历过几次迭代升级,如图所示: 从简单.低效的短轮询逐步升级到相对效率可控的长轮询: 全双工的 Websocket 彻底解决了服务端的推送问题: 基于 TCP 长连接衍生的 IM 协议,能够 ...
- 【原创】xenomai与VxWorks实时性对比(资源抢占上下文切换对比)
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ (下面数据,仅供个人参考) 可能大部分人一直好奇Vx ...
随机推荐
- DOM操作和样式操作库的封装
一.DOM常用方法和属性复习 以下粗略的罗列一下DOM的常用方法和属性,由于不是介绍DOM的基础内容,所以就不一一详细说明各个方法和属性了(学习DOM的封装的,一般都对基础DOM比较熟悉了). 1.1 ...
- C++ 构造函数或析构函数调用虚函数
构造函数和析构函数中的虚函数 在执行基类构造函数时,对象的派生类部分是未初始化的.实际上,此时对象还不是一个派生类对象. 为 了适应这种不完整,编译器将对象的类型视为在构造或析构期间发生了变化.在基类 ...
- 长连接 Socket.IO
概念 说到长连接,对应的就是短连接了.下面先说明一下长连接和短连接的区别: 短连接与长连接 通俗来讲,浏览器和服务器每进行一次通信,就建立一次连接,任务结束就中断连接,即短连接.相反地,假如通信结束( ...
- C 风格字符串相加
<<C++ Primer>> 第四版Exercise Section 4.3.1 的4.3.0 有如下题目:编写程序连接两个C风格字符串字面值,把结果存储在C风格字符串中.代码 ...
- 两个 Long 类型为什么不能直接用==比较
这要说到==和 equals 的区别了. 1. ==比较的是两个对象在内存中的地址值(栈中的内容). 2.equals 是 java.lang.Object 类的一个方法.equals 比较的是两个对 ...
- 最短路径之Dijkstras算法(图片格式)
- IOS百度地图之--->第二篇《大头针__简单使用及自定义》
呵呵!大家不要只看帖不回帖么,要不然我都没有积极性了. 第一步:创建一个用来呈现mapview的viewcontroller,不废话直接贴代码 BasicMapViewControlle ...
- CoreCLR源码探索(四) GC内存收集器的内部实现 分析篇
在这篇中我将讲述GC Collector内部的实现, 这是CoreCLR中除了JIT以外最复杂部分,下面一些概念目前尚未有公开的文档和书籍讲到. 为了分析这部分我花了一个多月的时间,期间也多次向Cor ...
- Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 1)
『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化 ...
- 译:Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息
注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...