在从设备返回的中, 每个离散输入的状态用1位二进制数据进行编码, 1表示ON, 0表示OFF. 返回的每个字节可以表示8个离散输入的状态. 离散输入的状态按地址从低到高编码到字节流中. 返回字节流中的字节的低位对应低址址离散输入的状态, 返回字节流中的前面的字节对应低址址离散输入的状态. 第1个字节的最低位表示的状态对应要求PDU中首个离散输入的状态.
如果返回离散输入状态的数量不是8的整数倍, 则对应的字节的高位部分用0添补. 返回的字节总数域指天命据域的字节总数.

域
字节数
描述
功能码
1
0x02
起始地始
2
0x0000-0xFFFF
离散输入数
2
1-2000(0x7D0)
相应PDU的构成域
字节数
描述
功能码
1
0x02
字节总数
1
N
离散输入状态
n
n=N/8或N+1
若N%8==0, 则n=N/8, 否则n=N/8+1.
缺点PDU的构成域
字节数
描述
功能码
1
0x82
非常代码
1
01或02或03或04
示例读离散输入状态197-218.
要求PDU
相应PDU
域
值(HEX)
域
值(HEX)
功能
02
功能
02
起始地址高8位
00
字节总数
03
起始地址低8位
C4
离散输入状态(204-197)
AC
离散输入数高8位
00
离散输入状态(212-205)
DB
离散输入数低8位
16
离散输入状态(218-213)
35
在要求报文中, 离散输入197对应的地址为196, 用十六进制表示为0x00C4, 离散输入187-218对应22个离散输入, 用十六进制表示为0x0016.
由于要求的离散输入状态为22个, 每个字节可以表示8个离散输入状态, 以是须要3个字节表示全部22个离散输入状态, 在相应报文中, 字节总数为3.
离散输入204-197的状态为
字节位序
7
6
5
4
3
2
1
0
离散输入序号
204
203
202
201
200
199
197
198
离散输入状态
1
0
1
0
1
1
0
0
用十六进制表示即为0xAC.
离散输入212-205的状态为
字节位序
7
6
5
4
3
2
1
0
离散输入序号
212
211
210
209
208
207
206
205
离散输入状态
1
1
0
1
1
0
1
1
用十六进制表示即为0xDB.
离散输入218-213的状态为
字节位序
7
6
5
4
3
2
1
0
离散输入序号
218
217
216
215
214
213
离散输入状态
x
x
1
1
0
1
0
1
用x标示的位用0表示, 以是用十六进制表示即为0x35.
读离散输入流程图从设备读离散输入流程图如下图所示.
备注
读离散输入的过程与读线圈的过程基本上是同等的.
读线圈输入功能可阅读 https://www.toutiao.com/i7056402170543014413/
参考文献[1] Modbus Application Protocol(V1.1b). http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf
版权转载或者引用本文内容请注明来源及原作者。







