什么是Modbus ,Modbus能做什么。
笔者尝试用一个系列分多篇文章进行讲述,带你了解身边的Modbus。
第一篇我们先来个序言篇,先来聊聊Modbus。
创作不易,转载请注明出处。订阅号诸子东(物联网诸子东)原创作品。
按照笔者的风格,上来自然不会直接讲枯燥的概念和协议,格式等。这些网上一搜一大把的内容,笔者尽量少重复。
我们先不要直接讲Modbus协议,先聊聊家常,然后趁Modbus不注意,再去学它,就容易记住了。
Modbus协议,是1979年,Modicon公司发明的。而Modicon,也可以说就是现在的施耐德了。
别的设备支持不支持Modbus不知道,施耐德PLC肯定可以支持Modbus协议。
那时候网络,计算机都还不发达,设备之间的通信,主要还是基于串口。
那Modbus协议发明主要是用来干嘛的呢。
那我们就先看Modicon是干嘛的。
Modicon公司是搞PLC的。那PLC又是什么呢。
接地气地讲,PLC是一种控制器,内部可编程。反正就是工业领域生产非常重要的东西。
像PLC,传感器等,就会有各种各样的数据,比如,门的开和关,灯的亮和灭,温度,湿度,流量,产量计数,压力,速度,位移等,各种各样的数据。
往现在来说,你手机上有个APP,APP上有个按钮,你一操作,你家的灯就开了。
在当时来看,一台控制器怎么知道另一台控制器的数据呢。
总不能这么唐突的去要数据吧。
好,如果只是灯的开关,可以用一根电线将两个控制器接起来,十个开关就接十根线。
只要这根线有电,说明灯是亮的,线没有电,灯就是灭的。
但温度呢,总不能让一个控制器靠近另一个控制器,你摸一下我烫不烫,冷不冷,渴不渴?
还有压力值呢,总不能让一个控制器去踩压着另一个控制器的背,官人,你看这脚力合适不合适?
这不是有串口么,能不能把这些数据,都通过这个串口来传输呢。
发明一种协议,然后可以在串口上进行数据交互,
真的是好办法呀,这样一来,对于主控制器来说,省事多了,就这么办吧。
发明协议要有仪式感,我们总得给它起个名字吧。我们先开个会讨论一下吧。
“要不我们就直接叫它ModiconModbus吧”
“系不系傻,Modbus这个名字就是我们发明的,怎么能叫Modicon Modbus呢,再重新讨论”
“首先这个是一种总线协议,肯定得以bus结尾吧。”
“嗯,没错,那就以bus结尾吧”
“叫Modicon-bus如何?”
“不行,得有我们老外的风格,这名字一看就很中式。”
“取名字的前半部分?叫Modibus协议?”
“莫弟拔丝?读着有点绕口吧。”
“Modbus呢,莫得拔丝,好写又好记。”
“同意”
“同意”
“Good”
“大拇指,大拇指,大拇指”。
于是,伟大的Modbus协议的名字诞生了。
那这个协议要怎么用呢。
现在摆在面前有两个设备,一个是主设备,一个是从控制器,主设备和从控制器通过串口接在一起了,所有的数据都在从控制器上了。
是从控制器主动把数据发给主设备呢,还是主设备来要数据呢。
如果是从控制器主动发数据,但是好像不知道主设备到底要啥数据呢。
要不就设计为,由主设备主动发起请求来要数据。从控制器收到命令之后,再把相应的数据返回。
所以,Modbus协议,就设计为一种基于主站主动请求的协议了。
这样所有的数据需求,全部为主设备进行管理和规划,什么时候读什么数据。
就这样,有了Modbus协议之后,就解决了各控制器之间的数据交互问题。包括之后的HMI,电脑等设备,也都可以通过Modbus协议与PLC, 控制器进行数据读取交互。
刚发明Modbus的时候,那时候主要还是使用串口通信。网络还没有完善的年代,想找一个支持以太网的PLC几乎不现实。
当然,后面随着TCP/IP的发展,工业的进步,出现了网络通信。Modbus也可以在以太网上通信了,在以太网上的通信,我们一般叫它Modbus TCP。
既然有TCP,就会有人问,那我能不能走UDP呢。
于是,Modbus UDP也就有了。
其实Modbus TCP和Modbus UDP的报文格式是一样的。只不过一个走的是TCP,一个走的是UDP。
那串口的Modbus 叫什么名字呢。
一般来说,串口的Modbus 协议叫Modbus RTU协议。
RTU,也就是 Remote Terminal Unit。远程终端单元。
要知道,在上个世纪80年代,对于远程的概念,可不是像我们这样天南地北的距离。
两个设备,超过一米,都能叫远程了。
大概的意思就是,我人在门口,我能通过HMI或者主控制器,对房间里的温度,灯等进行监测和控制,就属于远程操作了。
毕竟每一个事物的存在,都是有它的背景和依据的。
那为什么串口的协议,还会有Modbus ASCII协议呢。
这个我有点编不下去了,容我想一想。
一般来说,数据是由位组成的,然后由八个位组成一个字节,两个字节组成一个字。
而数据传输和存储呢,最小单元为字节。
然后串口通信,它也很特殊,如果你要发一个字节,还要加什么起始位,校验位,停止位等凑够一定条件,才能满将一个字节发送出去。少一个位都不行。
那ASCII发明的的其中一个理由是,当通信链路或者设备无法满足RTU模式时,则使用ASCII模式。
我猜测呀,可能当时某些特定用途的单片机或CPU,在设计串口功能的时候,基于种种原因,要抛开起始位,校验位,停止位之后,完了,少处理了一个位,留给数据位只有7个位了。
怎么办呢,要把7个位改成8个位,芯片都推倒重新来,代价太大了。
难道这个芯片就不能用了么。有什么通信或数据只要7个位就够了的?
还真巧,还真有的,那就是ASCII数据。
ASCII,也就是我们常说的字符数据。字符嘛,大小写字母,加上一些常用字符,数量加起来少于127的。也就是用7个位就可以了。
那是不是可以发明一种ASCII通信协议,每一个数组只占7位。然后Modbus ASCII协议就出来了。
我们看一下Modbus协议大概有多少。
最后,我们留一道选择题给大家。
以下哪个配置是有问题的。
A 使用modbus ascii 协议,波特率38400,数据位8,校验位为奇,停止为1.
B 使用modbus rtu 协议,波特率19200 ,数据位8,校验位为偶,停止为1.
C 使用modbus ascii 协议,波特率57600,数据位7,校验位为无,停止位2。
D 使用modbus rtu 协议,波特率115200,数据位7,校验位为偶,停止位1
答案将在下一篇揭晓。
本篇为序言篇,笔者会在未来一段里,完成该系列文章的创作,如果想进一步继续了解和学习Modbus的同学,朋友,不妨关注本订阅号或推荐给你的同学,老表,同事等。
当然,Modbus只是第一个按系列写的,后续也许也会考虑出更多和物联网相关的专题系列进行创作,笔者会尽量秉承通俗,风趣的风格进行创作。
笔者是业余时间进行的创作,更新速度可能比较慢,客官可以先回顾下往期文章。