【发布时间】:2016-01-25 22:06:15
【问题描述】:
我对编程比较陌生,所以请耐心等待。我正在尝试与测量设备 METEX M-4650CR https://sigrok.org/wiki/Voltcraft_M-4650CR 通信,并且我使用的是 Windows 7 64 位操作系统。我只是想将设备测量到的数据读出到我的 python 程序中并显示并用它计算。
我在手册 http://elektron.pol.lublin.pl/elekp/labor_instr/METEX_M-4650CR_Manual.pdf(第 25 页)中发现,它适用于 1200 的波特率、字节大小 7(使用 ASCII 编码)和 2 个停止位。
此外,可以通过简单地向计算机发出命令“M”来请求向计算机发送数据。然后它返回 14 个字节 给计算机。没有任何要测量的东西连接到它,它应该返回类似“DC 00.0000V CR”的东西。 CR 是这里的终结者(我希望这是正确的名称)。
这是我的代码:
import pyserial
import time
ser = serial.Serial(port='COM5', baudrate=1200,
bytesize=7, stopbits=2, timeout=1,
rtscts=False, dsrdtr=True)
time.sleep(1)
ser.write("M")
time.sleep(1)
bytestoread = ser.inWaiting()
print bytestoread
output = ''
output += ser.read(1000)
print 'output:' + str(output)
time.sleep(1)
ser.close()
我的问题是,我无法使用 pyserial 正确读取数据。我将命令“M”发送到 METEX,在显示屏上显示“发送”一小会儿,所以我猜我的写命令工作正常。但在那之后(它应该发送数据),我从ser.inWaitung 得到的只是'0L' 或'1L' 而ser.read 命令什么也没给出。
我认为这不是硬件问题,因为使用另一个名为“serialwatcher”的程序,我能够正确读取数据。它准确地给出了手册中描述的字符。
我还尝试了以下 while 循环,但遇到了问题,大部分时间 inWaiting == 0,因此它永远不会初始化循环。
while ser.inWaiting() > 0:
output += ser.read(1)
if output != '':
output = outpus.rstrip()
print output
那么,我怎样才能正确读出发送到串口的数据呢?提前致谢。
【问题讨论】:
-
你能分享解决方案吗?
标签: python serial-port pyserial