¿Cómo enviar y recibir sobre el puerto serie RS485?
-
12-12-2019 - |
Pregunta
Quiero comunicarme entre mi PC y algunas tablas de controlador.
La expectativa es que la PC enviará un identificador de la Junta en RS-485 y luego debe recibir la respuesta de la Junta.
Cuando intento recibir la respuesta, recibo los datos incorrectos.
Aquí está mi 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 si estoy usando RS-232, pero no cuando estoy usando RS-485.
Actualización:
Es RS-485 2 Cable. ( http://en.wikipedia.org/wiki/ RS-485 )
Solución
Encontré el problema.
sp.Read(rec,0,rec.Length);
Read
es un método que no de bloqueo, por lo que lee el búfer pero no espera a todos los bytes.Por lo tanto, debe utilizar el valor de retorno de esta función que devuelve un entero con una cantidad de bytes que podría leer.
Estoy usando esto:
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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow