2016-08-05 31 views
1

我剛開始使用pyserial,因爲我最終需要讀取/保存來自特定端口的信息。使用下面的代碼我只是打印使用的端口,然後嘗試寫入,然後讀入一些文本(「你好」)。該端口打印正常,但我的字符串的輸出是作爲5.任何想法,爲什麼這是?Python/Pyserial:從端口讀取傳入信息

import serial 
import sys 
from time import sleep 

try: 
    ser = serial.Serial('\\.\COM8', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS) 

except: 
    sys.exit("Error connecting device") 

print ser.portstr 

x = ser.write("hello") 
print x 

ser.close() 

輸出:

>>> 
\.\COM8 
5 
>>> 

此外,有沒有爲我一個簡單的方法來模擬文本信息通過該端口來,這樣我可以測試讀取/保存傳入的信息流?

我正在使用Python 2.7和'虛擬串口驅動程序8.0'[Eltima VSPD]來模擬測試這個東西的端口。

謝謝你,史蒂夫

+0

的創建Python程序是Eltima VSPD您正在使用? –

+0

是的。我還使用了'虛擬串行端口仿真器 - 仿真解決方案'並獲得相同的輸出。 – Steve

回答

1

你可以這樣做來測試它。首先創建管理端口對端口

第一口:COM199 第二口:COM188

單擊添加對

在一個控制檯/腳本做下面的步驟:

>>> import serial 
>>> ser = serial.Serial('COM196', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.S 
BITS_ONE, bytesize=serial.EIGHTBITS) 
>>> print ser.portstr 
COM196 
>>> x = ser.read(5) # It will be waiting till it receives data 
>>> print x 
hello 

在另一個控制檯上,執行以下步驟:

>>> import serial 
>>> s = serial.Serial('COM188') 
>>> s.write("hello") 
5L 

可以測試這種方式(或)通過爲每個端口

+0

謝謝,這非常有幫助。你已經在代碼中使用了port196,但是這個端口並沒有初始設置(你創建了對199&188)。這是什麼意思? – Steve

0
x = ser.write("hello") 
print x 

您寫這爲sended。這不是收到的信息。它可能會寫出你已發送的字符串的長度。 首先你需要有一個客戶端腳本來響應你的發送信息。

而你必須使用這樣的東西就可以了。

...  x = ser.read()   # read one byte 
...  s = ser.read(10)  # read up to ten bytes (timeout) 
...  line = ser.readline() # read a '\n' terminated line 
+0

謝謝。有沒有辦法模擬傳入的信息來測試? – Steve

+0

好的,有一個視頻顯示如何連接TCP UDP而不是串行,但它是相同的邏輯。你需要客戶端和服務器腳本都應該運行。 https://www.youtube.com/watch?v=XiVVYfgDolU – TuRQuaS3