MSComm caractères spéciaux

Résolu
Marko007 Messages postés 96 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 29 janvier 2009 - 6 juin 2008 à 16:07
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 - 11 juin 2008 à 10:38
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

NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
6 juin 2008 à 16:26
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
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 41
6 juin 2008 à 16:46
"...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 #   
3
Marko007 Messages postés 96 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 29 janvier 2009
9 juin 2008 à 11:48
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
0
Marko007 Messages postés 96 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 29 janvier 2009
10 juin 2008 à 13:29
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
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 41
10 juin 2008 à 20:46
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 #   
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
11 juin 2008 à 08:32
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
0
Marko007 Messages postés 96 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 29 janvier 2009
11 juin 2008 à 09:57
Merci,

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

Marco
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
11 juin 2008 à 10:38
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
0