Como enviar e receber pela porta serial RS-485?
-
12-12-2019 - |
Pergunta
Quero me comunicar entre meu PC e algumas placas controladoras.
A expectativa é que o PC envie um identificador da placa no RS-485 e então receba a resposta da placa.
Quando tento receber a resposta, recebo os dados errados.
Aqui está o meu código:
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();
}
Funciona se eu estiver usando RS-232, mas não quando estiver usando RS-485.
ATUALIZAR :
É RS-485 2 fios.(http://en.wikipedia.org/wiki/RS-485)
Solução
Eu encontrei o problema.
sp.Read(rec,0,rec.Length);
Read
é um método sem bloqueio, portanto lê o buffer, mas não espera por todos os bytes.Então você precisa usar o valor de retorno desta função que retorna um número inteiro com um número de bytes que ela pode ler.
Estou usando isso:
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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow