MODBUS写多个线圈功能(0x0F)

该功能码用于在远程设备中写多个线圈的输出状态. 主设备在请求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.

写多个线圈流程图

从设备写多个线圈流程图如下图所示.

MODBUS写多个线圈功能(0x0F)

写多个线圈流程图

备注

读线圈输入功能可阅读

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

版权

转载或者引用本文内容请注明来源及原作者.

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容