5

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 )

4

1 に答える 1

4

問題が見つかりました。

 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);
}
于 2012-05-24T04:02:27.640 に答える