2015-10-26 71 views
0

我在兩週前在我的大學完成了項目。我必須從連接在COM端口上的METEX設備讀取溫度。我決定使用Python的pyserial。我在互聯網上的幾個例子中,並按照他們我做了這樣的事情:使用pyserial進行COM端口編程

import serial 

ser = serial.Serial(
    port='\\.\COM1', 
    baudrate=1200, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_TWO, 
    bytesize=serial.SEVENBITS, 
    timeout=5 
) 

if ser.isOpen(): 
    ser.close() 

ser.open() 
ser.write('D') 
s=ser.read(13) 
print s 
ser.close 

,並沒有工作,但它應該做的。一般情況下,當您發送'D'字符時,該設備會向您的計算機發送13個字節包含溫度。儘管我試圖在代碼和系統配置中更改所有內容,但無法解決此問題。我的講師也無法幫助我,因爲他不用Python工作。他試着說,他向我展示了他用C編寫的舊程序,但他只有沒有代碼的exec文件。程序在我執行我的Python腳本的同一臺計算機上工作,所以我確信COM端口,設備和系統能夠正常工作。

今天,無意中我添加的代碼如下:

import time 
import serial 

ser = serial.Serial(
    port='\\.\COM1', 
    baudrate=1200, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_TWO, 
    bytesize=serial.SEVENBITS, 
    timeout=5 
) 

ser.setRTS(False) 
time.sleep(0.5) 
ser.setRTS(True) 
time.sleep(0.5) 
ser.setRTS(False) 

if ser.isOpen(): 
    ser.close() 

ser.open() 
ser.write('D') 
s=ser.read(13) 
print s 
ser.close 

,現在,它完美的作品。爲什麼??!! 我必須從這個練習中做出報告,並逐行描述我的代碼。請幫幫我。

操作系統:Windows XP。

+0

你的端口名字看起來錯了,在Windows中可以只使用「COM1」 ......很多時候,你需要作出迴應由於設備com端口初始化,必須設置準備發送標誌,這是非常奇怪的,因爲99.9999%的設備不關心這個......它看起來像所有的init都只是默認值(即y你可以做'serial.Serial(「COM1」,1200,timeout = 5)' –

+0

這是一個SDI-12通信設備嗎? sdi-12不是標準串口... –

+0

我不知道這個設備是否使用sdi-12,但它不重要。腳本與這些幾行與rts工作,我不知道爲什麼。任何其他想法? –

回答

0

我會想象你正在使用的設備METEX預計RTS要麼是「假」或者脈衝假真假。

有關於METEX 14字節的協議在這裏的一些信息:http://sigrok.org/wiki/Multimeter_ICs#Metex_14-byte_ASCII

一個非常簡單的方法來研究是使用一個終端程序(一個允許您控制RTS)您的電腦上手動coimmunicate與METEX米,看看有什麼級別的RTS必須得到METEX設備D.