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