我正在尝试将 OHAUS Explorer EX124/AD 天平连接到 Raspberry Pi 5,或者 Windows 10 PC,两次都使用天平上的 RS232 连接。两台计算机产生相同的结果。如果重要的话,RS232 连接器与 USB 适配器一起使用以插入计算机。
我不相信我已经陷入了这里看到的常见错误,例如错误的波特率、未对消息进行编码或省略返回字符
\r\n
。
我能够连接到天平,并能够在使用天平上的自动打印功能时或通过按打印按钮使用我的功能
autoprint
在计算机上读取数值。这适用于 Pi 和 Windows PC。
但是,如果我尝试向天平发送命令,它们总是会被忽略。没有显示错误,但没有任何反应(对于我的函数opendoor
)或返回空白消息(对于我的函数ip
)。
我从手册,第 EN-151 页,第 9.4.1 节获取了串行命令。我最感兴趣的命令是IP,它可以打印(将当前天平读数发送到计算机)和WI 1 1(打开天平的自动门)。
import serial
from time import sleep
import re
# Connecting to the balance - this works
try:
#ser = serial.Serial('COM3', # Works with Windows
ser = serial.Serial('/dev/ttyUSB0', # For use with Raspberry Pi - also works
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout = 1)
except Exception as scaleserror:
print("Unable to connect to balance:\n", scaleserror) # I do not get this message
def autoprint(): # This works as expected when the balance is autoprinting, or the print button is pressed on the balance - as expected
ser.flushInput()
ser.flushOutput()
weight = 0
sleep(0.1)
while weight == 0:
x = ser.readline()
if str(x)[2] == " ": # Interpreting the output of the balance
weight = re.findall(r'\b\d+[.,]?\d+\b', str(x))
return weight
def opendoor(): # This doesn't do anything
sleep(0.1)
ser.flushInput()
ser.flushOutput()
ser.write('WI 0 1\r\n'.encode()) # Three variations, none work, nothing happens
ser.write('WI11\r\n'.encode())
ser.write(b'WI11\r\n')
def ip(): # This doesn't work - returns blank
sleep(0.1)
ser.flushInput()
ser.flushOutput()
ser.write('IP\r\n'.encode())
sleep(0.1)
returnMsg = ser.readline()
print(returnMsg) # Returned message is blank (b' ')
opendoor()
ip()
我意识到如果没有特定的平衡,任何人都不太可能复制这个,但希望这段代码能够显示问题所在! 希望这是一个愚蠢的错误,因为这是我第一次使用 Python 进行串行连接。预先感谢!
与奥豪斯技术支持人员进行了更多交谈后,怀疑针对的是 RS232-USB 电缆。更换电缆后,它开始工作了!
我没有怀疑电缆,因为它在一个方向上工作(从秤到计算机),但在另一个方向(从计算机到秤)上不起作用!