Liaison serie : mauvaise reception [Résolu]

Signaler
Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008
-
Messages postés
1
Date d'inscription
vendredi 1 avril 2011
Statut
Membre
Dernière intervention
8 avril 2011
-
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.

6 réponses

Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008

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).
Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008

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)?
Messages postés
12
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2008

Desole pour le bouton "reponse accepte", je ne sais pas pourquoi il est apparu...
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
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#
*/
Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006

tu utilises MSCommLib?
Messages postés
1
Date d'inscription
vendredi 1 avril 2011
Statut
Membre
Dernière intervention
8 avril 2011

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

}
}