2

私はこれが初めてで、電圧計からデータを読み取るための小さなアプリケーションを書いています。RadioShack デジタル マルチメーター 46 レンジです。私のプログラムの目的は、特定の電圧を検出したときに自動的に何かを実行することです。私は C# を使用しており、既に SerialPort クラスに精通しています。

私のプログラムが実行され、電圧計からデータが読み込まれます。ただし、データはすべてフォーマットされていない/意味不明です。このデバイスには、PC に電圧を表示する独自のソフトウェアが付属していますが、独自のプログラムから電圧を取得する必要があるため、これは役に立ちません。このデータを有用なものに変換する方法がわかりません。

参考までに、私は SerialPort.Read() メソッドを使用しています。

byte[] voltage = new byte[100];
_serialPort.Read(voltage, 0, 99);

データを取得し、次のように表示します。

16 0 30 0 6 198 30 6 126 254 30 0 30 16 0 30 0 6 198 30 6 126 254 30 0 30 16 0 3
0 0 6 198 30 6 126 254 30 0 30 16 0 30 0 6 198 30 6 126 254 30 0 30 16 0 30 0 6
198 30 6 126 254 30 0 30 24 0 30 0 6 198 30 6 126 254 30 0 30 16 0 30 0 254 30 6
126 252 30 0 6 0 30 0 254 30 6 126 254 30 0

配列の各要素はスペースで区切られます。byte[] の代わりに char[] 配列を使用すると、完全に意味不明になります。

▲   ? ? ▲ ♠ ~ ? ▲   ♠   ▲   ? ? ▲ ♠ ~ ? ▲   ♠   ▲   ? ? ▲ ♠ ~ ? ▲   ♠

.ReadExisting() メソッドを使用すると、次のようになります。

▲ ?~?♠~?▲ ▲? ▲  ?~♠~?▲ ?↑ ▲ ??~♠~?▲ F? ▲ ??~♠~?▲ D? ▲ ??~♠~?▲ f?

.ReadLine() がタイムアウトするため、機能しません。ReadByte() と ReadChar() は、配列関数への Read() と同様の数値を与えるだけです。

私はこのようなことをしたことがなく、他にどこを向くべきか本当にわからないので、頭がいっぱいです。

4

4 に答える 4

3

近いように聞こえますが、使用する正しいエンコーディングを理解する必要があります。

バイト配列から文字列を取得するには、使用されているコード ページを知る必要があります。マニュアルに記載されておらず、google/bing/other の検索で見つからない場合は、試行錯誤する必要があります。

GetChars() を使用してバイト配列から文字列を取得する方法については、 Decoder.GetChars メソッドを参照してください 。コード サンプルで、次の行を見てください。

 Decoder uniDecoder = Encoding.Unicode.GetDecoder();

その行は、Unicode コード ページを使用して正しいコード ページを取得することを具体的に示しています。

そこから、Encoding クラスのオーバーライドを使用して、別のコード ページを指定できます。これはここに文書化されています: Encoding Class

使用されているエンコーディングが標準の 1 つでない場合は、Encoding クラスのコンストラクターで Encoding(Int32) オーバーライドを使用できます。有効なコード ページ ID のリストは、「Windows でサポートされているコード ページ」にあります。

于 2013-08-27T19:36:27.870 に答える
0

コミュニケーションの問題を解決するための地区戦略は 2 つあります。

  1. 適切なドキュメントを見つけて参照し、仕様を実装するプログラムを設計/変更します。

    以下は適切かもしれませんが、お持ちの特定のモデル DVMを説明するものではありません。それにもかかわらず、それらは出発点として役立つかもしれません。これらのドキュメントの作成者は、それぞれのモデルが「視覚的に同一」である可能性があるとコメントしていますが、「以前の RS-232 モデルの LINUX で動作したと報告されているオープンソース パッケージは、2200039 では動作しない」ともコメントしています。

http://forums.parallax.com/attachment.php?attachmentid=88160&d=1325568007

http://sigrok.org/wiki/RadioShack_22-812

http://code.google.com/p/rs22812/

  1. プロトコルのリバース エンジニアリングを試みます。ループ内のデータを読み取って結果を収集できる場合、プロトコルをリバース エンジニアリングするための適切なアプローチは、さまざまな代表的な信号を DVM に適用することです。短絡抵抗測定、各種安定電圧測定などにご利用いただけます。

私が提案する最も価値のある手法は、自動可変信号発生器を使用することです。このように、データのパターンを分析することで、どの点が生データを表し、どの点が測定単位や動作モードなどの安定した記述データを表しているかをより簡単に識別できるはずです。

于 2013-08-30T12:34:44.100 に答える
0

一部のデジタル マルチメータは、7 ビット データ転送を使用します。シリアル通信ポートは、標準の 8 データ ビットではなく 7 データ ビットに設定する必要があります。

于 2014-08-31T18:30:23.727 に答える