modbus 的 Python 循环

问题描述 投票:0回答:1

我有一个 modbus tcp/ip 热量计,我从中得到值 1 或 0..

热量计每次达到 10kw 时都会发出“0”信号,否则为 1

在 python 中,我希望脚本一直运行并记录/计算每 10 千瓦。

例子:

Current kw: 260000 (manually read it from calorimeter and enter it to python)

Signal "0" (reached 10kw) - time 10:23

Signal "0" (reached 10kw) - time 10:35

Signal "0" (reached 10kw) - time 10:41

current kw: 260030
times reached 10kw: 3x

问题是,当热量计达到 10 千瓦时,它会同时发出多个零信号,而 python 将所有零加起来,而不是只有 1

例子:

1
1
1
1
0 (calorimeter reaches 10kw)
0
0
0
0
1
1
1

我应该怎么做才能读取每个信号的第一个零,否则我该如何计算?

当前代码:

from pymodbus.client import ModbusTcpClient
from datetime import datetime

IP = '192.168.22.95'
client = ModbusTcpClient(IP)

current_kw = 260000

while True:

    a = client.read_holding_registers(0, 1)
    b = a.registers

    if b[0]==0:
        date = datetime.now()
        current_kw += 10
        print (current_kw, "kW")
python modbus pymodbus
1个回答
0
投票

解决这个问题的好方法是保持先前读数的状态,并且仅当先前状态为 1 时才增加 10 kW。

设置新变量

client = ModbusTcpClient(IP)
last_state = 1
current_kw = 260000

并检查 if

中的状态变化
if b[0]==0 and last_state==1:

不要忘记在 while 循环结束时设置变量。

© www.soinside.com 2019 - 2024. All rights reserved.