此文较长,如果您正在上厕所,开车,刷牙,相亲,做菜。建议你完成后再看文章,以免影响点赞。
如果不算加班经验,笔者从事物联网行业的开发和研究也有好几年了。
说多了怕对不起文章,说少了怕对不起年龄。反正就是好几年了吧。
此篇文章主要是讲物联网相关的一些知识,适合想了解物联网,或者从事物联网相关工作的各位。
既然是物联网相关的,下面列举一些物联网相关的一些名词或术语,看大家了解多少,大概是在一个什么样的层次。
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里,就涉及到隐式报文这个概念。
不过,现在基本上都不谈这个了,也没有具体或严格的划分了。只要协议能实现具体的内容,还管它是什么式报文呢。只是个题外话。
好了,如果你看到最后,放心,没有广告。
文本原创,微信订阅号:诸子东。