0

PySerial を使用してデータ取得を実行するプロセスがあります。現在は問題なく動作していますが、継続的に動作させるためにやらなければならなかった奇妙なことがあり、これが正常かどうかわからないので、この質問をしています。

何が起こるか:接続がときどき切断されるようです! 約 30 ~ 60 分に 1 回、エラー バーが大きくなります (数時間かかっても問題ありませんが、頻繁に発生することもあります)。

私の質問:これは標準ですか?

私の一時的な解決策:次のような単純な「再開」機能を作成しました。

def ReopenDevice(devObject):
    try:
        devObject.close()
        devObject.open()
    except Exception as e:
        print("Error while trying to connect to device " + devObject.port + ". The error says: " + str(e))
        time.sleep(2)

そして、データのプルが 2 分間失敗した場合、この機能を使用してデバイスを再度開くと、問題なく正常に動作し続けます。

私のプログラムモデル:これは、ユーザーが「開始」などをクリックするGUIプログラムであり、そのボタンはいくつかの準備を行い、multiprocessing.Process()次で始まる機能を実行します。

devObj = serial.Serial()
#... other params
devObj.open()

そしてその関数は、次のようなデータをポーリングし続ける while ループを実行します。

bytesToRead = devObj.inWaiting()
if bytesToRead != 0:
    buffer = decodeString(devObj.read(bytesToRead))
    #process buffer and push it to a list...

問題が発生したことを私が知っている方法は、devObj.inWaiting()ゼロを返し続けることです...デバイスにどれだけのデータがあっても!

この動作は予期されたものであり、それが発生するかどうかに関係なく常に考慮する必要がありますか?

4

1 に答える 1

0

inWaiting()あまり頻繁に電話をかけなくなった後、問題は大幅に減少しました。とにかく、再接続部分を保持して、プログラムが失敗しないようにしました。問題の考えられる原因を提案してくれた「Kobi K」に感謝します。

于 2016-10-18T14:05:01.273 に答える