我在兩週前在我的大學完成了項目。我必須從連接在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。
你的端口名字看起來錯了,在Windows中可以只使用「COM1」 ......很多時候,你需要作出迴應由於設備com端口初始化,必須設置準備發送標誌,這是非常奇怪的,因爲99.9999%的設備不關心這個......它看起來像所有的init都只是默認值(即y你可以做'serial.Serial(「COM1」,1200,timeout = 5)' –
這是一個SDI-12通信設備嗎? sdi-12不是標準串口... –
我不知道這個設備是否使用sdi-12,但它不重要。腳本與這些幾行與rts工作,我不知道爲什麼。任何其他想法? –