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

Résolu
Signaler
-
 Utilisateur anonyme -
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)

Oops, manque la dernière image qui démontre les caractères spéciaux:




Bi0hazard
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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

Merci pour les pistes de solution. Je reviens avec une réaction!


Bi0hazard

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

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

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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

Un gros merci! J'ai réussi à remplacer les caractères.


Bi0hazard