平时我们都听过文艺作品要“源于生活而高于生活”。PROFINET是基于工业以太网的,用文艺范儿的词汇说就是“源于以太网而高于以太网”。那么,PROFINET是怎么做到“高于以太网”的呢?

要做到比普通以太网要犀利,重要的是PROFINET要做到实时性,而要做到实时性,首先就要解决确定性的问题。前面提到普通以太网会出现介质访问冲突的问题,不满足“确定性”的标准。那么一般解决冲突的方法有哪些呢?

  1. 既然PROFIBUS总线和PROFINET关系密切,先看看总线是如何的解决方法吧。PROFIBUS的通信方式是主从式,使用“令牌”控制,就像十字路口交通信号灯的作用;
  2. 可以想办法改进普通以太网所用的CSMA/CD,或者无线局域网(WLAN)所使用的CSMA/CA;
  3. 广域网中使用信道复用,分为频分复用(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系统是循环通信的,在一个周期内(总线刷新时间)做的事情无非是发送与接收,包括以下过程:

  1. 在生产者的应用程序中创建一个变量;
  2. 通过PROFINET通信报文的形式将该变量发送给通信伙伴(消费者);
  3. 在消费者的应用程序中再次获得该变量。

这个过程所花费的时间如图所示,是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如何实现实时性的更多相关文章

  1. 什么是PROFINET IO系统的实时性

    实时系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行. PROFINET IO系统的实时性就是指当有一个外部事件发生时,从输入信号到传输.到控制 ...

  2. CNC系统实时性分析

    该系统有哪些强实时功能需求?需要对哪些实时事件进行实时响应,对允许的实时延迟的数量级进行估计. 答:数控系统中控制装置与现场设备通信的实时性要求,数控系统要快速而有效的对复杂而庞大的操作任务进行处理. ...

  3. Linux 2.6 内核实时性分析 (完善中...)

      经过一个月的学习,目前对linux 下驱动程序的编写有了入门的认识,现在需要着手实践,编写相关的驱动程序. 因为飞控系统对实时性有一定的要求,所以先打算学习linux 2.6 内核的实时性与任务调 ...

  4. 用Vue开发一个实时性时间转换功能,看这篇文章就够了

    前言 最近有一个说法,如果你看见某个网站的某个功能,你就大概能猜出背后的业务逻辑是怎么样的,以及你能动手开发一个一毛一样的功能,那么你的前端技能算是进阶中高级水平了.比如咱们今天要聊的这个话题:如何用 ...

  5. 针对Properties中实时性要求不高的配置参数,用Java缓存起来

    Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求 ...

  6. 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]

    树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...

  7. Linux操作系统实时性分析

    1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素:  第一是应用.如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux ...

  8. 《即时消息技术剖析与实战》学习笔记3——IM系统如何保证消息的实时性

    IM 技术经历过几次迭代升级,如图所示: 从简单.低效的短轮询逐步升级到相对效率可控的长轮询: 全双工的 Websocket 彻底解决了服务端的推送问题: 基于 TCP 长连接衍生的 IM 协议,能够 ...

  9. 【原创】xenomai与VxWorks实时性对比(资源抢占上下文切换对比)

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ (下面数据,仅供个人参考) 可能大部分人一直好奇Vx ...

随机推荐

  1. 获取bing图片并自动设置为电脑桌面背景(C++完整开源程序)

    众所周知,bing搜索网站首页每日会更新一张图片,张张漂亮(额,也有一些不合我口味的),特别适合用来做电脑壁纸. 我们想要将bing网站背景图片设置为电脑桌面背景的通常做法是: 上网,搜索bing 找 ...

  2. UINavigationBar统一修改导航条样式

    #pragma mark -- 统一导航条样式 //统一导航条样式 UIFont *font = [UIFont systemFontOfSize:19.f]; NSDictionary *textA ...

  3. webots自学笔记(五)使用物理插件ODE建立铰链

    原创文章,来自"博客园,_阿龙clliu" http://www.cnblogs.com/clliu/,转载请注明原文章出处. 在一些三维制图软件或仿真软件里,都有运动副的概念,w ...

  4. 如何javascript获取css中的样式

    obj.style.height只能获取行间样式,但是我们要怎么获取写在css文件中的样式呢? 首先我们要用一个新的方法currentStyle.这个方法由current和style两个单词组成意思是 ...

  5. (9)集合之Set,HashSet,TreeSet

    TreeSet子类 注意事项: 1.向TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储 2.往TreeSet添加元素的时候,如果元素本身不具备自 ...

  6. SQL SERVER 执行大于80M的SQL 脚本

    在CMD控制器窗口 使用SqlCmd命令来执行 具体请看 SqlCmd /? 或者MSDN

  7. WINFROM 无边框窗体的移动和改变大小

    因为去掉了边框  移动和调整大小都用不了了,可以调用WIN32的API来实现 1.定义必须常量 ; ; ; ; ; ; const int Guying_HTBOTTOMLEFT = 0x10; ; ...

  8. 零件库管理信息系统设计--part03:管理员登录部分设计

    兄弟们,我又回来啦! 上次我把表建完了.今天来点干货,我们用ssm框架来先简单实现一下管理员的登录功能. 在实现之前,我对user表(管理员表)做了些简单的修改,先来看看: 忽略哪些蓝色的马赛克和乱输 ...

  9. Linux下快速搭建php开发环境

    php开发环境快速搭建 一.Linux下快速搭建php开发环境 1.安装XAMPP for Linux XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,使用XA ...

  10. python混账的编码问题解决之道

    下面的代码作用是修改文件的编码格式.代码很简单,但是也很牛逼(在我看来),这是在segment上找到的解决办法,废话不多说,直接上代码. import codecsdef ReadFile(fileP ...