2016-01-21 138 views
0

我對編程比較陌生,所以請耐心等待。我正在嘗試與測量設備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 

那麼,怎樣才能正確讀出數據,發送到串口呢?提前致謝。

回答

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你也可以簡單地嘗試修改這個輝煌的代碼爲你的目的,看看你更容易成功。

+2

感謝您的回答,鏈接真的很棒。雖然,問題是另一個:我只是不得不使用「ser.setDTR(1)」。我認爲,在定義端口名稱時設置了DTR的使用,但事實並非如此。 – kire

相關問題