Reception d'une trame

cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013 - 12 juil. 2005 à 23:32
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013 - 19 juil. 2005 à 21:08
Bonsoir

Je me tourne vers vous car je suis incapable de faire ce genre
de chose. Exist-il une routine pour capturer un trame arrivant sur le
port RS232 sans avoir tout un pacquet de symbole qui ne sont pas utile
(l'emision est le protocole VT100 au cas) Si oui merci pour le coup de
main.

8 réponses

steb359842 Messages postés 69 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 24 janvier 2008
13 juil. 2005 à 01:06
J'ai pas vraiment compris la question mais je peut te conseiller d'utiliser le composant MScomm32 qui permet de faire la liaison avec le port serie...

Celui ci à un événement du nom de "onComm" qui s'exécute lors de l'arrivée de donnée. Il à comme paramètre les donnée envoyée par l'emetteur... au format string

En espérant que cela aide...

*°*°*°*°*°*°*°*°*°*°*°*
Marmotte Joyeuse
0
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
13 juil. 2005 à 06:53
C 'est ce que j'ai fais mais lors de la reception qlq fois je reçois
des caracteres qui non rien a voir, genre des ???!!! ou des ronds des
carres. En discutant avec des programmeurs sur le probleme ils m'ont
parler d'une reception de trame.
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
13 juil. 2005 à 08:14
Les caractères que tu recois sont certainement codés en Ascii, c'est pour cela que tu observes tous genre de caractéres. Il te suffit alors d'utiliser lafonction Asc

Tu parles de trame, tu dois donc avoir sur tes trames (envoyées en série) un indicateur de paquet séparant chaque trame l'une de l'autre. Cet indicateur est un caractère spécial ou un groupe de caractères (exemple Y*).
Il te suffit alors de stocker dans un string brut de blanc ce que tu récupéres de ta liaison série, et chercher avec la fonction InStr le premier indicateur trouvé dans la chaine et le second indicateur de ta chaine. Puis, avec la fonction Mid tu récupére le string entre tes deux indicateurs et tu as récupéré une trame. Aprés tu peux faire un rafraichissement si tes paramètre évoluent

Pour rapelle un caractère ascii est codé sur 8 bits. Aprés faut bien savoir ce que tu dois récupérer sur la liason série (paramètres héxa ou décimal) et surtout l'indicateur ou en-tête paquet!

En espérant que ca puisse t'aider et que j'ai compris ce que tu veux faire

Philippe
0
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
17 juil. 2005 à 21:51
Merci de ton aide Philppe, tu as bien compris ma question reste que la prog n'est pas evident quand on est autodidacte
En fait apres avoir discuter c'est bien ça qu'il me faut, un rafraichisement en permanence car les parametres peuvent evoluer a ma demande et en fonction de la carte. As-tu un exemple de routine sous la main ou un lien qui puisse m'aider STP.

Merci pour l'aide
0

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

Posez votre question
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
17 juil. 2005 à 23:09
Salut ,
Tu places un objet MsComm sur ta feuille (MsComm32.OCX) si t'as des probs là dessus fais moi signe. (Dans l'exemple je nomme cet objet donnees !)

Dim Tamp_Rec as String

Private Sub Form_Load()
'Vide le buffer
donnees.InputLen = 0
' Utilise COM(X)
donnees.CommPort = <numéro du port COM utilisé>
'Protocole de Communication (SANS)
donnees.Handshaking = comNone
' 19200 bauds, pas de parité (No), 8 bits de données et 1 bit d'arrêt.
donnees.Settings = "19200,N,8,1"
donnees.InputMode = comInputModeText 'Mode Texte
' Ouvre le port.
donnees.PortOpen = True
End Sub

Private Sub Timer1_Timer()
If donnees.InBufferCount > 0 Then

donnees.InputLen = donnees.InBufferCount
Tamp_Rec = Tamp_Rec & donnees.Input
Text1.Text=Len(Tamp_Rec)
End If
End Sub

Private Sub Timer2_Timer()
Tamp_Rec = ""
End Sub

En gros, on récupére dans le String Tamp_Rec les caractères lus par la liaison série. On ne peut pas afficher directement ces caractères dans un textbox pour les voir "visuellement" car il y'a des grosses surprises et des gros bugs (j'en ai fais l'expérience). Dans Text1.Text tu lis le nombre de caractères que tu recois, normalement ca doit défiler assez rapidement et se remettre à 0 toutes les 800ms (Timer2) afin de rafraichir tes données. Voilà dans Tamp_Rec tu vient de récupérer tes caractères en Ascii !!

Maintenant faut savoir sur quelle vitesse paramètrer l'objet MsComm (9600bds, 19200bds....) ca ca dépend de ta machine sur laquelle tu vas récupérer tes données et là peut pas t'aider renseignes toi.
Ensuite faut que tu saches comme je te l'ai expliqué dans le 1er message quel est ton identificateur de paquet (ou séparateur) et surtout quel caractère le représente pour pouvoir le chercher dans Tamp_Rec

Enfin essayes déjà de comprendre ca, en espérant que je n'ai rien oublié ou fais de faux!
Contacte moi si t'as des questions !

Bye
Philippe
0
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
18 juil. 2005 à 23:44
J'ai lu et re-lu pas facile. En fait j'otiens un compteur, du coup je lais accouplé avec ma bidouille pour obtenir la meme chose pas de chance. Je continu a chercher.
Au cas, je peux te faire parvenir ma bidouille si tu as du temps de dispo

@+
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
19 juil. 2005 à 20:20
Je t'ai fai une appli simplifiée avec juste l'envoi d'1 sms
0
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
19 juil. 2005 à 21:08
OK

Merci a toi pour ton aide, je vais continu a potasser pour faire tourner cette appli.
0