Liaison serie : mauvaise reception

Résolu
JMsme Messages postés 12 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 28 novembre 2008 - 16 juin 2006 à 10:54
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.

6 réponses

JMsme Messages postés 12 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 28 novembre 2008
21 juin 2006 à 10:48
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).
3
JMsme Messages postés 12 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 28 novembre 2008
16 juin 2006 à 15:09
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)?
0
JMsme Messages postés 12 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 28 novembre 2008
16 juin 2006 à 15:12
Desole pour le bouton "reponse accepte", je ne sais pas pourquoi il est apparu...
0
cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 juin 2006 à 23:48
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#
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mydust Messages postés 11 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 17 juin 2006
17 juin 2006 à 12:02
tu utilises MSCommLib?
0
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
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);
}

}
}
0
Rejoignez-nous