2017-03-28 17 views
0

特定のサイズのデータ​​を特定の時間中にシリアルポートで待たなければなりません。この時間のデータが少なくなった場合は、データを読み込まないようにしたいと考えています。早い時期に十分なデータが得られれば、それらを読んでデータを待つのをやめてみたいと思います。Pythonで特定の時間中にシリアルポートでデータを待っています

私の現在のソリューションは、次のようになります。

serial.open() 
start_time = time() 
while serial.in_waiting < expected_data_size: # waiting certain size of data 
    if time_to_wait < time() - start_time: # time is expired 
     serial.close() 
     return 
data = serial.read(expected_data_size) 
serial.close() 

しかし、私はそれを待つ間の比較(「しばらく」でとブロック「の場合」)は、多くの時間を発生するので、それは、良い解決策ではないと思いますデータ。

私は、Python 3でよりうまく実装する方法を教えてください。シリアルポートで作業するには、pySerialを使用してください。

ありがとうございます!

答えて

1

新しいホイールを発明する必要はありません。 1)ポートを開くときにタイムアウトを設定する必要があります。 2)ポートが開いた後、 "read" APIで読み込むデータサイズを設定する必要があります。

読み取りAPIは、データサイズとともに返されるか、タイムアウトが発生した場合にはデータを返しません。

は、ドキュメントからのサンプルを参照してください。あなたの答えのための

>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser: 
...  x = ser.read()   # read one byte 
...  s = ser.read(10)  # read up to ten bytes (timeout) 
+0

感謝を!これはまさに私が必要なものです!もう1つ教えていただけますか?私は最初のN秒間、私はどんな場合でも十分なデータを受け取らないことを知っています。 ser.read(data_size)の前にsleep(N)を追加する価値はありますか? –

+0

@RomanAlexeev、あなたは睡眠を追加する必要はありません、APIはあなたのためにそれを処理します。 – Windchill

+0

ありがとうございました! –

関連する問題