如何通过rs-485串口发送和接收?

M.M*_*agh 5 c# serial-port rs485

我想在我的 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();
    }
Run Code Online (Sandbox Code Playgroud)

如果我使用 RS-232,它会起作用,但当我使用 RS-485 时则不起作用。

更新 :

它是 RS-485 2 线。( http://en.wikipedia.org/wiki/RS-485 )

M.M*_*agh 4

我发现了问题。

 sp.Read(rec,0,rec.Length);
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)