如何使用pyModbusTCP库向多个Modbus线圈写入值?
Modbus write_coils 方法使用说明
首先明确:标准的write_coils方法是针对连续地址段设计的,和你看到的示例逻辑一致:
- 第一个参数是起始地址
- 第二个参数是对应数量的线圈值列表,列表长度就是要写入的线圈数量
比如示例client.write_coils(1, [True]*8),实际是从地址1开始,连续给地址1到8的8个线圈都设置为True。
针对不同需求的解决方案
1. 写入连续地址的线圈
如果你的8个Modbus地址是连续的,直接用write_coils即可,只需要把起始地址设为这段连续地址的最小值,值列表对应每个地址的状态:
# 示例:给地址5到12的8个连续线圈设为True client.write_coils(5, [True]*8)
2. 写入非连续地址的线圈
如果你的8个地址是分散的(比如[2,4,6,8,10,12,14,16]),要注意:
Modbus协议的「写入多个线圈」功能码(0x0F)本身只支持操作连续地址块,所以绝大多数客户端库的write_coils方法都不支持直接传入非连续地址列表。这种情况下,你只能循环调用单个的write_coil方法来实现:
# 示例:给8个非连续地址的线圈设为True target_addresses = [2,4,6,8,10,12,14,16] for addr in target_addresses: client.write_coil(addr, True)
虽然循环调用看起来繁琐,但这是符合Modbus协议规范的实现方式,也是这类场景下的常规解决方案。
内容的提问来源于stack exchange,提问作者user8901723980173
相关产品推荐
相关产品推荐

