gpt4 book ai didi

python - 使用pyserial读取Scale显示b''

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:25 24 4
gpt4 key购买 nike

我对使用 pyserial 相当陌生,目前在阅读量表时遇到困难。我相信这与我在 python 上没有正确执行的一些初始化有关。我一直在使用 LabVIEW 来运行秤,但我试图摆脱它,因为我对它的了解非常有限。当我执行以下代码时,我得到 b ' ' 打印。如果没有超时,代码将永远持续下去,除非我拔掉设备(我也使用了 ser.readline())。我已经附上了labview中使用的初始化代码(如果有帮助的话)(我知道框图上的设置与代码不同,但您可以在前面板上手动更改它们以匹配比例设置)。我非常感谢您提前提供的任何帮助!

ser = serial.Serial("COM3", 
9600,
timeout = 2,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_ODD)
print('Connected')
ser.read(5)

Labview Diagram

最佳答案

设置

您的电缆应该没问题,因为您可以连接 Scale UART。然后,您必须正确设置连接。根据你的图和一些documentation (第 55 页,也 see )应该是:

import serial    
ser = serial.Serial("COM3",
1200,
timeout = 2,
bytesize=serial.SEVENBITS,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_ONE)

如果您在通信过程中遇到乱序字符,则很可能需要修复上述设置以匹配比例设置。

通讯

由于没有从 UART 读取字符而发生超时。设备很可能在轮询模式下工作,或者在读取调用期间未满足的特定条件下以字符方式工作。

手册说(第 65 页):

The print command can be transmitted by a software command or by pressing .

投票

在第一种情况(轮询模式)中,您必须在读回任何信息之前发送命令(由协议(protocol)定义)。这个manual (第 53-63 页)对用于交换信息的协议(protocol)进行了一些说明。例如。如果我们想轮询比例模型:

ser.write(b"\x1bx1_\r\n") # Send data, stands for: ESC x 1 _ CR LF (p. 62)
rep = ser.read(64) # Try to read up to 64 bytes

要从 Scale 读取数据,请使用:

ser.write(b"\x1bP\r\n")        # Equivalent to press button
# (block auto print, see p. 61)
rep = ser.read(ser.in_waiting) # Read pending bytes, should returns 16 bytes
# eg.: b"+****72.55*g**\r\n" (p. 57)

您可以查看this行为使用:

rep = ser.read_until()

它将在返回之前等待 \n(换行),启动脚本并按下按钮。您应该会收到来自体重秤的数据。

如果秤在特定事件上传输数据(例如:按下按钮),那么您需要解决完全不同的问题。您需要实现一个监听器,因为您需要连续监听 UART。它通常使用队列来完成,主要思想是(为了简单起见,使用 bytearray 进行模拟):

q = bytearray()    
while True:
# Read until Line Feed:
d = ser.read_until()
# Update queue:
q.extend(d)
# Logic here to consume queue:
# ...

不要在生产中使用最后一个片段,它只是一个用于修复想法的虚拟示例。如果您使用此解决方案,您最好实现监听器服务来解决 Producer-Consumer Problem .

在轮询和流之间进行选择取决于设备功能和您的应用程序要求。

关于python - 使用pyserial读取Scale显示b'',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60462391/

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