Question

Je souhaite communiquer entre mon PC et certaines cartes contrôleurs.

On s'attend à ce que le PC envoie un identifiant de la carte sur RS-485 et qu'il reçoive ensuite la réponse de la carte.

Lorsque j'essaie de recevoir la réponse, je reçois des données erronées.

Voici mon code :

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();
    }

Cela fonctionne si j'utilise RS-232, mais pas lorsque j'utilise RS-485.

MISE À JOUR :

C'est RS-485 2 fils.(http://en.wikipedia.org/wiki/RS-485)

Était-ce utile?

La solution

J'ai trouvé le problème.

 sp.Read(rec,0,rec.Length);

Read est une méthode non bloquante donc elle lit le tampon mais n'attend pas tous les octets.Vous devez donc utiliser la valeur de retour de cette fonction qui renvoie un entier avec le nombre d'octets qu'elle pourrait lire.

J'utilise ceci :

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top