Le composant Mscomm

toubabsoni Messages postés 3 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 6 février 2007 - 1 févr. 2007 à 16:48
toubabsoni Messages postés 3 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 6 février 2007 - 6 févr. 2007 à 15:43
Bonjour, j'ai de serieux problèmes pour envoyer des données à un afficheur Séries Grands afficheurs à entrée Série de London Electronics. Je gère un logiciel de peage à travers lequel je dois envoyer des données à un afficheur. J'utilise le composant Mscomm pour envoyer ma trame mais ça n'affiche rien j'ai fait des tests à l'aide de hyperterminal qui s'avèrent concluants mais mon programme ne marche pas. J'ai testé presque tous les sources disponibles sur Internet et traitant de ce thème mais rien à faire. Je vous donne le code que j'utilise. Merci de me venir en aide.

Est ce que je peux utiliser le fichier .ht de hyperterminal dans mon code VB6?
Où est ce que mon code comporte d'enormes erreurs?

Public Sub sendDataAfficheur()


'MsCommAfficheur est le composant Mscomm que j'utilise
'FormPeage est le nom de la feuille sur laquelle le composant se trouve'Vitesse 9600, parité N, nbBits = 8, bits de stop = 1

    With FormPEAGE.MSCommAfficheur 
'configuration du port
    .CommPort = comPort 'On utilise le port COM
    .handshaking = handshaking 'RTS
    .RThreshold = 1
    .RTSEnable = True 'mieux pour le port COM:
    .Settings = vitesse & "," & parite & "," & nbBits & ",1"
    .SThreshold = 1
    On Error GoTo pasDAfficheur

    
    .PortOpen = True 'ouverture du port
   
'La trame de l'afficheur est sous la forme <ETX><STX><Data><CR><ETX>
'Data c'est la classe concaténée au montant Exemple : 01 2000

    If CDbl(FormPEAGE.lblTarifVehiAff) > 999 Then
    
        .Output = Chr$(&H3) & Chr$(&H2) & "0" & Right(FormPEAGE.cbClassVehiPG, 1) & " " & FormPEAGE.lblTarifVehiAff & Chr$(&HD) & Chr$(&H3)
    
    ElseIf (CDbl(FormPEAGE.lblTarifVehiAff) < 999) And (CDbl(FormPEAGE.lblTarifVehiAff) > 99) Then
        
        .Output = Chr$(&H3) & Chr$(&H2) & "0" & Right(FormPEAGE.cbClassVehiPG, 1) & "  " & FormPEAGE.lblTarifVehiAff & Chr$(&HD) & Chr$(&H3)
      
    ElseIf (CDbl(FormPEAGE.lblTarifVehiAff) < 99) And (CDbl(FormPEAGE.lblTarifVehiAff) > 9) Then
        
        .Output = Chr$(&H3) & Chr$(&H2) & "0" & Right(FormPEAGE.cbClassVehiPG, 1) & "   " & FormPEAGE.lblTarifVehiAff & Chr$(&HD) & Chr$(&H3)
    
    Else
    
        .Output = Chr$(&H3) & Chr$(&H2) & "0" & Right(FormPEAGE.cbClassVehiPG, 1) & "    " & FormPEAGE.lblTarifVehiAff & Chr$(&HD) & Chr$(&H3)
    
    End If
      
    .PortOpen = False
    
    Exit Sub
pasDAfficheur:
    FormPEAGE.presenceAfficheur = False
    End With
        
End Sub

Le lien pour la configuration en hyperterminal de l'afficheur

http://www.london-electronics.com/terminal.php

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 févr. 2007 à 17:16
Déjà je ne comprend pas l'interet des tes tests IF, puisque la chaine que tu envois est stritement identique dans les 4 cas.

Ensuite pour les valeurs 999 et 99, rien n'est envoyer.

Pour terminer, as-tu vérifier que ta trame est correctement envoyée ? Et en remplaçant ton afficheur par un terminal, as-tu vérifier que l'afficheur recoi une trame correcte (Il te faudrai pour cela un terminal capable d'afficher les codes hexa, Hyperterminal n'en est pas capable, il affiche juste un carré noir à la place).

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 févr. 2007 à 16:22
Salut
Les ports Com, comme les ports IP, sont matériels. Il faut donc donner le temps à la carte mère de transférer les données.
Insère un DoEvents avant ton   .PortOpen = False
Ca pourra peut-être résoudre ton problème.
Sinon, vérifie ton cablage (RTS/CTS cablés ?)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
toubabsoni Messages postés 3 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 6 février 2007
2 févr. 2007 à 21:38
Comme Jack le suggère je mettrai le DoEvents dans mon code. Je ne pourrai faire les tests que le dimanche car les afficheurs sont actuellement en brousse pour les tests. Mais ce qui m'inquiète c'est que j'ai testé de nombreux codes présents déjà sur le site et je me demande d'où peut venir mon problème vue qu'avec hyperterminal on arrive à envoyer la trame et que l'afficheur l'affiche. Merci Casy pour la correction de la boucle mais je suis un peu hors de moi à cause de ce problème. ça fait plus de 6 mois que je n'arrive pas à le gérer.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 févr. 2007 à 23:07
Essaye de charger le terminal RS232 Hex Com Tools sur cette page : http://www.rs232pro.com/

La version Demo permet de travailler un peu, même si il faut relancer régulièrement le logiciel.

Branche le à la place de l'afficheur, configure le pour afficher de l'hexa, et vérifie avec si les trames que ton logiciel envoie sont correctes.
Eventuellement compare avec celle que tu envoie avec hyperterminal et qui marchent

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 févr. 2007 à 00:39
Re
Comme je te le dis aussi, vérifie ton cablage.
D'après les paramètres que tu déclares, tu utilises en même temps le contrôle de flux logiciel (handshaking) et matériel (rts/cts).
Vérifie dans la doc de ton afficheur lequel utiliser.
Pour un controle de flux logiciel, la connexion de 2 à 3, 3 à 2 et 7 à 7 en DB25 (ou 5 à 5 en DB9) suffit.
Pour le controle de flux matriel, voir ce lien (clique ici) ou celui là (clique ici)

A noter et à ne pas oublier : Les signaux RX et TX sont inversés entre une DB9 et une DB25 (changement du type de terminal DTE en DCE).
Si, des deux côtés tu as deux prises de même type, il faudra croiser 2 et 3.
Si les types sont différents, il faudra cabler direct 2 à 2 et 3 à 3.

De plus, il faut se rappeler de ne cabler la borne 1 (optionnellement) uniquement d'un côté, sinon, tu transforme ton cable en condensateur = problème de transmissions.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
0
toubabsoni Messages postés 3 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 6 février 2007
6 févr. 2007 à 15:43
Merci Jack et Casy, j'ai trouvé la solution à mon problème qui était selon moi dû au fait que j'utilisais sûrement le mauvais port com de la variable comPort qui était initialisé à 3, le code était trop long et difficile de voir les erreurs. J'ai donc preféré transformer ma trame en ascii.

Je mets donc en place la chaîne de la trame dans un autre code. Je l'appelle trameAfficheur dont le code je ne pense pas qu'il soit nécessaire de le mettre pas ça se resume comme suivant : La trame est conforme à la demande de l'afficheur :
Pour envoyer Classe 1 Montant 2345, la trame se présente comme suit :
TrameAfficheur = chr$(3) & chr$(2)  & chr(48) & chr(49) & chr(32) & chr(50) & chr(51) & chr(52) & chr(53) & chr(13) & chr($3)

Pour le composant Mscomm, j'ai enlevé les parties de configurations que j'utilisais dans le code hormis le numéro du port. Les autres configurations sont faites directement à l'aide des propriétés du composant dans VB6.

Pour envoyer la trame à l'afficheur je fais donc :

public sub sendDataAfficheur()

    with formPeage.MscommAfficheur
       On error GoTo pasDafficheur
       .commPort = comPort
       .PortOpen = True
       .OutPut = TrameAfficheur 'Envoie de la trame
    End With

    Exit Sub

pasDafficheur :

End Sub

Merci pour votre aide!!!
0
Rejoignez-nous