【问题标题】:Pyserial writes data but does not readPyserial 写入数据但不读取
【发布时间】: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


【解决方案1】:

很遗憾,我无法测试您的代码,因为我没有串行设备,但您可以尝试以下方法:

你可以设置一个标志,例如alive 当您期待数据并尝试读取某些内容时。当我尝试从一台非常旧的光谱仪接收数据时,这对我有用。

     while alive:                          #loop
        text = ser.read(1)                 #try to read one line
        if text:                           #if there is data
            n = ser.inWaiting()            #look if there is more to read
            if n:                          #if so
                text = text + ser.read(n)  #get all of it

一个更复杂的例子可以在这里找到wxTerminal - Pyserial example你也可以简单地尝试根据你的目的修改这个出色的代码,看看你是否更成功。

【讨论】:

  • 感谢您的回答,链接真的很棒。虽然,问题是另一个问题:我只需要使用“ser.setDTR(1)”。我以为,在定义端口名称时设置了 DTR 的使用,但事实并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
相关资源
最近更新 更多