Echanges port série

cs_adri85 Messages postés 18 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 21 septembre 2009 - 27 juin 2007 à 14:51
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 28 juin 2007 à 18:47
Bonjour,

Je cherche à récupérer les informations d'une station météo pro sans le logiciel fourni avec ( appli en VB6).
J'utlise le MScomm comme les exemples du site mais je n'arrive pas a envoyer une requete (hexa) à la station afin qu'elle m'envoie les données??

Merci de m'apporter un peu d'aide
voici mon code:

Private Sub Form_Load()

Form1.Caption = "App1"
With MSComm1 'configuration du port
.CommPort = 1 'On utilise le port COM1:
.Handshaking = 2 'RTS
.RThreshold = 1
.RTSEnable = True 'mieux pour le port COM:
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True 'ouverture du port
End With

Text1.Text = "attente"

Command1.Caption = "&Send"

End Sub

Private Sub MSComm1_OnComm()
Dim InBuff As String

Select Case MSComm1.CommEvent
' On effectue la gestion des erreurs (cf. le modèle ci-dessus)
' Ici, on gère en fait pas grand-chose, mais c'est pour illustrer la démarche ;)

'liste des erreurs possibles
Case comEventBreak 'On a reçu un signal d’interruption (Break)
Case comEventCDTO ' Timeout de la porteuse
Case comEventCTSTO ' Timeout du signal CTS (Clear To Send)
Case comEventDSRTO ' Timeout du signal de réception
Case comEventFrame ' Erreur de trame
Case comEventOverrun ' Des données ont été perdues
Case comEventRxOver ' Tampon de réception saturé
Case comEventRxParity ' Erreur de parité
Case comEventTxFull ' Tampon d’envoi saturé
Case comEventDCB ' Erreur de réception DCB (jamais vu)

'liste des événements possibles qui sont, eux, normaux
Case comEvCD 'Changement dans la broche CD (porteuse)
Case comEvCTS 'Changement dans broche CTS
Case comEvDSR 'Changement dans broche DSR (réception)
Case comEvRing 'Changement dans broche RING (sonnerie)

'Chouette! on a reçu des données :)
Case comEvReceive
      tampon = MSComm1.Input
      Call Traitement(tampon) 'traitement données

Case comEvSend ' il y a des caractères à envoyer

Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub

Sub Traitement(tampon As Variant)
'cette procédure sert à traiter l’information reçue dans le tampon
     Text1.SelStart = Len(Text1.Text)
     Text1.SelText = tampon 'ici, on affiche le résultat dans un champ de texte
End Sub

3 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
27 juin 2007 à 19:18
Salut
Le paramétrage que tu utilises sous-entend que tu vas cabler tous les RTS-CTS ...
Le handshaking XonXoff est beaucoup plus simple et ne nécessite que 3 fils. A retravailler.

Tu dis que tu n'arrives pas à émettre une requète. Le code que tu nous montre ne s'occupe que de l'initialisation et de la réception.
Qu'as-tu fais pour émettre ?
Que dois-tu émettre ?
Qu'appelles tu une 'requète' ?

Pour info :
Emettre "A" équivaut à envoyer le code décimal ou hexa équivalent au code ascii associé : décimal 65 ou 41 hexa.
et peut s'écrire indifféremment : "A",  Chr$(65) ou Chr$("&h41")

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
cs_adri85 Messages postés 18 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 21 septembre 2009
28 juin 2007 à 10:05
Bonjour et merci,

Je n'ai pas mis tout le code en effet.
Dans un commandbutton  ( voir ligne Command1.Caption = "&Send" ),
j'utilise
MSComm1.Output = 05h.

Ce que j'entend par requete c'est une demande du programme a la station afin que celle-ci transmette. Je pense que la staion attends cette requete car
MSComm1_OnComm()
ne se déclenche jamais sinon.

@ +
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
28 juin 2007 à 18:47
Re
Ok, donc ta syntaxe  MSComm1.output = 05h  est incorrecte. (05h n'est pas reconnu sous VB)
Comme je te l'ai dit, pour envoyer 5 hexa, il te suffit d'envoyer Chr$("&h05")
0