5

私は C# で作業を始めたばかりで、現在 RS-485 を使用して他のデバイスと通信していますが、他のデバイスを実際に応答させることができないようです。すべてCOMポート4経由で接続されているため、シリアル通信を使用して特定のデバイスに書き込む方法があるかどうか疑問に思っていました.私はすでにserial.Write();を知っています. しかし、私の知る限り、送信先のアドレスを選択するオプションはありません。この質問の答えを知っている人はいますか?

よろしくお願いします

回答ありがとうございます。彼らは大いに役立ちました:)

4

2 に答える 2

9

クリストフは正しいですが、もう少し詳しく説明します。

RS232 で通信する場合、PC と外部デバイスの 2 つのエンドポイントしかありません。コマンドを送信することでデバイスと通信します。単純な ASCII テキストまたはバイナリ/16 進コードの場合があります。2 つのデバイス間で通信する方法はプロトコルとして知られています。デバイスと「通信」できるようにするには、アプリケーションでこのプロトコルを実装する必要があります。

RS485 は、PC に接続されている同じシリアル ポートで複数のデバイスをデイジー チェーンできるという点で、RS232 とは異なります。デバイスによっては、学習して慣れる必要があることを理解する独自のプロトコルがあります。これは、接続するデバイスに付属している必要があります。

通常、プロトコルには (少なくとも) 次の情報が含まれます。

  • デバイスアドレス - これを使用して、どのデバイスと話したいかを識別します。通常、ハードウェアのトグルスイッチなどで設定できます
  • コマンド - ユニットに送信する実際のコマンド
  • データ - 特定のコマンドに渡す必要がある追加データ

したがって、ユニットに送信するコマンドの例は次のようになります (これは単なる例であることに注意してください)。

$01FF9A

どこ:

01はモジュールまたはデバイスの一意のアドレス FFです コマンドの種類 9Aはデータです

ここでは、デバイスアドレス01を持つモジュールがコマンドを読み取り、「あなたが私に話しかけている」と推測し、コマンド情報を処理します。他のすべてのデバイスもデータを受信しますが、それ自体が宛先ではないことに気付きます。

通常、RS485 デバイスは 16 進数データを使用して通信するため、アプリケーションは 16 進数コマンドを外部デバイスに送信し、関連する応答などのために から への変換を処理する必要がありSerial.Write(byte[], int,int)ます。

.NET シリアル ポート クラスの詳細については、http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspxを参照してください。

于 2012-04-03T10:14:26.497 に答える
1

SerialPort クラスのインスタンスを作成できます。
ここで、ボーレート、ポート名などを定義できます。Open
() メソッドを呼び出した後、ポートとの間でデータを読み書きできます。

var port = new SerialPort();
port.PortName = "COM4";
port.Open();
于 2012-04-03T09:43:32.313 に答える