我对编程比较陌生,所以请耐心等待。我正在尝试与测量设备METEX M-4650CR https://sigrok.org/wiki/Voltcraft_M-4650CR进行通信,我正在使用Windows 7 64位操作系统。我只是想读出设备测量的数据到我的python程序并显示它并用它来计算。Pyserial写入数据但不读取
我在手动http://elektron.pol.lublin.pl/elekp/labor_instr/METEX_M-4650CR_Manual.pdf(页面25ff)发现,它的工作原理与波特率1200,一个bytesize 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
那么,怎样才能正确读出数据,发送到串口呢?提前致谢。
感谢您的回答,链接真的很棒。虽然,问题是另一个:我只是不得不使用“ser.setDTR(1)”。我认为,在定义端口名称时设置了DTR的使用,但事实并非如此。 – kire