私は現在、フロー制御の2つの可能な方法を提供する、やや古いモデルのHPプリンターとのインターフェースを試みています。フロー制御をまったく行わないか、ソフトウェアベースのフロー制御(XON/XOFF)です。
次のコマンドで pySerial を初期化し、データをポートに書き込むために単純な大きな文字列を並べるだけです。
serial = serial.Serial(port = '/dev/ttyUSB3', baudrate = 9600, parity = serial.PARITY_ODD, stopbits = serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS)
これは問題なく動作しますが、問題があります。フロー制御が完全に無視され、データが送受信されているように見えます。その結果、デバイスで IO バッファ オーバーフローが発生し、動作が停止します。
私が最初に考えたのは、serial.write('unbelivable long string') を使用すると、pySerial が送信を停止できない可能性があるため、文字列をチャンクに分割して送信したことです。
data = ['command', 'another command', 'more commands', 'you get the drift...']
for i in data:
serial.write(i)
うーん...これもうまくいきません。
したがって、基本的には、ボーレートを低いものに変更して、デバイスが送信よりも高速になるようにするか、いくつかのチャンクごとにスリープのようなものを追加することができます...しかし、これはそうすべきではないと思います.
だから...誰か私に説明してください、私は何を間違っていますか? ;-)
ありがとう、
マーティン