Modbus 经由过程多条线在装备之间传输数据,此中最简略的设置是利用串行电缆毗连主机和从机。数据以 0 或 1 的字符串传输,一个数字便是一个比特。0代表正电压,而1代表负电压。比特数据传输速率很是快,罕见的传输速率为9600波特(即9600 bits/s)。
信息存储在从站的四个差别表中。两个表存储数字量,称为线圈;别的两个表存储摹拟量,称为寄放器。对线圈和寄放器,一个是只读的,一个是可读写的。每一个表能够存储 9999 个值。线圈为一名,地点为0000~270E;寄放器为一个字(16 位,2 字节),地点也是从 0000 到 270E。
线圈/寄放器编号 | 数据地点 | 范例 | 表名 |
1-9999 | 0000 到 270E | 读写 | 团圆输入线圈 |
10001-19999 | 0000 到 270E | 只读 | 团圆输入触点 |
30001-39999 | 0000 到 270E | 只读 | 摹拟输入寄放器 |
40001-49999 | 0000 到 270E | 读写 | 摹拟输入坚持寄放器 |
Coil/Register 的数目能够看做是地点的称号,它们不会呈现在现实发送的动静中。数据地点在现实发送的动静中。
比方第一个Holding Register的编号是40001,它的数据地点是0000,这两个编号的区分是由于偏移量。
在收集中,每一个从机都被分派了一个独一的装备地点,规模从 1 到 247。当主机要求数据时,发送的动静的第一个字节是从机地点。如许,从机领受到第一个字节后,就晓得是不是须要疏忽后续信息。
主机发送的第二个字节是功效码。该功效码告知slave须要拜候哪一个表,是往表中写数据还是从表中读数据。
风趣的代码 | 步履 | 表名 |
01(01 十六进制) | 读 | 团圆输入线圈 |
05(05 六角) | 写单 | 团圆输入线圈 |
15(0F 十六进制) | 写多个 | 团圆输入线圈 |
02(02 十六进制) | 读 | 团圆输入触点 |
04(04 六角) | 读 | 摹拟输入寄放器 |
03(03 六角) | 读 | 摹拟输入坚持寄放器 |
06(06 六角) | 写单 | 摹拟输入坚持寄放器 |
16(10 六角) | 写多个 | 摹拟输入坚持寄放器 |
CRC代表Cyclic Redundancy check,便是在每条动静发送后增添两个字节,以查抄发送或领受是不是有毛病。动静的每一个字节都用于计较 CRC。领受器在领受数据时计较 CRC。而后,它将计较成果与发送方计较的 CRC 停止比拟。若是二者差别,则会产生毛病。
数据地点 | 读 | 写单 | 写多个 |
团圆输入线圈 0xxxx | FC01 | FC05 | FC15 |
团圆输入触点 1xxxx | FC02 | 不合用 | 不合用 |
摹拟输入寄放器 3xxxx | FC04 | 不合用 | 不合用 |
摹拟输入坚持寄放器 4xxxx | FC03 | FC06 | FC16 |
注:FC 代表功效代码
数据要求:
11 01 0013 0025 0E84
11:从机地点(0x11 = 17)
01:功效码01(读取线圈状况)
0013:线圈首地点(0x0013=19,+1偏移=#20线圈)
0025:要读取的线圈数(0x25 = 37, 20~56)
0E84:CRC
数据呼应
11 01 05 CD6BB20E1B 45E6
11:从地点(0x11 = 17)
01:功效码01(读取线圈状况)
05:以后的字节数(37/8=5 字节)
CD:线圈 27-20 (1100 1101)
6B:线圈 35-28 (0110 1011)
B2:线圈 43-36 (1011 0010)
0E:线圈 51-44 (0000 1110)
1B:3个空格和线圈56-52 (0001 1011)
45E6:CRC