电子说
我们先不要直接讲Modbus协议,先聊聊家常,然后趁Modbus不注意,再去学它,就容易记住了。
Modbus协议,是1979年,Modicon公司发明的。而Modicon,也可以说就是现在的施耐德了。
别的设备支持不支持Modbus不知道,施耐德PLC肯定可以支持Modbus协议。
那时候网络,计算机都还不发达,设备之间的通信,主要还是基于串口。
那Modbus协议发明主要是用来干嘛的呢。
那我们就先看Modicon是干嘛的。
Modicon公司是搞PLC的。那PLC又是什么呢。
接地气地讲,PLC是一种控制器,内部可编程。反正就是工业领域生产非常重要的东西。
像PLC,传感器等,就会有各种各样的数据,比如,门的开和关,灯的亮和灭,温度,湿度,流量,产量计数,压力,速度,位移等,各种各样的数据。
往现在来说,你手机上有个APP,APP上有个按钮,你一操作,你家的灯就开了。
在当时来看,一台控制器怎么知道另一台控制器的数据呢。
总不能这么唐突的去要数据吧。
好,如果只是灯的开关,可以用一根电线将两个控制器接起来,十个开关就接十根线。
只要这根线有电,说明灯是亮的,线没有电,灯就是灭的。
但温度呢,总不能让一个控制器靠近另一个控制器,你摸一下我烫不烫,冷不冷,渴不渴?
还有压力值呢,总不能让一个控制器去踩压着另一个控制器的背,官人,你看这脚力合适不合适?
这不是有串口么,能不能把这些数据,都通过这个串口来传输呢。
发明一种协议,然后可以在串口上进行数据交互,
真的是好办法呀,这样一来,对于主控制器来说,省事多了,就这么办吧。
发明协议要有仪式感,我们总得给它起个名字吧。我们先开个会讨论一下吧。
“要不我们就直接叫它Modicon Modbus吧”
“系不系傻,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协议大概有多少。
全部0条评论
快来发表一下你的评论吧 !