2017-12-07 23 views
0

SAAT-520Wireless-Communication-Programming-Development-Protocol私はデバイス情報を取得するためにLowlevelコマンドを自分のRFIDに送信しようとしていました。私は接続をタップするためにwiresharkを使用しています。パケットがPCからRFIDデバイスにやって来るように見えます。Pythonソケットを使用したRFID(低レベルコマンド)

しかし、私のプログラムでは何の応答も出力できません。私は応答コマンドを持っているデバイスノートで、私は、私はコマンド応答を使用することができますかわからない。

Import socket 

TCP_IP = '192.168.0.238' 
TCP_PORT = 7086 
BUFFER_SIZE = 20 
MESSAGE = '0x55, 0x00~0xFF, 0x01, 0x00, 0x00~0xFF' 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    s.connect((TCP_IP, TCP_PORT)) 
except: 
    print ('failed' + TCP_IP, 'down') 
s.sendall(MESSAGE) 
data = s.recv(BUFFER_SIZE) 
s.close() 
print 'received', repr(data) 

なぜ私のプログラムからの応答がないのかわかりません。エラーもプログラムも成功しません。プロセスは決して終わらない。

また、添付ファイルのコマンドに関する注意事項もご覧ください。 (あなたの質問から)

システム情報照会コマンド(0x01H)

img1

コマンドレスポンス

img2

+0

私はあなたがフォーマットが間違っているかもしれないと思う、私はあなたが文字列のリストを望むと思うが、コンマで強くない。あなたがまだ助けを必要としているかどうかを教えてください。 – SteveJ

+0

ありがとう、私はあなたの助けに感謝します。 何とか私のこのコードは返信を得るために縫い目がありません –

+0

私は間違っていました - カンマリストは私も同様にそれを行う方法です。しかし、あなたのメッセージデータを見てください。私はあなたが文字通り '0x00〜0xFF'を入れるはずだとは思わない。私はそれがあなたがその範囲内の単一の値を必要とすることを意味すると思います。ドキュメントでは、成功した送信パケットの例を見つけることができますか? – SteveJ

答えて

0

s.sendall(MESSAGE) 
data = s.recv(BUFFER_SIZE) 
s.close() 

あなたは、送信を介してデータを送信しています、イメージされた応答データを求めてから、ソケットを閉じます。あなたが応答を得るのに十分な時間は過ぎていません。テストのために、間に時間遅延を入れてみてください。

import time 
s.sendall(MESSAGE) 
time.sleep(5) 
data = s.recv(BUFFER_SIZE) 
print(data) 
s.close() 

また、受信したデータを待つこともできます。

import time 
s.sendall(MESSAGE) 
while data is None: 
    data = s.recv(BUFFER_SIZE) 
    print "No data, waiting...." 
    time.sleep(0.5) 

print "Data arrived" 
incoming = data.decode('utf-8') 
print incoming 
# Process Data 

私のバッファサイズが小さすぎた場合、私は個人的な問題を持っていなかった - 私はそれに対処するためにタイムアウト例外をキャッチする必要がありました。おそらくあなたのバッファサイズを増やしてみてください。

以下は、私のアプリケーションに使用する実際のコードに近いものです。それはPython 3.xであり、あなたは少し条件づけする必要がありますが、それは私のために働きます。

  try: 
       data = s.recv(buf_len) 
       if data is not None and len(data) > 0: 
        while True: 
         new_data = s.recv(buf_len) 
         if new_data is None or len(new_data) == 0: 
          break 
         data = data + new_data 

      except socket.timeout: 
       if data is not None and self.callback is not None: 
        logger.debug(f"Received packet: {data}") 

incoming = data.decode('utf-8') 
print incoming 
# Process Data     
+0

まだ実行中ですが、以前と同じ出力応答がありません。 data.decode( 'utf-8')を使用して文字列に出力する必要がありますか? am'iコマンドレスポンスがありませんか? –

+0

私は本当にそれを解読する必要があります - 私は私の答えを更新しました。 – SteveJ

+0

私はPython 2.7を使用していますが、まだ私は応答を得ることはありません。私は何かが欠けているような継ぎ目があります。 \t は、私も自分のデバイスをアクティブにするために他のコマンドを送信しようとしたが動作しません。 コードの回答がありますか? –

関連する問題