该功能码用于在远程设备中写多个线圈的输出状态. 主设备在请求PDU的数据域中指定线圈地址和各个线圈的ON/OFF状态. 每个二进制位表明一个线圈的状态, 1表明ON, 0表明OFF,
PDU中线圈的地址是从0开始的.
在从设备返回的消息中,
请求PDU的构成
|
域 |
字节数 |
描述 |
|
功能码 |
1 |
0x0F |
|
线圈起始地址 |
2 |
0x0000-0xFFFF |
|
线圈数量 |
2 |
0x0001-0x07B0 |
|
字节总数 |
1 |
N |
|
线圈输出值 |
N |
若N%8==0, 则n=N/8, 否则n=N/8+1.
响应PDU的构成
|
域 |
字节数 |
描述 |
|
功能码 |
1 |
0x0F |
|
线圈起始地址 |
2 |
0x0000-0xFFFF |
|
线圈数量 |
2 |
0x0001-0x07B0 |
错误PDU的构成
|
域 |
字节数 |
描述 |
|
功能码 |
1 |
0x8F |
|
异常代码 |
1 |
01或02或03或04 |
示例
写第20个线圈开始的连续10个线圈的值.
|
请求PDU |
响应PDU |
||
|
域 |
值(HEX) |
域 |
值(HEX) |
|
功能 |
0F |
功能 |
0F |
|
起始地址高8位 |
00 |
起始地址高8位 |
00 |
|
起始地址低8位 |
13 |
起始地址低8位 |
13 |
|
线圈数高8位 |
00 |
线圈数高8位 |
00 |
|
线圈数低8位 |
0A |
线圈数低8位 |
0A |
|
字节总数 |
02 |
||
|
输出值高8位 |
CD |
||
|
输出值低8位 |
01 |
||
在请求报文中, 线圈20对应的地址为19, 用十六进制表明为0x0013, 10个线圈, 用十六进制表明为0x000A.
由于请求的线圈状态为10个, 每个字节可以表明8个线圈状态, 所以需要2个字节表明全部10个线圈状态, 在请求PDU中, 字节总数为0x02.
线圈20-27的状态为
|
字节位序 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
线圈序号 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
|
线圈状态 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
用十六进制表明即为0xCD.
线圈29-28的状态为
|
字节位序 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
线圈序号 |
29 |
28 |
||||||
|
线圈状态 |
x |
x |
x |
x |
x |
x |
0 |
1 |
用x标示的位用0表明, 所以用十六进制表明即为0x01.
写多个线圈流程图
从设备写多个线圈流程图如下图所示.

写多个线圈流程图
备注
读线圈输入功能可阅读
https://www.toutiao.com/i7056402170543014413/
写单个线圈输入功能可阅读
https://www.toutiao.com/a7057771676746007053
参考文献
[1] Modbus Application Protocol(V1.1b). http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf
版权
转载或者引用本文内容请注明来源及原作者.



















暂无评论内容