Problème communication RS232...

Résolu
botbot1607 - 23 nov. 2012 à 13:54
 botbot1607 - 27 nov. 2012 à 08:56
Bonjour à tous,

Voilà j'ai un équipement connecté en RS232 à mon PC...
Si je lui envoir "G5" puis Cr pour le Carriage return, il doit me renvoyer des infos sur son calibrage...

-> Je fais le test sous HyperTerminal en envoyant "G5" puis entrée, aucun problème, l'équipement me réponds.
-> Je fais le test sur mon programme vb avec le code suivant :

 COMPortLUXMETRE.Write("G5" & vbCr)


Ci dessous une capture d'écran d'un espion de port COM avec commentaires :




Résultat : pas de réponse.. Pourtant, les instruction envoyées sont exactement les mêmes !

Quelqu'un aurait il une idée pour mon problème ?...

Merci !

9 réponses

Utilisateur anonyme
26 nov. 2012 à 23:05
C'est curieux, dans le code que tu montres, je ne vois pas où sont lues les données. Un truc du genre COMPortLUXMETRE.Read... ?
3
Autant pour moi, l'image n'es pas passée...
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
23 nov. 2012 à 19:07
Bonjour,

Est-ce que tu refermes le port après ?

Car, je ne vois pas ce qui cloche, mais ton exemple de code est trop court, il faut voir autour.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]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
Utilisateur anonyme
23 nov. 2012 à 20:42
Bonsoir,

En général, on envoi un NewLine en fin d'instruction.

Donc avec import automatique de Microsoft.VisualBasic :
COMPortLUXMETRE.Write("G5" & vbCrLf)


Ou sans l'import automatique de Microsoft.VisualBasic :
COMPortLUXMETRE.Write("G5" & Environment.NewLine)
0

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

Posez votre question
Bonjour,

NHenry, enfet j'ai un luxmètre connecté donc en RS232, je lui envoie "G5" et le carrier return, il doit me répondre avec sa date de calibration.

Quand j'envoie G5 + vbCr via mon programme, je n'ai aucune réponse !
Mais, quand j'essaye avec Hyperterminal, j'ai bien la réponse...

Pourtant, dans les 2 cas j'envoie bien en hexa : 47 35 0D (comme on peut le voir sur la capture au dessus, le 1er cas avec l'hyperterminal, le 2nd avec mon appli.)

Je vais poster mon code un peu plus complet.

Banana32, oui j'ai testé également avec vbCrLf, mais du coup il envoie en 0A en plus en hexa, j'ai donc : 47 35 OD 0A... (0D pour le retour chariot, et 0A pour le line feed). Et, pas de réponses...
0
Utilisateur anonyme
24 nov. 2012 à 10:35
Montre le code qui lit les données issues de ton dispositif et la façon dont tu les traites.
0
Bonjour,

Voici mon code qui traite les données reçues du port COM en question :

 Dim nb_octet As Integer = COMPortLUXMETRE.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
         Dim trame(nb_octet) As Byte ' Tableau acceuillant les données au format byte
        Dim donnee, donnee2 As String


         donnee = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII
         donnee2 = donnee.Substring(0, donnee.Length - 2)
      
         MsgBox(donnee2)
          Exit Sub


Ce qui m'étonne, c'est que quand j'ouvre le port COM via Hyperterminal et que j'allume et j’éteins l'appareil, je vois qu'il répond "&". Quand j'ouvre le port COM avec vb, il ne répond rien...

Pourtant, les 2 ports ont bien les mêmes paramètres !

Ce qui correspond bien à la doc constructeur de l'appareil.

D'ailleurs, voici la donc constructeur :

Les instruments HD2102.1 et HD2102.2 sont dotés d’interface sérielle RS-232C, isolée galvani-quement; le HD2102.2 aussi d’interface USB 2.0. En dotation avec le HD2102.1 est fournit un câ-ble de branchement sériel avec connecteurs femelle 9 pôles sub D d’un côté et 8 pôles MiniDIN de l’autre; avec le HD2102.2 un câble avec connecteurs USB2.0 d’un côté et 8 pôles MiniDIN de l’autre (code HD2101/USB).
La connexion au moyen de l’USB requiert l’installation préalable d’un driver inséré dans le logiciel de l’instrument. Avant de brancher le câble USB au PC, installer le driver (voir les détails page.23).
Les paramètres de transmission standard de l’instrument sont:
• Baud rate 38400 baud
• Parité Aucune
• N. bit 8
• Stop bit 1
• Protocole Xon / Xoff.
Il est possible de changer la vitesse de transmission des données sérielles RS232C au moyen du pa-ramètre "Baudrate" à l’intérieur du menu (voir page.11). Les valeurs possibles sont: 38400, 19200, 9600, 4800, 2400, 1200. Les autres paramètres de transmission sont fixes.
La connexion USB 2.0 ne requiert le réglage d’aucun paramètre.
Les instruments sont dotés d’un set complet de commandes et demandes de données à envoyer au moyen du PC.
Toutes les commandes transmises à l’instrument doivent avoir la structure suivante:
XYcr où: XY constitue le code de commande et cr le Carriage Return (ASCII 0D)

Commande
Réponse
Description
P0
&
Ping (bloque le clavier de l’instrument pendant 70 secondes)
P1
&
Débloque clavier instrument
S0
123.4
Mesure acquise (24 caractères)
G0
Model HD2102 -2
Modèle de l’instrument
G1
M=Luxmeter
Description modèle
G2
SN=12345678
Numéro de série de l’instrument
G3
Firm.Ver.=01-00
Version firmware
G4
Firm.Date=2004/06/15
Date firmware
G5
cal 0000/00/00 00:00:00
Date et heure de calibrage
G6
Probe=Sicram RAD
Type de sonde reliée à l'entrée
G7
Probe SN=11119999
Numéro de série de la sonde
G8
Probe cal.=2004/01/12
Date de calibrage de la sonde
GB
User ID=0000000000000000
Code utilisateur (se règle avec T2xxxxxxxxxxxxxxxx)
GC
Impression attestation instrument
LN
&1999
Nombre de pages libres mémoire flash
LD
PRINTOUT OF LOG
Impression des données présentes en flash
LE
&
Effacement données mémoire flash
K1
PRINTOUT IMMEDIATE MODE
Impression immédiate des données
K0
Arrêt impression des données

Les caractères de commande sont exclusivement en majuscules, l’instrument répond avec "&" si la commande est correcte et avec un “?” à chaque combinaison de caractères erronnée. Les segments de réponse de l’instrument sont terminés avec l'envoi de la commande CR (carriage return). L’instrument n’envoie pas la commande LF de line feed.
Avant d’envoyer les commandes à l’instrument à travers la sérielle, il est conseillé de bloquer le clavier pour éviter des conflits de fonctionnement: utiliser la commande P0. Une fois terminé, res-taurer l’utilisation du clavier avec la commande P1.

0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 nov. 2012 à 21:24
Bonjour,

Dans quel évènement est traitée la réception ?
Comment tu instancies l'objet du port COM ?
Comment configures-tu l'objet du port COM ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]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
Pfiouuu...

Bien vu banana32, j'ai du copier mon code, en oubliant cette ligne, et je ne l'avais même pas remarquée... !

En ajoutant la lecture suivante :

COMPortLUXMETRE.Read(trame, 0, nb_octet) 'on lit le port


Ça fonctionne impec...

Merci beaucoup pour votre aide !
0
Rejoignez-nous