gpt4 book ai didi

python - Pymodbus – 监听 PLC 设备上的输入变化

转载 作者:行者123 更新时间:2023-12-01 08:50:19 27 4
gpt4 key购买 nike

我正在对 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)

如您所见,我为读取输入寄存器设置了超时。但是我怎样才能在这些秒内“监听”输入变化,而不必按住按钮直到读取输入寄存器函数执行?

提前致谢

最佳答案

您忘记了一些参数(unitconnectisError())。

<小时/>

我改进了您的代码片段:

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 及更高版本中定义。
  • 您应该指定单位,在许多情况下单位等于1

关于python - Pymodbus – 监听 PLC 设备上的输入变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53153806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com