美文网首页
【转载】物联网通信协议概论:通俗看物联网世界

【转载】物联网通信协议概论:通俗看物联网世界

作者: 一路向东_lxd | 来源:发表于2020-07-13 15:15 被阅读0次

    文本原创,微信订阅号:诸子东。欢迎订阅了解看多文章

    此文较长,如果您正在上厕所,开车,刷牙,相亲,做菜。建议你完成后再看文章,以免影响点赞。

    如果不算加班经验,笔者从事物联网行业的开发和研究也有好几年了。

    说多了怕对不起文章,说少了怕对不起年龄。反正就是好几年了吧。

    此篇文章主要是讲物联网相关的一些知识,适合想了解物联网,或者从事物联网相关工作的各位。

    既然是物联网相关的,下面列举一些物联网相关的一些名词或术语,看大家了解多少,大概是在一个什么样的层次。

    FBox,Iot,MQTT,DTU,PLC,VPN,HMI,MES,M2M,CoAP,BACnet ,Profibus ,网关,总线,485,XCLYJQ,LXDNUC。

    如果你一个都不知道,很好,我觉得这位读者,你可以跳过文章,直接跳到打赏环节了。

    如果你知道一半左右,可能你接触物联网不是很长时间,那还需要继续加油。

    如果你知道90%左右,那你接触物联网应该是比较久。不管您是销售,技术支持,研发,还是老板,市场等,相信读了这篇文章,会让你对物联网有一定的理解。

    如果你全都知道。你撒谎。因为最后两个是我乱写的,我自己都不知道。

    本文将尽量用通俗的语言,例子,来给大家讲解物联网的相关的知识,包括:

    网络通信的几层架构,比如TCP四层协议。

    通俗讲解TCP,UDP协议通信。

    物联网常见的协议及一些行业特定协议,比如MQTT等,都怎么样理解和交流。

    这篇文章虽然不能让你学会如何开发,如何设计。但是能让你和客户聊到物联网的时候,不再只会说一个modbus,网关。

    对于非研发人员来说,只要你消化了这篇文章,保证你能和客户聊物联网,秉烛夜谈,促膝长谈,上至物联网未来蓝图发展贡献,下至车间设备数据采集应用方案,

    可谓是滔滔不绝,把酒共青天。

    相信接触过物联网的各位,应该知道,接触比较多的就是各式各样的通信协议了。什么一会是云平台的协议,一会是设备采集的协议,一会是modbus,一会是tcp,一会是mqtt,一会是nbiot。说实在,如果不接触了几年,真的很难把这么多整理清楚。

    以下内容为笔者从业几年来的整理,希望能给大家带来帮助。本文共分上下篇:

    上篇:协议有层。

    下篇:内容至上。

    上篇:协议有层

    话不多说,先看一下很多非研发人员害怕的TCP四层协议。

    就算是一些处于研发型工作工员,也未必能把这四层协议搞得清楚。不要着急退出文章,我们搞物联网的,没必要深入到这四层去进行研究,因为这些底层的协议栈框架,在全球会有一群专业的人员和机构进行研究和维护,那是他们的事情,我们研究物联网的,只管使用就事了。

    也就是,我们需要从实际的角度去理解这四层协议。然后以这个基础,看物联网世界。

    不只是TCP四层,以及物联网的很多协议,都可以用一个通用的套路来概括。

    只要记住这三层。

    一 用什么传输

    二 谁传给谁

    三 传了什么内容。

    用这三层再去理解一下TCP四层协议。

    第一层世界: 用什么传输。

    在物联网世界时,这是第一层世界。所有的数据传输都需要有载体或介质。也就是不管我们讨论什么协议,技术,都离不开第一层。

    那在一层世界里,总结一些常见的:

    1 网线。以太网。

    2 串口线。232通信,485通信

    3 无线类。

    广域网:WiFi,2G,3G,4G,5G。

    没那么广的网: RFID,NFC,蓝牙,ZigBee,LoRa.

    4 CAN总线

    5 光。 较早之前比较火的LiFi。也就是通过可见光传输信号,能让设备上网。

     这个是直射光,和光线不是一个概念哦,还号称比WiFi快什么的。反正现在我没能买到,买了我笔记本也用不了LiFi。

    这些都是物联网数据传输的载体。在这一层世界里,从事物联网的人员,一般只是应用,而不是开发。

    这一层世界主要是由硬件电气工程,通信工程师,算法工程师等进行钻研开发,为我们提供通信基础。这些一般是由运营商,华为这样的大公司来搞定的。

    第二层世界:谁传给谁。

    每一个协议或数据,就是要了解谁传给谁,事情就好办了。

    这个要怎么看呢。

    在这个世界里,一般从两方面进行分析。

    1 看硬件连接。这个包括有线和无线的连接。

    2 如果从连接上看不出,或者是总线形式的,在传输的内容里,会有区分。

    对于第1点,应该不难理解。

    如果是串口线,HMI和PLC直接连接,那协议就是从HMI传给PLC的。没错,就是这么简单。

    像蓝牙,也是先连接了蓝牙,然后再进行通信。那谁传给谁传输,那还看不出现么。

    对于第2点,可能就稍微难一些。

    像485总线,HMI和好几个PLC用485连接着的。HMI发出一个数据,到底是给谁传输的呢,那么这种情况下,在数据里,必然会有一个站号的东西。

    像网线,电脑和PLC都接到一个交换机里,。电脑发数据出来,到底是给谁传输呢。

    那么这种情况,在网线所传输包含的数据里,必然会有一个IP的东西。

    这也就是TCP/IP的四层协议里,网络层和传输层就在第二个世界。IP层也就是在这个世界,IP层能让最终的数据,知道谁传给谁。IP就像写信,总得有收信人和发信人吧。

    第三层世界:传了什么内容。

    90%的物联网活动,基本是在这一层世界里。而我们所接触的,讨论的,很多就是在这一层世界里,事实上,我们所关心的,也在这一层世界里。

    而这一层世界是千变万化,精彩绝伦,这也是这一层世界的魅力所在。比如我们常说的HTTP,MQTT,OPC等协议。他们的第一层和第二层世界是一样的。而我们经常拿协议来进行比较其优缺点之类的,很多时候,就是在这一层世界比较。

    就拿HTTP和MQTT来说:

    第一层世界:两者都可以网线,wifi,2G,4G等传输。不具备可比性。

    第二层世界:两者都可以根据IP进行传输,在这一层世界也是一样的。

    第三层世界:HTTP和MQTT就不一样了。具体怎么不一样,这就是我们所说的协议和格式的。

    如果用这三层世界来看一个物联网里比较热门的协议MQTT和HTTP协议。

    为了更好地让大家理解这几层协议。下面举例类比说明一下。

    在一个MQTT通信例子里,网关通过4G的形式向MQTT服务器传输数据,MQTT服务器有自己的IP。

    网关则是MQTT的客户端。

    在这里面的层次关系:

    4G,WiFI或网线: 马路

    MQTT客户端和MQTT服务器: 员工和老板。

    基于TCP:开车

    温度,产量等数据:水果,香烟等礼品。

    这里面主要是传输温度,产量这样的数据,不用MQTT可以么?

    当然可以啦。MQTT好比如是TCP穿了一件衣服一样。

    毕竟员工给老板送礼物,还是穿点衣服比较好吧。

    如果换个HTTP协议,上面的图和套路还是一样适用的。

    所以,当我们了解一个协议,就主要是从这三层世界去理解,就够了。

    不过,既然是基本TCP通信的,那TCP和UDP有什么区别?毕竟我们接触的物联网以太网协议,不是TCP的就是UDP的

    这里有兴趣的可以举例说一下。

    既然以太网通信不是TCP就是UDP,那就这样类比:TCP就是男人,UDP就是女人。反正我们人类不是男人就是女人,好像不是很严谨。为了剧情需要,下面进行扩展,如有不恰当的,还请见谅。

    那么TCP和UDP的区别主要是在哪里呢。

    比如握手失败。

    忘了刮胡子的老张和年轻的王总要见面梁博士谈业务。

    梁博士握着老张的手说:老王呢,想不到你如此成熟。

    老张赶紧松开手:不好意思,梁博士,我不是王总。

    王总悄悄对老张说:下次出来记得刮胡子,每次别人都以为你才是领导。

    比如握手成功。

    梁博士握手错了之后,赶紧重新找王总握手:王总你好,我是梁博士。

    王总:梁博士,你好,我们此次过来是想找你聊那个什么项目的。

    。。。

    不管谈话是否顺利,王总再次握手梁博士说:希望我们以后可以长期合作。

    然后结束此次谈话。

    看,是不是一样一样的。

    TCP会话时,也需要先建立握手。握手成功后,才会进行会话。结束会话前也有确认会话结束的。

    而UDP,既然没有握手,那是怎么样呢的。

    举例一下:

    D美女来到餐厅,就坐下来,她对面是F美女。

    连招呼都不打,D:说,给多少钱才肯离开他。

    F: 我们是真心相爱的,我不会离开他的。

    D:100万。

    F:太少了。

    D:200万。

    F:我是不会离开他的,我会把孩子生下来的。

    F说完后,头也不回地离开了。

    D:什么,你已经有了他的孩子?为什么,他说过爱我一生一世,说过要。。。。。。。。。。。。。

    然后D在那里说了一大堆,但F已经离开了,F也不知道D最后说了啥。

    这就是UDP的不确认机制。

    如果这么类比的话,可能会有读者问,那TCP不能和UDP建立通信么?既然你要这么问的话,那我就回答说不可以吧。因为当你问出这个问题的时候,相信你的能力还不足以写出一个程序让TCP和UDP通信的例子。

    毕竟男女授受不亲嘛。

    以上内容呢,主要是从TCP的四层作为切入点,简化为物联网的三层世界。

    从这三层看物联网世界,

    Modbus rtu 

    分割线

    以上为本文前半部分内容。前部分内容主要是讲让大家如何去理解一个协议的分层。也就是物联网的90%的协议,前面两层都是一样的,所以,我们更应该关心的是第三层。

    下篇:内容至上

    (下篇图较少,因为笔者缺插画师)

    所谓的内容,也就是我们所说的各种协议和格式了。

    那什么是协议呢,什么是格式呢。相信很多人都听说过,但有时候感觉是这么回事,有时候又不是这么回事。

    当你和客户聊协议的时候,他和你聊格式。

    当你和客户聊格式的时候,他和你聊协议。

    其实有时候,不需要搞得那么严谨。

    一般来说,格式是协议的具体内容及其特定表征。能叫出来名字的,一般是协议,比如MQTT协议,Modbus协议,HTTP协议。

    对协议的特征描述就是格式,比如Modbus协议具体格式为:XXXX.

    有时候,格式也是简化概念的协议。

    比如,当客户说,我们这个设备的通信格式是什么样的,这种情况下,也就是说协议,只是一时没有具体的名称叫出来。

    在开发和实现之前,一般先谈协议,可以不谈格式。而到了开发和具体实现的环节,就不能只谈协议而不谈格式了。

    比如

    A:请问你们用的是什么协议呢。

    B:哦,我们用的是ASCII协议。

    A:那我们要给你们的设备发什么内容呢。

    B:就发ASCII码就行了。

    A:那具体是什么ASCII码嘛。

    B:ASCII码你都不知道吗?

    这段对话就确实出现在我们实际的生活中。我们要给客户具体实现协议的时候,找客户的相关人员聊。这段对话就是典型的只谈协议而不谈格式。

    或者说格式就是协议的进一步实现。

    而这些协议,格式,就是物联网第三层世界的内容了。

    所谓内容至上,就是说正是这些各式各样的协议,汇总到一起,就组成了这个物联网世界。

    我们来看一下时间轴:

    1979:     modbus 发明,Oracal 发布SQL

    1985:     Windows 1.0发布

    1989: Profibus 协议发布  

    1990:    Ethernet/IP协议发布,DeviceNet 由Rockwell 发布。

    1991:     VB1.0发布

    1995: Windows 95 发布.

    1996:      OPC 1.0版本发布,CC-Link协议发布,MYSQL1.0 发布

    1998:      Windows 98 发布

    1999:      MQTT开始发布 

    2001:   Windows XP 发布, ZigBee 协议

    2011:   BACnet 协议发布(智能楼宇控制方案开始成熟)

    2011: 工业4.0(德国汉诺威工业博览会)

    2014: 中国制造2025 ,同时MQTT正式成为推荐的物联网传输协议.

    可以说,modbus协议是很多协议的鼻祖呀。

    物联网世界呢,从modbus开始修炼,并借助windows和互联网开始发家,准备以MQTT来一统江湖。

    要了解物联网世界的内容,协议,那就要了解物联网是由谁组成了。

    物联网,那就是物和网。

    物呢,一般是设备,电脑,我们常说的客户端。

    网呢,一般是网络,服务器,我们常说的服务端。

    虽然不严谨,暂时用这个来分析。

    那就会有物与物连接,物与网连接,网与网连接。

    所以,当我们讨论一种协议的时候,还要了解这种协议是谁和谁连接的。

    物与物的连接:

    (此图由笔者所画,出现在从通信协议看工业4.0一文里,笔者并非盗用)

    一般来说,物是千变万化,目前暂时没有强大的网,能直接与这么多的物直接联系在一起的。

    如果网需要的物不多,那物可以直接连接到网的,只是这个网可能就比较简单。

    那如果网需要很多物的数据,怎么办呢。

    那就需要一个物,先把更多的物连接到一起,然后再由这个物统一,直接与网连接。这就是物联网所说的网关,把物都关联到一个网络里。

    物与物的协议,一般都是在物联网之前就有的,而且,一般都会跟随具体的设备名称的。

    而物与网的协议,一般是在物联网之后,当然,也有之前的。一般不会跟随具体的设备名称。

    比如MQTT协议,MQTT不是一个具体的设备,HTTP协议,HTTP不是一个具体的设备。

    但三菱协议,西门子协议(统称),像这种协议,是带具体设备的,那一般只适合物与物之间的协议,不合适物与网之前的协议。

    而当我们讨论的对象为网关,或者平台,服务器之类的,那我们一般谈论的就是物与网的协议,或网与网的协议。毕竟物与物的协议,一般都是由网关搞定了。而且一般物与物的协议,基本都不会重新规划和开发,至少,有一方是不需要开发的。

    当你与客户交流,双方都需要交流和开发的,基本上就是物与网协议或者网与网协议。

    在这里,差不多可以谈协议分类去聊了。

    物与物的协议,一般有以太网协议,串口协议。这是由物的硬件决定的。

    你不可能用一个2G的网关,去接一个WiFi吧。

    物与网,网与网,一般主要是网络协议,而组网协议,一般就是基于互联网的。

    而在一些特定的网络里,也有一些不一定是互联网的,或者是比较特殊的互联网。

    这种也是由硬件决定的。

    这类特殊的协议,往往和常规的网络协议区分,因为这些不适用于常用的互联网协议。

    比如:

    RFID

    NFC

    蓝牙

    ZigBee

    LoRa

    这些是需要特定的硬件进行开发的。这类协议是由硬件而决定的,或者也可以不叫做协议,而是无线设备。

    除了这种和硬件关联比较重的协议,其它的,一般可以根据不同的应用或行业,可以进行分类了解。

    一 工控自动化类协议。

    这种协议一般是物与物之间的协议。常见的就是PLC,控制器,HMI等。

    这些协议常见的有:

    没错,就是这个图。

    而且,不同的协议,有些只能在特定的PLC上使用。

    而在这些协议里,可能会有一些协议应用比较广,或者比较多的设备在使用。

    比如:Modbus ,Ethernet/IP ,    EtherCat,    MT_Connect,  ADS,

    PowerLink,FINS,CANOpen,CC-Link,CIP,DeviceNet。

    DF-1, MelsecNet,OPC。

    Modbus:万能的简单数据采集协议

    Ethernet/IP : 协议常见于AB,施耐德,欧姆龙,ABB等。不完全统计,全球超过上千中设备使用该协议进行数据采集。常见于机器人控制协议。

    EtherCat:比较典型的是倍福控制器。

    MT_Connect:这个也是行业协议来着,一般在数控行业,机床应用比较多,

    OPC UA : OPC 应用也是比较广的,很多大型控制噐或PLC都支持,就不一一举例的,反正是个很牛逼的协议。

    其它的就不一一举例的。

    像这类协议,一般都会有具体的设备在使用。而且,协议一般不具备兼容性。

    比如三菱的协议,就不能用来采集西门子的数据。

    二 IOT协议类。

    这类协议,一般是网关与服务器,或服务器与服务器之间的通信协议。

    在这个类里,MQTT就是最典型的。

    IOT 七大协议:

    HTTP

    CoAP

    MQTT

    DDS

    AMQP

    XMPP

    JMS

    这是网上常说的IOT七大协议里了。

    HTTP协议呢,这个大家最熟悉不过,平时大家浏览网页,就是HTTP协议了。

    HTTP协议用在网关的貌似不是很多,主要是在平台与平台,PC,移动客户端与服务器比较多。

    其实还有一个比较重要的因素,当然,只是我个人认为的。HTTP一般是用于B/S模式为主。

    而网关与服务器的模式,往往是C/S模式,所以,这就在模式上 ,HTTP其实不太适合在网关使用,但不能代表网关不使用HTTP协议,当然还要看网与服务器的业务量的。

    像CoAP和MQTT协议呢,在国际上,是有oneM2M指定通信协议的。

    其它协议在网关应用的就比较少,可能笔者还没有接触到具体的网关使用案例。

    在时间上,MQTT是1999年就提出,而CoAP在2010年才提出的。

    MQTT是基于TCP,订阅和发布的C/S模式。

    而CoAP呢,主要是URI模式,采用UDP,这点就类似于HTTP协议了。

    但在应用 案例上,MQTT就比较多了,CoAP的应用相对就少了。

    如果有读者非要举例CoAP的多种应用来证明CoAP比MQTT多,那我只是说在物联网领域里,其它领域,我不清楚。

    为什么会有这种情况呢,主要是在于,记住了,划重点了。

    MQTT的复杂度较低,开源较为广泛,已有各种编程语言实现和支持,协议简单,相对成熟。但使用场景有限,但是在物联网场景下,差不多要一统江湖了。

    CoAP呢复杂度大一些,而且开源较为少,你知道的,在目前程序这个领域,开源拯救了多少项目,我就不多说了。因此不太适用于网关与服务器。

    大家都使用了MQTT协议,那慢慢地,CoAP就被冷落了。

    不过,基于CoAP的LWM2M协议,与HTTP易于集成,在平台管理等方面,还是有优势的。

    其实在这之前,也会有很多做网关与服务器一体的,他们所使用的协议,一般都是自定义的协议,基于TCP或UDP自行开发的内部协议。

    这种自定义的协议,会由于种种原因,不便开放,因此也不能接入其它网关。

    但侧重于做云平台的,比如阿里云,百度物联网等,为了能让更多的设备接入到平台中,那么必然考虑使用一种通用的协议,比如MQTT,这样只要设备或网关支持MQTT协议,就能使用云平台。

    当然,基于MQTT协议,不同的平台,定义的具体格式也是不一样的。

    也就是基于MQTT协议,可能会有再上一层协议,比如阿里云的ALink协议。

    三 行业协议类。

    在物联网之前,远程数据采集的需求一直都存在的,只是那时候的物联网还没有那么普及,而且数据远程采集方案也没有那么成熟,还有就是那时候云平台也没有那么火热。那么就出现了一些行业协议的远程协议。

    比如环保212协议。  

    IEC104 规约。

    IEC61850规约。

    像这种协议是比较特殊的,也可以说是特定行业协议,也可以说是特定组织协议。

    这类协议一般都会带编号,由专门的组织和机构指定和维护,应用到特定的行业或系统。而且一般是在民用或私用比较少。

    而且,这种行业协议,一般主要是针对环保行业,电力行业这类的行业。

    但不管是哪种协议,从层次来理解的话,都离不开协议基础。

    像行业协议规约之类的,也是基于TCP/IP基础,然后给定特定的格式和标准,并按一定关系进行名称,从而得到具体的协议。

    物联网千变万化,但万变不离其宗。

    如果你看完了,基本上物联网就大概就是这样了。

    由于篇幅有限,只能泛泛而谈,只是一篇科普文。

    下面是一些扩展的内容,有兴趣的可以继续了解。

    关于显式报文和隐式报文。

    随着协议越来越多,越来越复杂,这两个概念基本都比较少见了。只有一些学术性的介绍,比如像我现在给大家学术讲解,或以前一些传统的介绍里会提到。

    但凡你和客户聊这个,如果客户不知道这两个概念,那么客户觉得你很牛逼,因为他不知道,他也不会问你这两个是什么东西。

    如果客户知道这两个概念,那么客户也会觉得你很牛逼,因为客户知道能了解这两个名词的人已经不多见了。。

    显式报文:

    可从交互报文上直接看出数据属性。一般没有初始化过程。

    典型:modbus

    隐式报文:

    一般从交互报文直接看不到数据信息。有初始化或握手过程。主站和从站存有双方通信交互的寄存器信息。初始化或握手成功后,通信报文直接发数据,不包含寄存器地址等属性。

    像Ethernet/IP里,就涉及到隐式报文这个概念。

    不过,现在基本上都不谈这个了,也没有具体或严格的划分了。只要协议能实现具体的内容,还管它是什么式报文呢。只是个题外话。

        好了,如果你看到最后,放心,没有广告。

    关于物联网方面,后期还会抽空写一些通俗易懂的文章,敬请关注和期待。

    相关文章

      网友评论

          本文标题:【转载】物联网通信协议概论:通俗看物联网世界

          本文链接:https://www.haomeiwen.com/subject/ywwacktx.html