RS485 시리얼 포트를 보내고받는 방법은 무엇입니까?
-
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);
}
. 제휴하지 않습니다 StackOverflow