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

Mahiouz - Modifié par Whismeril le 8/06/2015 à 18:52
Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023 - 9 juin 2015 à 21:06
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

Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023 645
8 juin 2015 à 18:43
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.
0
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???
0
Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023 645
9 juin 2015 à 10:11
Essaye le join avant l'encoding
0
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
0
Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023 645
9 juin 2015 à 13:12
Bonjour, si tu n'essayes pas ce que je te proposes, je te laisse avec ton problème.
0
Mahiouz > Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023
9 juin 2015 à 14:01
le soucis je comprend pas comment adapter le string.join à mon code
0
Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023 645 > Mahiouz
9 juin 2015 à 18:52
As tu lu le lien de l'aide en ligne?
0
ouiii je l'ai lu
0
Whismeril Messages postés 18783 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 novembre 2023 645 > Mahiouz
9 juin 2015 à 21:06
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);

0
Rejoignez-nous