[renommé] lecture port série différente entre W8 64 et Xp

Signaler
-
Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021
-
Bonjour,
J'ai réalisé une petite application qui fait établir une communication (envoi et réception des données via un port série) entre un pc et un automate.
Je travaille sous Visual Studio 2013 en c#, avec Windows 8 - 64 bits.
Un extrait de donnée que je reçois :
123456789
326547891
145879260
000005000
....

J'ai réalisé l'exécutable de l'application qui fonctionne sur un pc sous Windows xp- 32 bit.

le problème , quand je travaille avec l'application sous 64 bit, elle fonctionne bien j'arrive à recevoir les donnée correctement a partir de l'automate.
Mais quand je suis sous 32 bit, je reçois la 1er ligne correctement en suit le reste je reçois les autre données mais il y' a en plus des symbole,
exp:
123456789
_-,?\ 0.2:/

la je suis bloquer, j'ai aucune aidée de quoi ça peut être ?

Voilà le bout de code qui me permet de recevoir les données, vu que c# travaille en Unicode :


private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
serialPort2.Write("\u000D");// lance la tach envoiFil

{
char[] buffer = new char[255]; // on crée un char de 255 caractere
int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length
//tes characteres sont contenus dans buffer.
//on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.



for (int i = 0; i < longueur_bytes_read; i++)
{

value += buffer[i];


StatusLabel1.Text = "Transfert en cours...";
}

}
//pour afficher les données

private void button1_ecrir_Click(object sender, EventArgs e)
{
int nombre = System.Convert.ToInt32(value);

textBox1.AppendText(nombre + "\r\n");
}

4 réponses

Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021
516
Bonsoir,

A la place de ta boucle pour concatener ton tableau de bytes, tu peux essayer string.join
https://msdn.microsoft.com/fr-fr/library/dd988350(v=vs.110).aspx avec string.empty comme séparateur.

Apres si cela ne résout pas ton problème, il faudrait que tu journalises chaque étape dans un fichier texte par exemple pour voir ou ca cloche, puisque tu ne peux pas exécuter en mode debug.
bonjour,
merci pour le retour, j'ai fait quelque recherche et je voulais essayé de changer le codage en UTF8
public string value = string.Empty;

 private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            serialPort2.Write("\u000D");// lance la tach envoiFil
        
             while (serialPort2.BytesToRead > 0)
            {
               // char[] buffer = new char[255]; // on crée un char de 255 caractere
                byte[] buffer =new byte[255];// nouveau
                int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length
                //tes characteres sont contenus dans buffer.
                //on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.

                 for (int i = 0; i < longueur_bytes_read; i++)
                 {
                                  
                    //value += buffer[i];
                   
                   value = Encoding.UTF8.GetString(buffer);//nouveau
                     
                    }

                 StatusLabel1.Text = "Transfert en cours...";                 
                }
        
            }

private void button1_ecrir_Click(object sender, EventArgs e)
        {
           
            textBox1.AppendText(value + "\r\n");
        }



Mais la je n'arrive pas à afficher les données???
Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021
516
Essaye le join avant l'encoding
quand j'ajoute cette ligne dans l'affichage
textBox1.SelectedText = string.Empty;


le résultat: que j'ai plus de symbole mais le problème que les donnée sans pas celle qu'il faut afficher (c'est d'autre données différente de celle que je veux)

voila le code:
public string value = string.Empty;

        private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            serialPort2.Write("\u000D");// lance la tach envoiFil
        
             while (serialPort2.BytesToRead > 0)
            {
                //char[] buffer = new char[255]; // on crée un char de 255 caractere
                byte[] buffer =new byte[255];// nouveau
                int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length
                //tes characteres sont contenus dans buffer.
                //on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.

                               
               for (int i = 0; i < longueur_bytes_read; i++)
                 {
                                 
                   value += buffer[i];                     
                                      
                }

                 StatusLabel1.Text = "Transfert en cours...";                 
                }
             
            }

        private void button1_ecrir_Click(object sender, EventArgs e)
        {
            textBox1.SelectedText = string.Empty;
            textBox1.AppendText(value.ToString() + "\r\n");
        }

je ne comprend plus
Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021
516
Bonjour, si tu n'essayes pas ce que je te proposes, je te laisse avec ton problème.
>
Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021

le soucis je comprend pas comment adapter le string.join à mon code
Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021
516 > Mahiouz
As tu lu le lien de l'aide en ligne?
ouiii je l'ai lu
Messages postés
15655
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 mars 2021
516 > Mahiouz
Je cite
Concatène les éléments d'un tableau d'objets, à l'aide du séparateur spécifié entre chaque élément.


Or tu veux concatener un tableau de bytes, cela parait donc un outil adapté.
Je ne sais pas si ça va solutionner ton problème, mais au moins tu utiliseras le bon outil.

Un exemple avec un tableau de caractères:
            char[] tableau = { 'B', 'o', 'n', 's', 'o', 'i', 'r'};
            string texteAvecPoint = string.Join(".", tableau);
            string texteSansSeparateur = string.Join(string.Empty, tableau);