RS-485シリアルポート経由で送受信するにはどうすればよいですか?

StackOverflow https://stackoverflow.com//questions/10689404

  •  12-12-2019
  •  | 
  •  

質問

PC といくつかのコントローラー ボードの間で通信したいと考えています。

PC が RS-485 でボードの識別子を送信し、ボードから応答を受信することが期待されます。

応答を受信しようとすると、間違ったデータを受信します。

これが私のコードです:

public void set()
    {

        SerialPort sp = new SerialPort("COM1");
        sp.Open();
        if (sp.IsOpen)
        {
            byte[] id = new byte[]{0,0,0,0,0,0,0,0,0,0};
            byte[] rec = new byte[540];
            while (!end)
            {
                sp.Write(id,0,id.Length);

                sp.Read(rec,0,rec.Length);

                //do some with rec
                //WORKING
                //do soem with rec

            }
        }
        sp.Close();
    }

RS-232 を使用している場合は機能しますが、RS-485 を使用している場合は機能しません。

アップデート :

RS-485 2線式です。(http://en.wikipedia.org/wiki/RS-485)

役に立ちましたか?

解決

問題が見つかりました。

 sp.Read(rec,0,rec.Length);

Read は非ブロッキング メソッドであるため、バッファを読み取りますが、すべてのバイトを待機するわけではありません。したがって、読み取れるバイト数を含む整数を返すこの関数の戻り値を使用する必要があります。

私はこれを使用しています:

int read = 0;
int shouldRead = readData1.Length;
int len;
while (read < shouldRead )
{
    len = serialport.Read(buffer, 0, readData1.Length);
    if (len == 0)
         continue;
    Array.Copy(buffer, 0, readData1, read, len);
    read += len;
    Thread.Sleep(20);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top