Modbus的十大问题

老伙计原创,如转载请注明出处
 
今天还有人问我modbus的问题,就想把着自己对于这个简单协议
的一点小理解写了出来,一是方便一些朋友查阅,另外也是为了防止遗忘。当然水平有限可能有错误或者不准确之处,真诚的欢迎大家批评指正,让我与您共同进步。
 
1. 有了RTU为啥还要ascii?
个人理解认为,ascii主要是为了在终端上使用(想想linux为啥都是在命令行下面就好理解了),方便看到通讯的过程,经常在楼宇等对控制要求不高的领域会采用。这也就可以解释了为啥在ascii有加了头尾,既然是为了看,那就看的清楚些。
2. Modbus和J-bus以及M-bus分别是什么关系?
Mobus和JBus是近亲,与M-Bus没有任何关系。
J-Bus基本采用了Modbus的帧结构和定义,仅仅是在寄存器的地址方面有些区别。
M-Bus的全称是Meter-Bus,是仪表总线,欧洲使用的较多,帧结构是给予iec60870的,顺便提一句,Profibus的帧结构也是给予Iec60870的。
3.Modbus的其实地址到底是0还是1?
这个问题现在比较混乱,怎么用的都有,这也是Modbus不好的一个小地方。因为modbus是modicon发明的,自然他的寄存器地址的排布是从1开始的,但是在通讯的时候又是从0开始的,这也是显然的,0如果不使用,不是浪费么。这就导致了混乱,寄存器定义部分和协议定义部分一致起来,就不会产生歧义了。如果读取的都是整个寄存器,一般很容易发现错位的问题,但是如果都是浮点类型,就很难发现了,本人就见到N多人在这个问题上被卡过。
4.Modbus的最大缺点是什么?
modbsu的缺点太多(比如帧序号,比如数据类型太少,还比如轮训效率太低,。。。。。),一时还真说不好哪一个是最,非要说一个那就是,没有帧序号吧,如果从设备应答的慢了,主设备读取下一帧数据,这个时候恰好从设备回复上一帧的数据,就会导致错误,这样的情况是真实发生过的。
5.RTU和TCP有何不同?
基本是相同,主要有两点。一个是tcp加了帧序号,是针对问题4的解决办法(rtu之所以没有升级,增加序号,是因为发生的概率较小,但是在网络上这样的情况是有很大可能性发生的)
第二个就是tcp帧本身有了校验,就不需要modbus的校验了
6.寄存器地址必须是00001至09999是离散输出(线圈)
10001至19999是离散输入(触点)
30001至39999是输入寄存器(通常是模拟量输入)
40001至49999是保持寄存器
不是的。事实上modbus是有两种地址排布模式,也就是“separate block”方式和“one block”方式,前一种很常见,很多厂家都采用这样的方式,后一种也有一些比如一些空调设备厂家的就是这样的。
第一种不同的寄存器是不同的地址;
第二种不同的寄存器实际上是重叠的。
7.Modbustcp的端口号?
502,相信很多人都知道,这是唯一分给工业标准的端口号,自豪去吧。当然了,实际应用中不见得非要用这个,只要两端对应好就可以了。
8.modbus符合Iso/OSI模型么?
其实我我个人认为不太符合,尽管这两年modbus基金会,吧他的协议问题都分层分块了,但是最开始设计的时候就不是给予这个结构考虑的,后往上靠,总让人觉得不伦不类的。
9.Daniel/enron/OMNI MODBUS是啥?
modbus的扩充标准,主要是数据类型做了扩充。其实标准就像是路,走的人多了,路也就成为路了。
10.modbus浮点数为啥有4个顺序?
因为一个浮点数占用4个字节,2个寄存器,因为标准没有规定浮点数咋读取(好像是modbus制定的时候浮点数标准还没有制定呢),人们怎么处理的都有,常见的就是4个字节的处理办法,但是就算是都用了4个字节,但是大家的顺序还是千奇百怪(说是千奇百怪,实际上就4种)
11.rtps是啥?
写到了这里,发现题目弄错了,但是也懒得修改了,现今啥都喜欢弄个十大,咱也就不改了,嘿嘿。
随着工业以太网的热火朝天,modbus -tcp/ip与其他的工业以太网协议相比,明显弱了很多。所以modbus基金会赶紧制定了rtps,主要是赶上这一波。主要是增加了发布和订阅机制。这里补充说明一些,发布和订阅机制已经在很多协议和规范里面采用了(比如OPC,bacnet, IEC61850.。。。。。),在现今如果说一个以太网的协议还不支持这个,确实有点说不过去了。

你可能感兴趣的:(Modbus的十大问题)