我有一个 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")
解决这个问题的好方法是保持先前读数的状态,并且仅当先前状态为 1 时才增加 10 kW。
设置新变量
client = ModbusTcpClient(IP)
last_state = 1
current_kw = 260000
并检查 if
中的状态变化if b[0]==0 and last_state==1:
不要忘记在 while 循环结束时设置变量。