MSComm caractères spéciaux

[Résolu]
Signaler
Messages postés
96
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
29 janvier 2009
-
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
-
Bonjour,

je dialogue avec un PLC en "RS232 - Cnv RS485". Cela marche nickel sauf que ;o) :

Je reçois par moment des caractères spéciaux type EVTS_08-06-NOTAQC06ß“�13;'‰�17;Ñ�11;þN....

Alors que l'Hyperterminal ne voit pas cela, et ça passe bien selon lui.

Des idées? Couac avec le buffer de réception, variable tableau,... ?

Je travaille en 9600, N , 1, 8 + InBufferSize = 2048, OutBufferSize : 512 :

Load de la form :

MSComm1.Settings = "9600,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary
MSComm1.SThreshold = 1
MSComm1.RThreshold = 1

MSComm event :

Dim ArrBuffer(10000) As Byte
Dim StrBuffer As String

StrBuffer = ""
For i = 0 To ArrBuffer.Length - 1
  ArrBuffer(i) = 0
Next i

ArrBuffer = MSComm1.Input

For i = 0 To ArrBuffer.Length - 1

   If ArrBuffer(i) <> 0 Then

    Select Case ArrBuffer(i)

         Case 1
             StrBuffer = StrBuffer & "<SOH>"

         Case 4
              StrBuffer = StrBuffer & "<EOT>"
              BoolAck = True

         Case Else

              StrBuffer = StrBuffer & Chr(ArrBuffer(i))
 
         End Select

End If

Next i

Ensuite je décortique ma variable StrBuffer, et fais ma gestion. J'attend juste d'être bien compris entre <Soh> et <Eot>.

Merci,
Marco

8 réponses

Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour

Bon, j'ai mis un moment avant d'être sûr que tu es en .NET ("ArrBuffer.Length"), mais en .NET 2+ (ce que je suppose que tu es), il y a System.Io.Ports.SerialPort pour le port COM et là pas besoin de MSComm, essaye déjà de passer par cette classe.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
"...Alors que l'Hyperterminal ne voit pas cela, et ça passe bien selon lui...."

C'est pas qu'il ne les voit pas, c'est que ce sont des caractères non affichables, donc il ne te les affiche pas

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
96
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
29 janvier 2009

Ok, merci pour vos deux réponses.

Je reste avec MSComm (Le programme tourne à 90%), même si cette classe proposée doit être plus simple à mettre en oeuvre.
Néanmoins, je devrai avoir le même soucis avec les caractères... Non ? Je pense que le PLC émet des "crasses" par moment,
car avec un autre soft "view232" (il sniffe en // , le média RS232), celui-ci voit la même chose que ma tâche VB.

Comment éliminer ces caractères non affichables ß"�13;'?�17;Ñ�11;þ à partir de mon buffer (MSComm Buffer IN ou Variable) ?

EN TOUT CAS, l'hyperteminal voit à la place de EVTS_08-06-NOTAQC06ß"�13;'?�17;Ñ�11;þN >> EVTS_08-06-NOTAQC06_168.txt

Merci,
Marco
Messages postés
96
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
29 janvier 2009

Bonjour Casy,

comment expliquer cela : l'hyperteminal voit à la place de EVTS_08-06-NOTAQC06ß"�13;'?�17;Ñ�11;þN
>> EVTS_08-06-NOTAQC06_168.txt

Merci,
Marco
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Aucune idée sur le coup.

Peut-etre un problème sur le décodage ou la transmission du caractère _

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour

En utilisant la classe du framework, tu pourrais choisir l'encodage .....

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Messages postés
96
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
29 janvier 2009

Merci,

choisir l'encodage ?? Peux-tu me donner plus de détails ?

Marco
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour

Il est possible que le jeu de caractère soit mauvais (d'où des caractères erronés).

Mais pour choisir l'encodage, (sans changer de controle d'accès à la COM), il faudrais que tu retransforme en octet et que tu repasse en String (avec system.Text.Encoding.*.GetString/BetBytes).

Sinon essaye de sniffer en hexa pour voir quels caractères te posent pb, car "ß"�13;'?�17;Ñ�11;þN" ne sont pas des caractères <$20 (qu moins je pense).

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1