Pymodbus——监听 PLC 设备上的输入变化
Pymodbus – Listen for input change on PLC device
我正在对 PLC 设备 (Moxa ioLogik E1214) 进行编程,并将 DI 端口连接到按钮,线圈连接到 LED 灯。这个想法是当你按下一个按钮时,LED 应该亮起。
如果您按住按钮直到读取输入功能执行,我已经让程序运行。问题是我想设置一个时间范围(X 秒),如果在此时间范围内按下(而不是按住)按钮,则灯应该切换。
代码如下:
import time
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
from pprint import pprint
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
moxaA = ModbusClient('XX.XX.XX.XX', port=502)
print "Press a button now"
time.sleep(2)
result = moxaA.read_input_registers(0x30, 1)
if result:
pressedBtn = result.registers[0]
if pressedBtn == 1:
moxaA.write_coil(0, 1)
else:
moxaA.write_coil(0, 0)
如您所见,我为读取输入寄存器设置了超时。但是,我如何才能 "listen" 在这些秒内更改输入,而不必按住按钮直到执行读取输入寄存器功能?
提前致谢
您忘记了一些参数(unit
、connect
、isError()
)。
我改进了您的代码段:
moxaA = ModbusClient('XX.XX.XX.XX', port=502)
if moxaA.connect()
print "Press a button now"
time.sleep(2)
result = moxaA.read_input_registers(0x30, 1, unit=1)
if not result.isError():
pressedBtn = result.registers[0]
if pressedBtn == 1:
moxaA.write_coil(0, 1, unit=1)
else:
moxaA.write_coil(0, 0, unit=1)
[注意]:
- 对于上述
sleep(2)
你应该按下按钮 2 秒或 2 秒后。
isError()
定义在pymodbus 1.4.0及以上版本。
- 您应该指定
unit
,在许多情况下 unit
等于 1
。
我正在对 PLC 设备 (Moxa ioLogik E1214) 进行编程,并将 DI 端口连接到按钮,线圈连接到 LED 灯。这个想法是当你按下一个按钮时,LED 应该亮起。
如果您按住按钮直到读取输入功能执行,我已经让程序运行。问题是我想设置一个时间范围(X 秒),如果在此时间范围内按下(而不是按住)按钮,则灯应该切换。
代码如下:
import time
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
from pprint import pprint
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
moxaA = ModbusClient('XX.XX.XX.XX', port=502)
print "Press a button now"
time.sleep(2)
result = moxaA.read_input_registers(0x30, 1)
if result:
pressedBtn = result.registers[0]
if pressedBtn == 1:
moxaA.write_coil(0, 1)
else:
moxaA.write_coil(0, 0)
如您所见,我为读取输入寄存器设置了超时。但是,我如何才能 "listen" 在这些秒内更改输入,而不必按住按钮直到执行读取输入寄存器功能?
提前致谢
您忘记了一些参数(unit
、connect
、isError()
)。
我改进了您的代码段:
moxaA = ModbusClient('XX.XX.XX.XX', port=502)
if moxaA.connect()
print "Press a button now"
time.sleep(2)
result = moxaA.read_input_registers(0x30, 1, unit=1)
if not result.isError():
pressedBtn = result.registers[0]
if pressedBtn == 1:
moxaA.write_coil(0, 1, unit=1)
else:
moxaA.write_coil(0, 0, unit=1)
[注意]:
- 对于上述
sleep(2)
你应该按下按钮 2 秒或 2 秒后。 isError()
定义在pymodbus 1.4.0及以上版本。- 您应该指定
unit
,在许多情况下unit
等于1
。