1.Modbus协议包括

  1. MODBUS-RTU:用的多,Rtu走的是二进制,如1-1;10-0x0A/10dec
  2. modbuspoll提示insufficient bytes received_数据

  3. MODBUS-ASCII:ASCII走的是字符,10-0x31 0x30;
  4. MODBUS-TCP:

2.信息的交互

现行MODBUS标准中定义了19种交互流程,分别对应一种功能码,常用流程对应的功能码为01-06,15,16,主要完成数据的读写。——主机发送请求,从机响应数据。
由于MODBUS-RTU协议通常用于非平衡传输总线(RS485),协议要求严格遵守同步请求模式,即主机发送请求后直至接收从机回复数据或超时无响应,主机才能发送其他请求,同时总线上只能有一个主机。

RS485

RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。
RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准
多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。
RS-485的电气特性:逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。

3.Modbus存储区

modbus与PLC是什么关系?

Modbus起初是为PLC开发的,所以寄存器的定义会参考PLC的一些寄存器配置,但Modbus并不仅限于PLC。

Modbus存储

数据类型:布尔量 寄存器
只读布尔量——叫做——输入线圈——规定——1区(10001,19999)
只读寄存器——输入寄存器——规定——3区(30001,39999)
读写布尔量——输出线圈——规定——0区(00001,09999)
读写寄存器——输出寄存器——规定——4区(40001,49999)

4.功能码

modbuspoll提示insufficient bytes received_数据_02

5.使用Modbuspoll,ModbusSlave,及VSPD仿真

ModbusPoll/ModbusSlave/VSPD

ModbusPoll ——客户端,主站

ModbusSlave——服务器,从站

VSPD扮演虚拟串口——是一对19,20,往COM19输数据,COM20能得到。串口波特率96N81

从站设置:

modbuspoll提示insufficient bytes received_数据_03


主站设置:

modbuspoll提示insufficient bytes received_Modbus协议_04

modbuspoll提示insufficient bytes received_数据_05


只要改从站上的值,主站上的寄存器值就会变。

6.看报文(从站观察)

modbuspoll提示insufficient bytes received_Modbus协议_06

从站收

000000-Rx:01 03 00 00 00 0A C5 CD——————这个是从站收

01——主站地址

03——功能码

00 00——起始地址

00 0A——数量10个寄存器,20个

C5 CD——校验

modbuspoll提示insufficient bytes received_数据_07

从站发

000001-Tx:01 03 14 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC 5F——————这个是从站发,就是把从站的数据发到主站

01——主站地址
03——功能码
00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00——10个值 如00 64表示第一个寄存器的值(2个字节)注意是16进制所以是0x64=100Dec。

modbuspoll提示insufficient bytes received_数据_08


Tip:其中的字节计数是可以变的,切合数据量匹配。