Liaison serie : mauvaise reception [Résolu]

Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008
- - Dernière réponse : jeremcsh
Messages postés
1
Date d'inscription
vendredi 1 avril 2011
Statut
Membre
Dernière intervention
8 avril 2011
- 8 avril 2011 à 14:50
Bonjour,



J'ai programmé une liaison rs232 (en utikisant createFile, readFile et
writeFile), mais je n'arrive pas à lire les messages que m'envoie mon
périphérique.



J'ai d'abord essayé en lisant en permanence ce qui arrivait en faissnt
un thread de lecture. Puis, j'ai pu voir qu'avec VB, il suffisait de
temporiser les lecture du buffer pour parvenir a recuperer les
reponses. J'ai alors essayé avec un timer de telle sorte que je ne lis
le buffer que toutes les 100ms.



Malheureusement, cela ne fonctionne toujours pas. Comment puis-je résoudre ce problème?



Merci de vos réponses.
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008
3
Merci
Merci, mais en fait, j'ai trouvé. Mon périphérique ne considére pas que
le message que j'envoie s'arrête au retour à la ligne comme dit dans la
doc, mais a la fin de l'envoi (je touche... euh, pardon). Il me
suffisait donc d'envoyer les messages séparément, et d'éviter tout
caractères en fin de trame (même des caractères '\0').


Pour le "réponse acceptée", j'ai compris trop tard, désolé, mais j'ai
été surpris de la taille et surtout de la position qu'avait ce bouton
la première fois que je l'ai vu (en plein milieu du message).

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de JMsme
Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008
0
Merci
Je peux préciser un peu ma question:


Je parviens à lire les données qui arrivent si il ne s'agit pas d'une
réponse à une requête que j'envoie. J'imagine donc que le problème se
trouve au niveau de l'écriture de la réponse dans le buffer alors que
celui-ci n'est pas encore disponible en écriture.



Ma nouvelle question est donc:


Comment parvenir à ecrire dans un port et lire la reponse immediatement
ou inversement (lire une requete et ecrire la reponse tout de suite)?
Commenter la réponse de JMsme
Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008
0
Merci
Desole pour le bouton "reponse accepte", je ne sais pas pourquoi il est apparu...
Commenter la réponse de JMsme
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
74
0
Merci
Salut,

Le bouton "Réponse acceptée" apparait automatiquement, il permet de valider le/les messages qui répondent/aident à répondre à la question.

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006
0
Merci
tu utilises MSCommLib?
Commenter la réponse de mydust
Messages postés
1
Date d'inscription
vendredi 1 avril 2011
Statut
Membre
Dernière intervention
8 avril 2011
0
Merci
Si quelqu'un sait comment on recoit des données sur la liaison série c'est super urgent merci d'avance.

namespace TestSerie
{
public partial class Testserie : Form
{
private Thread th1, th2;
int v 0, v1 0;
private TextBox refer;
private string s = "";

private delegate void T(string s);


private void tache(){

string donn;
//int i=0;
string requet = "B2\r\n";

//string mess;
try
{

while (true)
{
//MAJtexte((i++).ToString());
/*if (v == 1)
{
serialPort1.Write(requet);
Thread.Sleep(1500);
}*/
//else if (v1 == 2)
// {
serialPort1.ReadLine();//probleme de reception
serialPort1.Write(requet);

textBox1.Text += donn;


//Thread.Sleep(500);
//}

}
}
catch (TimeoutException)
{
MessageBox.Show("Erreur de lecture");
}
}

public Testserie()
{
InitializeComponent();
refer = textBox1;
}

private void MAJtexte(string s)
{
if (refer.InvokeRequired)
refer.Invoke(new T(MAJtexte), s);
textBox1.Text = s;
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Open();
textBox2.Text = "Connect";
}

private void butDeco_Click(object sender, EventArgs e)
{
th1.Abort();
textBox2.Text = "Deco";
serialPort1.Close();
}

private void envoi_Click(object sender, EventArgs e)
{
th1 = new Thread(tache);
v = 1;
th1.Start();
}

private void recept_Click(object sender, EventArgs e)
{
th2 = new Thread(tache);
v1 = 2;
th2.Start();
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
s+=serialPort1.ReadExisting();
MAJtexte(s);
}

}
}
Commenter la réponse de jeremcsh