0

デバイスイベントを検証するPythonプログラムを書いています。

デバイスのシリアルポートからデータを継続的に読み取っています。デバイスのシリアルポートに何かを書き込むと、デバイスはシリアルポートに文字列を書き込みます。これを読み取る必要があります。シリアルポートから部分を継続的に読み取ることは、別のワーカースレッドにあり、1行ずつ読み取り、スレッドに書き込みます。デバイスはいくつかのデータを継続的に書き込み、またイベントの説明をserailポートに書き込みます。

より具体的には、デバイスに何かを書き込むと、デバイスにイベントが生成されます。イベントの説明はシリアルポートに書き戻されます。これを読み返して、イベントが発生したかどうかを検証する必要があります。

スレッドでデバイスの出力を1行ずつ読み取っているときに何が起こっているのか、何かを書き込んでそのイベントdescの読み取りを開始するまでに、その出力はすでに行われ、次の出力行が読み取られています。これを同期するにはどうすればよいですか?

この部品の設計に役立つものはありますか?

4

2 に答える 2

0

非同期 IO にスレッドを使用しているだけの場合は、スレッドを使用せずに select.select を使用するか、さらに簡単にしたい場合は非同期コアを使用することをお勧めします。

http://docs.python.org/library/asyncore.html

于 2012-09-07T23:07:00.803 に答える
-1

コード スニペットは次のとおりです。

クラス シリアルコム:

 __init__(self,comport):

     self.comport = comport

     self.readSerialPortThread = ReadSearialPortThread(self.comport)

  def writeStringToSerialPort(someString):

     self.comport.write(someString)

  def waitfordata(someString):

    #I have to continuously read data from serial port till we someString.

ReadSearialPortThread では、serialport からのデータがデバイス情報の値を継続的に読み取っています。writeStringToSerialPort() を使用してデータを書き込むと、デバイスからシリアル ポートにデータが出力されます。デバイスからの応答を検証するために、関数 waitfordata からこのデータを読み取る必要があります。

今何が起こっているかというと、いくつかの値を書き込んで waitfordata() を呼び出すと、必要な値が readSerialPortThread によって既に読み取られており、デバイス情報などの他の値の読み取りが続けられています。だから私はそこで価値を失っています。シンクロさせる方法が知りたいです。

于 2012-09-21T19:46:17.323 に答える