문제

내 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