平时我们都听过文艺作品要“源于生活而高于生活”。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. windows 实时性

    在硬件编程时,大部分非智能硬件并没有主动通知反馈功能,需要PC主动轮询状态寄存器去查询硬件状态.对于运动类控制器,查询的时机(间隔)在一定程度上影响着准确率与系统负载.即使不考虑系统负载,在1000H ...

随机推荐

  1. 6 Candy_Leetcode

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  2. public,protected,private辨析

    一直没有很清楚理解这三个修饰权限的区别,今天终于搞明白了,现总结如下: private:最严格的一个,子类无法继承,只有本类内部内访问,在其余类及子类中通过 "类名.方法" 去调用 ...

  3. 函数WideCharToMultiByte() 详解

    函数原型: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, ...

  4. org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir异常解决方法

    myeclipse用svn提交的时候报错: Attempted to lock an already-locked dir svn: Working copy 'D:/Program Files/My ...

  5. 各开源协议BSD,GPL,LGPL,Apache 2.0,mit等简介*

    快速阅读 分类 子分类 开源约定 BSD original BSD license.FreeBSD license.Original BSD license 为所欲为 Apache Licence 2 ...

  6. PyQt4--QPushButton阵列

    # -*- coding: utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * import sys import funct ...

  7. Tp框架查询分页显示与全部查询出来显示运行时间快慢有区别吗?

    8:08:01 青春阳光 2017/4/7 8:08:01 大神在吗? Tp框架查询分页显示与全部查询出来显示运行时间快慢有区别吗? 青春阳光 2017/4/7 8:08:20 还有个问题,上传到pu ...

  8. 一个简单而实用的JQ插件——lazyload.js图片延迟加载插件

      前  言 Cherish 看多了炫酷的插件之后再来看这么一个小清新的东西,是不是突然感觉JQ插件感觉很友好了,简单强大最重要的是实用. 这篇文章将详细讲解一下lazyload.js的用法 lazy ...

  9. Flask源码阅读-第一篇(flask包下的__main__.py)

    源码: # -*- coding: utf-8 -*-""" flask.__main__ ~~~~~~~~~~~~~~ Alias for flask.run for ...

  10. C语言学习之联合类型

    前言 联合(union)是一种特殊的数据类型,和结构体很像,结构体各成员变量有自己独立的存储位置,而联合的成员变量共享同一片存储区域,因此联合变量再一个时刻只能保存它的某一个成员的值. 联合的定义和初 ...