为什么要用modbus协议
modbus在公共设备上用的比较多,包括PLC、变频器、温控器、电脑都可以进行modbus通讯。
拿PLC举例,我们已经可以实现开关量、模拟量的控制都可以实现了,进行温度的测量,温度输出控制都可以了,那为什么还要使用通讯来解决这个问题呢?
举例:
板子上有八个继电器,八个输入。
如果单纯用PLC来控制的话,每一个继电器对应一个输出,每个输入端子对应输入,那么八个继电器就需要占用八个输出口,PLC上的输出口是有限的。
若我们使用通讯的话,就只需要用两根线就可以了
而且可以扩充继电器数量
- 能够减少PLC上的IO点
- PLC的电信号容易失真,modbus虽然也是通过电信号传播,但是不是模拟量而是数字通讯,只要数据不发生错乱,传递接收就是准确的。
- 数字通讯,减轻了CPU运算原理
通讯的原理以及数据格式
通讯:两个对象之间的数据交换
拿烽火狼烟举例
- 信道(485、TCP),信息传递方式
白天烧烟晚上明火
波特率、起始位、停止位不对是信道的问题。 - 协议
黄烟敌军入侵,红烟敌军撤退
modbus协议
bit是储存信息的最小百单位,只能储存0或者1;1B(byte,字节)度= 8 bit
字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位。
大小端模式:
这里有一篇讲大小端的博客:
https://www.cnblogs.com/Alandre/p/4878841.html
大小端模式各自优点:
大端:高位在前,便于判断正负和大小;另外,一般芯片发送的接口都是高比特先发送
小端:cpu做数值运算中依次中内存中先去高位数据再到低位数据,计算更加高效
大小端的应用:
x86、arm等芯片一般是小端(由cpu决定)
网络字节使用大端(网络上使用统一的网络字节顺序,可以避免兼容性问题),可以使用htons、htonl转换成网络字节
并行通讯——>串行通讯——>485
举个例子方便理解
通讯传递的数据:00010001
所谓的并行通讯就是 八根线,所有数据并行传递
所谓的穿行通讯就是 两根线,数据逐个传递
区分0,1:
电信号,有正负极的嘛,根据两根线的电压大小区分 0,1;为什么不是按照是否通电区分呢?因为无法判别是否是线断了。
波特率:串行通讯时,是一位一位的传递数据,因此需要规定 位跟位之间的时间间隔 这就是波特率
常见的波特率是 9600 其含义是,一秒钟传递9600个位
双方波特率要一致,否则信息就乱了。
modbus协议
Modbus是一种串行通讯协议
Modbus允许多个设备(大约247个)连接在同一个网络上进行通讯,大多数Modbus设备通信通过485串口物理层进行
三种通讯方式:RTU、ASCII、TCP/IP
这里有篇讲modbus不错的博客:
https://www.jianshu.com/p/a488a7b9796c
plc——>modbus
用plc和多台设备进行多机通讯,涉及轮循。