1

pySerial 経由でいくつかのバイトを送信したい。テスト目的で、socat を使用して仮想シリアル ポートを作成しました。

socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600

Pythonコードは次のとおりです。

ser = serial.Serial('./ptyp1')
x = struct.pack('B',2)
print binascii.hexlify(x) # 02
ser.write(x)
y = ser.read(2)
print binascii.hexlify(y) # 5e42

私が得る出力:

02   # x
5e42 # y

私が期待する出力:

02 # x
02 # y

ここで何が間違っていますか?それはsocatまたはpythonですか?

編集:

x の値が異なると、他の奇妙な動作に気付きました。出力は次のとおりです。

x = 12  => y = 5E 52 0D 0A 5E 50
x = 100 => y = 100 # why does it work here?

解決:

問題は、書き込み先と同じポートで読み取ったことです。私が正しく理解すれば、socat は 2 つのポートを「in」と「out」として「接続」します。したがって、./ptyp1 に書き込む場合は、./ptyp2 を読み取る必要があります。その後、すべてが順調です。

4

3 に答える 3

2

問題は、私が書いたのと同じポートで読んだことでした。私が正しく理解すれば、socatは2つのポートを「in」と「out」として「接続」します。したがって、。/ ptyp1に書き込む場合は、。/ptyp2を読み取る必要があります。その後、すべてが順調です。

于 2011-05-20T07:51:33.873 に答える
0

戻ってきているように見えるのは、文字列「^B」です。socat(または途中で何か他のものが)送信しているバイト(\x02)をある種の制御コードとして解釈している可能性があります。

頭のてっぺんからCtrl-B、ページバックのニーモニックがありますが、よくわかりません。

于 2011-04-02T17:43:06.677 に答える
0

コードをテストするために socat をインストールしました。私はこの行を実行しました:

socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600

次に、次のコードが機能します。

from binascii import hexlify
from serial import Serial, struct

ser = Serial('ptyp1')
x = struct.pack('B', 2)
print hexlify(x) # 02
ser.write(x)
y = ser.read()
print hexlify(y) # 5E
y = ser.read()
print hexlify(y) # 42

出力:

02
5e
42
于 2011-04-02T15:54:39.867 に答える