Lecture d'un octet avec MSCOMM [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
2 juin 2008
-
Messages postés
3
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
2 juin 2008
-
Bonjour,

J'ai établi une communication série RS232 entre une application VB et un hyperterminal. Les transmissions se passent correctement.
Dans mon application VB je n'arrive pas à lire les valeurs codés entre 0x00 et 0x1F (en gros tous les codes ascii qui ne correspondants pas à des charactères ex:"ETX", "EOT","US"...).

mscomm.Input me retourne donc un charactère mais semble passer à la trappe les codes de 0x00 à 0x1F (la lecture me retourne une chaine de charactère vide).
J'ai essayé de configurer ma liaison en binary mode (mscomm.InputMode = comInputModeBinary) mais je ne vois aucun changement.
J'ai également essayé de convertir le charactère (code) dès sa réception en entier mais je lève l'erreur "type incompatible".

Auriez-vous une idée de configuration me permattant de lire l'intégralité des codes que je reçois sur ma liaison série ?

Merci d'avance,
Matthieu.

5 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Et oui, tu l'as dit : "...en gros tous les codes ascii qui ne correspondants pas à des charactères...", donc des caractères non affichables qui ne sont donc pas affichés par le popup

Pour les afficher comme d'ailleurs pour répondre à ta question, regarde du coté de la fonction Asc qui va te renvoyer la valeur ascii du caractère reçu

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Ce qui arrive sur un port Com est toujours une valeur numérique (Byte).
C'est le mode de lecture que tu utilises qui fait que tu le verras sous forme de caractères si tu lis une String, ou sous forme d'un tableau de Byte si tu lis un tableau de Bytes.
Puisque certains caractères n'ont pas de représentation graphique, c'est à toi de ressortir et d'analyser chacun des caractères récupérés si tu lis sous forme String.

Un caractère est un Byte (octet).
Le code d'un des octets est le code ASCII d'un caractère.
Il faut isoler chaque caractère de la String --> Mid
Utiliser la fonction ASC pour avoir la représentation numérique
Eventuellement Hex pour avoir la valeur en hexa

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Etrange, je ne me souviens pas d'avoir rencontré ce problème.

Comment fais-tu pour voir tes caractères reçus ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
3
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
2 juin 2008

J'observe ma donnée par le pop up qui s'affiche lorsque l'on s'arrête sur une variable un mode pas à pas. A y réfléchir c'est pas des plus malin...C'est certainement pour cette raison que je ne vois pas l'ensemble des charactères...
J'ai fait le test suivant :
mscomm.Output = mscomm.Input

Et ça marche! je retourne bien l'integralité des charactères que j'envoi.
J'avais donc mal cerné mon problème. Merci casy.

Mon objectif est de reconstruire un nombre de 4 octets. Ce nombre à été décomposé octets par octets pour permettre sont envoi par liaison série.

Mon problème est donc désormais de savoir comment convertir chaque octet reçu en sa valeur décimale (ou hexa).
 
Auriez vous une idée ?

Matthieu.
Messages postés
3
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
2 juin 2008

Bonjour,

Un grand merci pour tous vos conseils. L'utilisation de la fonction ASC résoud mon problème !

Matthieu.