[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és18783Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention28 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 :
{ 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"); }
A voir également:
[renommé] lecture port série différente entre W8 64 et Xp
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");
}
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
Whismeril
Messages postés18783Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention28 novembre 2023645 9 juin 2015 à 13:12
Bonjour, si tu n'essayes pas ce que je te proposes, je te laisse avec ton problème.
Mahiouz
>
Whismeril
Messages postés18783Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention28 novembre 2023 9 juin 2015 à 14:01
le soucis je comprend pas comment adapter le string.join à mon code
Whismeril
Messages postés18783Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention28 novembre 2023645
>
Mahiouz
9 juin 2015 à 18:52
Whismeril
Messages postés18783Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention28 novembre 2023645
>
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.