我有一个连接到device的USB连接,该串口发出串行信息。 当在下面(在Jupyter Notebook中)运行Python脚本时,会从中获取成对数据。
当某个值高于特定阈值时,我能以某种方式触发某些事情吗?例如。总是检查V的值,当它超过12000时我要执行一些操作?
import serial
ser = serial.Serial(port='COM3', baudrate=19200, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=1)
ser.flushInput()
message=""
while True:
message =ser.readline().decode('utf-8')
print(message)
我的输出如下:
PID 0xA054
FW 139
SER# HQ1746QEX1D
V 11750
I -320
VPV 10
PPV 0
CS 0
MPPT 0
ERR 0
LOAD ON
IL 300
H19 0
H20 0
编辑:澄清
Edit2:到达那里
import serial
V_THRESHOLD = 11739
ser = serial.Serial(port='COM3', baudrate=19200, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=1)
ser.flushInput()
message=""
while True:
message = ser.readline().decode('utf-8', 'ignore')
if len(message) > 1:
message_parts = message.split('\t')
key = message_parts[0]
value = message_parts[1]
if key != "PID":
if type(value) != str:
if key == 'V' and value > float(V_THRESHOLD):
print("HI")
请问有人可以说明我的列表为何超出范围吗?
答案 0 :(得分:0)
正如我在评论中所写,有一个分隔符,用于分隔键和值,在您的情况下为\t
,表示Tab。
我们可以使用此字符来分割配对并将它们保存在变量中。
import serial
V_THRESHOLD = 12000
ser = serial.Serial(port='COM3', baudrate=19200, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=1)
ser.flushInput()
message=""
while True:
message = ser.readline().decode('utf-8')
if len(message) > 1:
message_parts = message.split('\t')
key = message_parts[0]
value = message_parts[1]
if key == 'V' and value > float(V_THRESHOLD):
# do something here
答案 1 :(得分:0)
非常感谢@reportgunner! 使用他的代码,我能够创建它,效果很好!
import serial
V_THRESHOLD = 1
ser = serial.Serial(port='COM3', baudrate=19200, bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE, timeout=1)
ser.flushInput()
message=""
while True:
message = ser.readline().decode('utf-8', 'ignore')
message_parts = message.split('\t')
if len(message_parts) > 1:
key = message_parts[0]
value = message_parts[1]
#print(key,value) used this for debugging
if key == 'V':
if int(value) >(V_THRESHOLD):
print("HI")