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 )

¿Fue útil?

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
scroll top