Come inviare e ricevere sulla porta seriale RS485?
-
12-12-2019 - |
Domanda
Voglio comunicare tra il mio PC e alcune schede del controller.
L'aspettativa è che il PC invierà un identificatore della scheda su RS-485 e quindi dovrebbe ricevere la risposta dalla scheda.
Quando provo a ricevere la risposta, ricevo i dati errati.
Ecco il mio codice:
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();
}
.
funziona se sto usando RS-232, ma non quando sto usando RS-485.
Aggiornamento:
è RS-485 2 Wire. ( http://en.wikipedia.org/wiki/ RS-485 )
Soluzione
Ho trovato il problema.
sp.Read(rec,0,rec.Length);
.
Read
è un metodo di non bloccamento in modo da leggere il buffer ma non attende tutti i byte.Quindi è necessario utilizzare il valore di ritorno di questa funzione che restituisce un numero intero con un numero di byte che potrebbe essere letto.
Sto usando questo:
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);
}
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow