toubabsoni
Messages postés3Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention 6 février 2007
-
1 févr. 2007 à 16:48
toubabsoni
Messages postés3Date d'inscriptionjeudi 2 octobre 2003StatutMembreDerniè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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
toubabsoni
Messages postés3Date d'inscriptionjeudi 2 octobre 2003StatutMembreDerniè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.
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 #
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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
toubabsoni
Messages postés3Date d'inscriptionjeudi 2 octobre 2003StatutMembreDerniè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