Difficultés avec le port série (RS232)

Résolu
Utilisateur anonyme - 7 nov. 2011 à 16:41
 Utilisateur anonyme - 9 nov. 2011 à 00:56
Bonjour,

j'ai un souci avec un prog vb que j'essai de faire rouler.

J'essai de communiquer avec une balance analytique (Scientech ZSP 350).

Elle fonctionne avec les caractéristiques suivantes (http://www.scalenet.com/pdf/zeta.pdf):


Je suis capable d'obtenir une réponse de la balance facilement à l'aide de l'Hyperterminal.
Je suis également capable d'avoir une réponse à l'aide d'un MSComm et de VB6, cependant:
[list]
[*]Il y a des caractères spéciaux dont je ne suis pas capable de me débarrasser.
[*]J'ai utiliser une des sources ici qui démontrer comment se connecter à un port série. Sa fonctionne, mais les caractères spéciaux s'affichent toujours.
/list

Voici quelques captures d'écran pour vous démontrer:

Config de l'Hyperterminal:




Démonstration de la commande "SEND+VBCr"



Avec le prorg VB retrouvé ici (merci à




Bi0hazard

10 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
7 nov. 2011 à 19:42
Salut

Comme il s'agit d'une fin de trame, il y a de fortes chance qu'il s'agisse d'un double Chr$(0) qui caractérise souvent les fins de trame.
A toi de nous dire quels sont leurs codes ASCII.
Une fois que tu as récupérer ce genre d'info, énumère tous les codes ASCII du contenu de ta TextBox (?) avec un code simple comme ça :
Dim sTemp As String
Dim r As Long
sTemp = maTextBox.Text
For r = 1 To Len(sTemp)
    Debug.Print "Caractère >"; Mid$(sTemp, r, 1); "<",
    Debug.Print "Code Ascii : "; Asc(Mid$(sTemp, r, 1))
Next r
Tu récupèreras ainsi, dans la fenêtre de débug (Ctrl-G), la liste des caractères et leur code ASCII : Tu n'auras plus qu'à repérer ton "G" et voir ce qui suit.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
8 nov. 2011 à 18:18
Parfait
Ces caractères sont de banales commandes de retour à la ligne, vbCrLf (13 + 10)

Alors, soit tu les supprimes sans autre procès, soit tu t'en sers pour déterminer que la ligne de donnée est complète, ce qui serait plus judicieux.
Suppression :
maChaine = Replace(maChaine, vbCrLf, vbNullString)
3
Utilisateur anonyme
7 nov. 2011 à 16:42
Oops, manque la dernière image qui démontre les caractères spéciaux:




Bi0hazard
0
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
7 nov. 2011 à 19:41
Bonjour,

Quel code as-tu utilisé ?
Quel est le code ASCII des caractères concernés ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

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

Posez votre question
Utilisateur anonyme
7 nov. 2011 à 21:04
Merci pour les pistes de solution. Je reviens avec une réaction!


Bi0hazard
0
Utilisateur anonyme
8 nov. 2011 à 14:26
J'ai réussi à trouver quels étaient mes caractères. En fait, j'aurais pu les deviner mais bon.

Pour répondre à la question de NHenry, j'ai utilisé la source:
http://www.vbfrance.com/codes/SNIFFEUR-RS232_51554.aspx

Donc, lorsque j'obtiens les données à l'aide de mon programme maison, les caractères sont:

*poids* + Chr(32) + Chr(32) + Chr(71)(G) + Chr(13) + Chr(10)

Je dois donc me débarasser des Chr(13) et Chr(10) en fin de ligne si je comprend bien?

De quel façon pourrais-je m'y prendre?

Merci du support,


Bi0hazard
0
Utilisateur anonyme
8 nov. 2011 à 14:47
Bon je ne vois pas comment éditer mon post précédent...

J'utilise présentement un textbox pour l'input du MSComm1. Par la suite, le texte est recopier dans une listbox.

J'aimerais pouvoir dire à ma textbox:
-Acquérir les données jusqu'à ce que tu rencontre le Chr(13)+Chr(10), car présentement, dès qu'il rencontre un Chr(13) ou Chr(10), il saute de ligne.


Bi0hazard
0
Utilisateur anonyme
8 nov. 2011 à 14:58
Voici le output. Pour votre information, j'ai demandé à la balance de me donner l'heure + date de la prise de donnée.


Voici les caractère ASCii (tel quel de la fenêtre Débugage):

Code Ascii : 10
Caractère >0< Code Ascii : 48
Caractère >8< Code Ascii : 56
Caractère >:< Code Ascii : 58
Caractère >5< Code Ascii : 53
Caractère >5< Code Ascii : 53
Caractère >:< Code Ascii : 58
Caractère >1< Code Ascii : 49
Caractère >6< Code Ascii : 54
Caractère > < Code Ascii : 32
Caractère > < Code Ascii : 32
Caractère >1< Code Ascii : 49
Caractère >1< Code Ascii : 49
Caractère >/< Code Ascii : 47
Caractère >0< Code Ascii : 48
Caractère >8< Code Ascii : 56
Caractère >/< Code Ascii : 47
Caractère >1< Code Ascii : 49
Caractère >1< Code Ascii : 49
Caractère >
< Code Ascii : 13
Caractère >
< Code Ascii : 10
Caractère > < Code Ascii : 32
Caractère > < Code Ascii : 32
Caractère > < Code Ascii : 32
Caractère >1< Code Ascii : 49
Caractère >.< Code Ascii : 46
Caractère >4< Code Ascii : 52
Caractère >2< Code Ascii : 50
Caractère >7< Code Ascii : 55
51
Caractère >5< Code Ascii : 53




Bi0hazard
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 78
8 nov. 2011 à 18:21
Voir
InStr(1, maChaine, vbCrLf, vbTextCompare)
qui te fournira l'emplacement où se trouve le prmier caractère de ce vbCrLf, ou 0 s'il n'en trouve pas, facile donc de savoir si il y a ou pas cette chaine dans tes données
0
Utilisateur anonyme
9 nov. 2011 à 00:56
Un gros merci! J'ai réussi à remplacer les caractères.


Bi0hazard
0
Rejoignez-nous