2

したがって、シリアルポートを開き、シリアルポートを介して天びんからデータを正常に送信するには、serialPortオブジェクトの設定が天びんの実際の設定と一致していることを確認する必要があります。

さて、問題は、設定が異なるために接続が確立されていないことをどのように検出するかです。接続が確立されたことを示すために、serialPort.Openによって例外がスローされることはありません。はい、設定は有効ですが、デバイス(バランス)設定と一致しない場合。なぜ天びんからの重量が捕らえられないのか、私は暗闇の中にいます。

ここに何か入力はありますか?

4

3 に答える 3

1

天びんから期待されるデータのフォーマットに関する情報がこれ以上わからない場合は、一般的なシリアル ポート設定の不一致検出手法のみを適用できます。

UART 設定が大幅に間違っている場合、多くのフレーミング エラーが発生する可能性があります。UART が 1 ストップ ビットを予期している場合、実際には 0 が表示されます。これは、ポートのErrorReceivedイベントで検出できます。

private void OnErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
    if ((e.EventType & SerialError.Frame) == SerialError.Frame)
    {
        // your settings don't match, try something else
    }
}
于 2009-02-27T21:27:59.903 に答える
0

ほぼ同じでも正しくない場合、.NET シリアル ポート オブジェクトはエラーを表示しない場合があります (つまり、何か壊滅的な事態が発生するまで)。

最も一般的なシリアル ポート通信障害は、ボー レートの不一致が原因で発生します。「エコー」が得られることがわかっているメッセージがある場合は、ハンドシェイクの一環としてそれを試してください。接続しているデバイスに「ステータス」メッセージが表示されている可能性があります。リクエストしても害はなく、コミュニケーションが正しく流れているかどうかがわかります。

ソフトウェア ハンドシェイク (xon xoff) の場合、正しく構成されているかどうかを検出するためにできることはほとんどありません。シリアル ポート オブジェクトは、基になるシリアル ポート ドライバーの実装に応じて、完全に無視することから、スレッド例外エラーを発生させることまで、あらゆることを行うことができます。xon/xoff を完全に無視し、文字をプログラムに直接渡すシリアル ポート ドライバーを使用しました。

ハードウェア ハンドシェイクの場合、デバイスの動作方法によっては、ボー レートの基本的なエコー戦略が機能する場合があります。ハードウェア ハンドシェイクを行うことがわかっている場合は、それを検出して有効にすることができます。デバイスがハードウェア ハンドシェイクを必要としていて、それがオンになっていない場合、何も得られない可能性があります。逆の場合も同様です。

めったに使用されないもう 1 つの設定は、DTR ピン (データ端末の準備完了) です。一部のシリアル デバイスでは、データの送信を開始する時期であることを示すために、これをアサート (つまり、true に設定) する必要があります。デフォルトでは false に設定されています。回転させてください。

シリアル ポート オブジェクトは ... 扱いにくいことに注意してください。必ずしも必要ではありませんが、変更を加える前にポートを閉じることを検討してください。

編集:

コメントのおかげで、これがあなたのデバイスのようです。デフォルト設定は次のようにする必要があります。

  • 1200ボー
  • 奇数パリティ
  • 1ストップビット
  • ハードウェア ハンドシェイク

データ ビット数は指定されていませんが、デバイスは 7 と 8 をサポートしていると言っています。両方とも試してみたいと思います。また、600、1200、2400、4800、9600、および 19200 ボーをサポートしていると述べています。

ハードウェア ハンドシェークをオンにし、DTR (別のもの) を有効にして、さまざまなボー レートをすべて循環させた場合、それが自分の設定ではない可能性が高くなります。使用されているシリアル ケーブルがデバイスに正しく配線されていない可能性があります。一部のシリアル ケーブルは「パススルー」ケーブルで、片側の 1 ~ 9 ピンがもう一方の 1 ~ 9 ピンと正確に一致します。次に、「TX」ケーブルと「RX」ケーブルが切り替えられる「クロスオーバー」ケーブルがあります(一方が送信すると、もう一方が受信する、非常に便利なケーブルです)。

そこのマニュアルの後ろにあるコマンド表を見ることを検討してください。何らかのタイプのエコーを返すために発行できる「ソフトウェアバージョンの印刷」コマンドがあります。

于 2009-02-27T21:38:06.180 に答える
0

シリアル ポートは、 RS-232と呼ばれる非常に古いプロトコルを使用する非常に古い通信技術を使用します。. これは非常に簡単です... 2つのエンドポイントにはクロックが同期されており、クロックサイクルごとにライン電圧をテストして、電圧が高いか低いかを確認します(高は0を意味し、低は1を意味し、これは反対です)ほとんどの慣習の...これもプロトコルの時代の産物です)。クロック同期は、実際にはバイト間の休止時間であるストップ ビットを使用して実現されます。パリティ ビット、XON/XOFF など、プロトコルのより高度な用途に投入されるものは他にもいくつかありますが、それらはすべて、この非常に基本的な通信層の上に乗っています。シリアル回線の両端でクロックの不一致を検出することはほぼ不可能です。受信側で誤ったデータが得られるだけです。プロトコル自体には、この状況を識別する方法が組み込まれていません。入力データが不適切な周波数でクロックされていることに気付くほどスマートなシリアルドライバーを知りません。パリティ ビットなどのエラー検出スキームのいずれかを使用している場合、確率的にすべてのバイトがエラーとして宣言されます。要するに、受信データのエラーをチェックするのが最善の方法です (パリティ エラーはドライバー/ソフトウェア レイヤーで検出する必要がありますが、そのレイヤーからアプリが受信したデータのエラーはプログラムでチェックする必要があります。後者は、チェックサム)。

于 2009-02-27T21:38:49.143 に答える