私はシリアル通信に基づいてある種のプロトコル用の監視ツールを開発しています。C#serialPort speed
シリアルボーレート= 187,5kb 私はSystem.IO.Ports.SerialPortクラスを使用します。
このプロトコルには4種類のフレームがあります。それらは1Byte、3Bytes、6Bytes、10-255Bytesです。 私は彼らと一緒に仕事をすることができますが、私は遅すぎてに応答しません。
最初は最初に梱包されています。 96ms(遅すぎる)、それには約1000Bが含まれています。これは、20〜50フレーム(あまりにも遅すぎる)を意味します。 後でその作業がより安定し、3-10Bytesですが、1-2フレームが含まれているのでまだ遅すぎます。コース1のフレームはOKですが、2は遅すぎます。
もっと信頼できる方法を教えてください。私はそれが可能であることを知っている。
Revision1:
私はストレートな方法を試してみました:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!serialPort1.IsOpen) return;
this.BeginInvoke(new EventHandler(this.DataReceived));
}
そして、その背景ワーカー: そして...新しいトレッド(読む) と...いつも同じ。遅すぎる、遅すぎる。 WinApiに戻り、kernel32.dll関数をインポートする必要がありますか?
リビジョン2: これは踏み込みの方法で、コード使用の一部です:
int c = serialPort1.BytesToRead;
byte[] b = new byte[c];
serialPort1.Read(b, 0, c);
私はそれがSERIALPORTクラス内のストリームの使用にいくつかの問題があると思います。または何らかの同期問題。
改訂3: 私はすぐに両方を使用しません!私はちょうど異なった方法を試みた。このバグが時々発生しませんDataReceivedイベントに関係しているよう
よろしく MarekKは
何らかのコードや何らかの情報がないと、ごく少数の人があなたを助けることができます。あなたはどのように港から読むのですか? –
コードの一般的な動作は非常に大きいです。コードの一部が何かを待っているようです。私は魔女を知らない。 – MrHIDEn
** SerialStreamサブクラスであるBaseStreamを使ってみました。 私は同じ結果を得ました。しかし!!!!!! 私は自分のラップトップ用のPCIeカードを探し始めました.PCIエクスプレスカードでもUSBに基づいたコンバータは、USBスタックのために通信レベルが良くないことがわかりました。私は、データストリームがUSB手続きを待っていると思います。私はこれが最も難しいと思います。私はPCIe 232カードを購入しようとしています。** – MrHIDEn