Communication port série.

pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008 - 12 mars 2008 à 10:08
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 14 mars 2008 à 13:17
Bonjour à tous, j'ai un soucis pour programmer une communication ...

Je dois envoyer des informations à un robot par un port série, puis attendre sa réponse et lui en renvoyer une autre.

Pour le premier envoi, pas de problème mais mon soucis, c'est quand j'attend sa réponse.

Soit elle n'arrive jamais (le robot la renvoi c'est sur ^^), soit je ne sais pas comment la détecter.

J'ai essayer d'utiliser le MSComm1_OnComm mais je n'ai rien eu de bon.


Si quelqu'un pouvait me dire comment lire les informations recus par le port série.

15 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 mars 2008 à 10:37
Salut,
Regarde dans la section code si tu n'en trouve aucun qui puisse t'aider à résoudre ton problème et à comprendre la réception de données avec MSCOMM on en reparlera. Mais j'en doute.

@+: Ju£i?n
Pensez: Réponse acceptée
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
12 mars 2008 à 10:49
J'ai déjà été voir les différents codes sources.

Mon MSComm1_OnComm ne s'active pas (j'ai poser un point d'arrêt et le prog ne passe pas par la). Mais le robvot fais bien les mouvements (donc les infos sont bien envoyer).

Et lorsque j'utilise le comm1.input, je n'arrive pas à faire de boucle me permettant de la vérifier jusqu'à se qu'elle change.

Merci de me contacter si tu veux bien m'aider.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 mars 2008 à 11:03
Bonjour

Tu as mis RThresold (ou un nom du genre) à une valeur différente de 0 (1 par exemple) ?

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
12 mars 2008 à 11:19
j'ai rajouté RThresold = 1 dans ma form mais il ne va toujours pas dans le MSComm1_OnComm et pour ma boucle elle est toujours infini ...
0

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

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 mars 2008 à 11:28
Bonjour

Peux-tu montrer comment est ta boucle de réception ?
Utilises-tu un DoEvents ?

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
12 mars 2008 à 14:03
For i = 0 To 1

if mscomm1.input < > memoire then
memoire = mscomm1.input
Label2.Caption = MSComm1.input
else
i=i-1
end if
Next i

J'avais essayer une boucle avec For / Next .
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 mars 2008 à 14:11
Bonjour

Sauf erreur de ma part, "mscomm1.input" retourne un tableau d'octet ou une chaine de caractère puis vide le tampon de réception.

A la place d'un :
    For i=0 to 1
    ...
        If ... Then
            i=i-1
        End if
    next
Préfère un :
    Do
        ...
    Loop {while|until} ...

Pour savoir si tu as reçu quelque chose, utilises InputLen (ou approchant) pour connaitre la quantité de données reçues.

En supposant que tu reçois une string :
Dim lRecept as String
lRecept=""

do while mscomm1.InputLen=0 'Revoir le nom de la prop, je n'en suis pas sûr.
    doevents 'pour laisser souffler le programme
loop

lrecept=mscomm1.input

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
12 mars 2008 à 15:09
Do While MSComm1.InBufferCount = 0
DoEvents 'pour laisser souffler le programme
Loop

If MSComm1.InBufferCount > 0 Then
Label6.Caption = MSComm1.Input
End If

le label me marque "?"

j'ai essayé de remplacer inbuffercount par mscomm1.InputLen et le label ne change pas (le programme ne rentre pas dans la boucle).
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 mars 2008 à 15:21
Bonjour

La communication doit se faire en ASCII seul ?
Sinon, il se peut que ce soit un pb de parité (paire d'un coté et impaire de l'autre) et que la propriété ParityReplace (ou ressemblant) soit à True.

Le fait qu'il ne rentre pas dans la boucle indique que des données ont été reçues (InBufferCount>0), donc normalement, le test après sera toujours vrai (sauf si tu ajoute une gestion  de timeout).

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
12 mars 2008 à 15:30
tu veux pas venir m'expliquer ton histoire de ASCII sur msn car sinon ca risque d'être long par forum.

mon adresse c'est aye350z@hotmail.fr
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 mars 2008 à 15:47
Bonjour

1) je n'ai pas MSN
2) Je suis au boulot, donc pas de MSN non plus

Pour t'aider d'avantage, il faudrais peut être ce que tu transmet et comment (Bauds, parité, nbbits, nbstop, ...).

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
12 mars 2008 à 15:58
Moi le programme es tpour le travail donc j'ia droit à msn ^^.

Sinon mes paramêtres sont : MSComm1.Settings = "600,n,8,1"
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 mars 2008 à 16:13
Bonjour

Déjà, tu reçois quelquechose

Au moment où tu passe dans le test pour définir le texte du label, tu as combien dans la propriété InBufferCount ?

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pandaye Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 13 mars 2008
13 mars 2008 à 16:47
Merci pour ton aide, j'ai réussi à le faire marcher !!!

Maintenant je dois faire une com entre un siemens cpu 400 et VB par un serveur OLE tu saurais encore m'aider ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 mars 2008 à 13:17
Bonjour

Dsl, mais OLE, ça fait un moment que j'ai laissé tomber.
Tu peux regarder du coté de COM (DLL ActiveX).

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Rejoignez-nous