3

最終的に特定のポートからの情報を読み取り/保存する必要があるため、pyserial の使用を開始しました。次のコードを使用すると、使用したポートを出力してから、テキスト ("hello") を書き込んで読み込もうとしています。ポートは正常に印刷されていますが、文字列の出力は 5 になっています。これはなぜですか?

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] を使用して、このようなテスト用のポートをエミュレートしています。

ありがとう、スティーブ

4

2 に答える 2

3

この方法でテストできます。最初にポートの管理でポートのペアを作成します

最初のポート: COM199 2 番目のポート: COM188

[ペアを追加] をクリックします

1 つのコンソール/スクリプトで、次の手順を実行します。

>>> 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

この方法で(または)ポートごとにpythonプログラムを作成してテストできます

于 2016-08-05T15:03:24.760 に答える
0
x = ser.write("hello")
print x

あなたはこれを送信済みとして書いています。受信情報ではありません。おそらく、送信した文字列の長さが書き込まれます。まず、送信された情報に応答するクライアント側スクリプトが必要です。

そして、その上でこのようなものを使用する必要があります。

...     x = ser.read()          # read one byte
...     s = ser.read(10)        # read up to ten bytes (timeout)
...     line = ser.readline()   # read a '\n' terminated line
于 2016-08-05T13:44:02.060 に答える