PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → PROBLEME DE CONVERTION
PROBLEME DE CONVERTION
Débuté par PIERRO, 01 juin 2005 17:51 - 5 réponses
Posté le 01 juin 2005 - 17:51
bonjour,
le programme si dessous permet d'envoyer une trame(suite de chiffre et de lettre) par le port serie d'un pc vers un transmetteur et de recevoir la reponse sur le port serie:


GLOBAL
Port est un entier


LOCAL
Nombre est un entier
retourchaine est une chaîne
Taux est un entier
Parite est un entier
BitDonnee est un entier
BitStop est un entier
i est un entier
j est un entier
trame est une chaîne
i=0
j=0
trame=Caract(0x01)+Caract(0x03)+Caract(0X00)+Caract(0x00)+Caract(0x00)+Caract(0x01)+Caract(0x84)+Caract(0x0A)
Port=1
Taux–00
Parite=0
BitDonnee=8
BitStop=1

TANTQUE i<1
SI sOuvre(Port,5000,5000)=Faux ALORS
Erreur("Erreur lors de l'ouverture du port "+Port)
Ferme()
FIN
sFixeParamètre(Port,Taux,Parite,BitDonnee,BitStop)

sEcrit(1,trame)
TANTQUE j<10 //tempo avec affichage
Info(j)
j=j+1
FIN
Nombre =sDansFileEntrée(1)

retourchaine=sLit(1,Nombre)
Info(retourchaine)
sFerme(Port)
i=i+1
FIN

le probleme c'est que la variable retourchaine me renvoie des caracteres illisibles au lieu de me renvoyer une trame du type: 01030200F97806.

je me demande si le probleme ne vient pas de ma declaration de ma variable? car j'ai l'impression que le programme interprete la variable comme etant une valeur hexadecimal et le traduit par son code ascii pour chaque chiffre ou lettre.

Or ce que moi je souhaite c'est de pouvoir avicher sur mon ecran la trame, donc je pense qu'il faut dire a l'ordinateur que la trame en question est deja en ascii comme ca il ne convertira pas. Mais je ne sais pas comment lui faire comprendre ca? si quelqu'un voit le probleme et peut m'aider, merci d'avance.
Pierro.
Posté le 02 juin 2005 - 00:31
Bonsoir,

Il y a 2 possibilités :

1 - si le Buffer contenant une chaîne au format ANSI alors on n’a pas à faire quoi que ce soit.

2 – si par contre le Buffer contenant une chaîne au format UNICODE alors il faut la convertir en une chaîne de caractères au format ANSI (Windows).

Dans le deuxième cas utilisez la fonction UnicodeVersAnsi().

retourchaine est un buffer
MonBufferAnsi est un buffer
MonBufferAnsi = UnicodeVersAnsi (retourchaine)


Bonne Chance

-----------
//**//
Posté le 02 juin 2005 - 09:53
Bonjour, la solution est plus simple que celle indiqué !
Si tu envoie caract(0x02) qui dans la table ascii représente le caractère de
CONTROLE : STX (Start of Text)
et que tu affiche ce que tu reçois alors l'affichage sera spécial et c'est
normal !

Essaye ça qui affiche la valeur hexa des caractères contenus dans la chaîne
reçue

RetourChaine=sLit(1,Nombre)
if Taille(RetourChaine)>0 then
for i=1 to Taille(RetourChaine)
Trace(NumeriqueVersChaine(Asc(RetourChaine[[i]]),"02X"))
end
end


"PIERRO" <QUATTERMINT@VOILA.FR> a écrit dans le message de
news:429db13d$1@news.pcsoft.fr...


bonjour,
le programme si dessous permet d'envoyer une trame(suite de chiffre et de

lettre) par le port serie d'un pc vers un transmetteur et de recevoir la
reponse sur le port serie:


GLOBAL
Port est un entier


LOCAL
Nombre est un entier
retourchaine est une chaîne
Taux est un entier
Parite est un entier
BitDonnee est un entier
BitStop est un entier
i est un entier
j est un entier
trame est une chaîne
i=0
j=0

trame=Caract(0x01)+Caract(0x03)+Caract(0X00)+Caract(0x00)+Caract(0x00)+Carac
t(0x01)+Caract(0x84)+Caract(0x0A)
Port=1
Taux–00
Parite=0
BitDonnee=8
BitStop=1

TANTQUE i<1
SI sOuvre(Port,5000,5000)=Faux ALORS
Erreur("Erreur lors de l'ouverture du port "+Port)
Ferme()
FIN
sFixeParamètre(Port,Taux,Parite,BitDonnee,BitStop)

sEcrit(1,trame)
TANTQUE j<10 //tempo avec affichage
Info(j)
j=j+1
FIN
Nombre =sDansFileEntrée(1)

retourchaine=sLit(1,Nombre)
Info(retourchaine)
sFerme(Port)
i=i+1
FIN

le probleme c'est que la variable retourchaine me renvoie des caracteres

illisibles au lieu de me renvoyer une trame du type: 01030200F97806.

je me demande si le probleme ne vient pas de ma declaration de ma

variable? car j'ai l'impression que le programme interprete la variable
comme etant une valeur hexadecimal et le traduit par son code ascii pour
chaque chiffre ou lettre.

Or ce que moi je souhaite c'est de pouvoir avicher sur mon ecran la trame,

donc je pense qu'il faut dire a l'ordinateur que la trame en question est
deja en ascii comme ca il ne convertira pas. Mais je ne sais pas comment lui
faire comprendre ca? si quelqu'un voit le probleme et peut m'aider, merci
d'avance.
Pierro.



Posté le 02 juin 2005 - 11:31
j'ai essayé comme vous m'avez di de faire mais ca n'a pas l'air de fonctionner car j'obtiens d'autres caracteres differents avant j'avais des carrées maintenant j'ai un carre et un apostrofe et un point d'interrogation.
Posté le 02 juin 2005 - 14:45
Pourriez vous envoyer le code complet ??

"PIERRO" <QUATTERMINT@VOILA.FR> a écrit dans le message de
news:429ea9bd$1@news.pcsoft.fr...



j'ai essayé comme vous m'avez di de faire mais ca n'a pas l'air de

fonctionner car j'obtiens d'autres caracteres differents avant j'avais des
carrées maintenant j'ai un carre et un apostrofe et un point
d'interrogation.

Posté le 02 juin 2005 - 15:41
merci monsieur,
en fait ca marche avec votre code, mais lorsque j'ai envoyé mon message je n'avais pas encore recu le votre,
donc suite a votre message j'ai essayé sur mon programme et ca fonctionne a merveille.
merci beaucoup, ca fait une semaine que j'etais bloqué la dessus.
pierro