警告 - 一般都是 Modbus 和工业控制的初学者......抱歉任何不正确的术语/等。提前!
我有一个使用 Beckhoff BK9000/BK9100 以太网耦合器的项目,我需要检查多达六个数字输出(KL2602 模块)的状态,并根据某些逻辑打开/关闭相同的六个输出。
我知道该单元可以工作并且处于指定的 IP,因为我可以在 TwinCat3 中看到它并手动操作输出。
我一直在尝试使用以下代码:
from pyModbusTCP.client import ModbusClient
SERVER_HOST = "172.16.17.32"
SERVER_PORT = 502
# TCP auto connect on modbus request, close after it
c = ModbusClient(host=SERVER_HOST, port=SERVER_PORT, auto_open=True, auto_close=True)
for i in range(4):
print(str(i) + str(c.read_coils(i,16)))
status = c.write_single_coil(0, False)
print(status)
for i in range(4):
print(str(i) + str(c.read_coils(i,16)))
当我这样做时,我可以看到线圈“0”的真/假对应于我使用 TwinCat3 手动设置的各种输出状态。有六个输出手动设置为高,在此处可见:
0[True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False]
1[True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False]
2[True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]
3[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False]
看来,当我增加“线圈”时,它只是在流中再读一点,因为“线圈”1、2 和 3 向左旋转。
但是,我似乎仍然无法更改这些值。当将线圈“0”设置为 False(但没有单击 true)时,我确实听到了神秘的继电器咔嗒声,并且线圈读取的状态没有改变。TwinCat 也没有变化。我从写入中得到“无”,这表明根据模块的文档它失败了。
0[True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False]
1[True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False]
2[True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]
3[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False]
None
0[True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False]
1[True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False]
2[True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]
3[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False]
我确信这对于按位操作或类似我忽略的操作很简单。关于我做错了什么导致写入失败的任何想法?