PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Transmission d'un texte via RS232
Transmission d'un texte via RS232
Débuté par tpatrice2006, 03 nov. 2005 13:49 - 3 réponses
Posté le 03 novembre 2005 - 13:49
Bonjour,

J'essaie de faire une transmission d'un texte simple "22222222"
via le port série entre un ordinateur et un PocketPc.
J'utilise Windev9 et Windev MoBile 9

Je pensais que c'était un jeu d'enfant avec les fonctions puissantes de windev
mais cela s'avère un casse-tête.

J'ai alors pris un exemple de code sur ce forum, mais cela ne donne pas des résultats cohérents que je
presente ci-dessous. (j'ai regardé les valeurs ASCII de ce que je reçois)

Je me demande si ce n'est pas à cause de sTimeoutDefaut, car cette constante n'existe pas sur WindevMobile

Tous les paramètres doivent être identiques du côté émission et du côté réception.

Ou cela vient du câble? J'ai entendu parler de fantaise du RS232, car parfois il faut inverser un fil?

Merci pour toute réponse à venir

Patrice


Voici le code d'émission du Pocket PC:


texte est une chaîne = "222222222"

COM est un entier =1

sFerme(COM)

SI PAS sOuvre(COM,2048,2048,7000,Vrai) ALORS

Info("Problème lors de l'ouverture de "+COM)

RETOUR

FIN

SI PAS sFixeParamètre (1,1200,1 ,7 ,0,False,False,Vrai) ALORS

Info("Problème lors du paramétrage")

RETOUR

FIN

TimeOut est un booléen = True
DateHeureDebut est une chaîne = DateSys()+HeureSys()
WHILE Val(Droite(DateHeureDifférence(DateHeureDebut,DateSys()+HeureSys()),4))<2000
// TimeOut sur 20s
IF 2048-sDansFileSortie(COM)>=Taille(texte) THEN
// 2048 Taille Buffer Sortie utilisé dans sOuvre(...)
sEcrit(COM,texte)

TimeOut = False
END
END

sEcrit(COM,Caract(0x04) )

IF TimeOut THEN
Erreur("Transmission impossible")
ELSE
Info("Bonne Transmission...")
END

sFerme(COM)

****************************************************

Voici le code de réception sur l'ordinateur de bureau;

sFerme(port)
sOuvre(port,2048,2048,sTimeoutDéfaut,Vrai)
sFixeParamètre (1,1200,1 ,7 ,0,False,False,Vrai)
DateHeureDebut est une chaîne = DateSys()+HeureSys()
recup est une chaîne= ""
WHILE Val(Droite(DateHeureDifférence(DateHeureDebut,DateSys()+HeureSys()),4))<2000
IF sDansFileEntrée(port)>0 THEN
recup += sLit(port,sDansFileEntrée(port))
DateHeureDebut = DateSys()+HeureSys()
IF Droite(recup,1)=Caract(0x04) THEN
SORTIR
END
END
END

sFerme(port)

Info("recup="+recup+" long="+Taille(recup))

i est un entier
l est une chaîne = ""

POUR i=1 A Taille(recup)

l += Asc(Milieu(i,1))
l += ","

FIN


**************************************************

Les résultats:

Je lance l'application de bureau et il attend les données

SUr le pokcet, j'envoie les données. Mais cela marche pas au premier coup,
il faut que je le lance au moins cinq fois, car le ppc me dit "erreur dans l'ouverture du port 1"

J'obtiens deux résultats différents:

Cas 1:
je recois un texte de longueur de 2
recup est composé d'un carré et du caractère "2"

La décomposition en ASCII me donne une série de milliers de chiffres entre 49 et 57!

Cas 2:
je reçois un texte d'un caractère qui se présente sous forme d'un carré

La valeur ASCII vaut 49
Posté le 03 novembre 2005 - 15:06
Les systèmes d'exploitation Windows et Windows Mobile n'utilisent pas la même codification
Windows Mobile est UNICODE (cherchez dans l'aide sur le mot)
Posté le 03 novembre 2005 - 15:15
Thomas Patrice a écrit :
Bonjour,

J'essaie de faire une transmission d'un texte simple "22222222"
via le port série entre un ordinateur et un PocketPc.
J'utilise Windev9 et Windev MoBile 9

Je pensais que c'était un jeu d'enfant avec les fonctions puissantes de windev
mais cela s'avère un casse-tête.

J'ai alors pris un exemple de code sur ce forum, mais cela ne donne pas des résultats cohérents que je
presente ci-dessous. (j'ai regardé les valeurs ASCII de ce que je reçois)

Je me demande si ce n'est pas à cause de sTimeoutDefaut, car cette constante n'existe pas sur WindevMobile

Tous les paramètres doivent être identiques du côté émission et du côté réception.

Ou cela vient du câble? J'ai entendu parler de fantaise du RS232, car parfois il faut inverser un fil?

Merci pour toute réponse à venir

Patrice


Voici le code d'émission du Pocket PC:


texte est une chaîne = "222222222"

COM est un entier =1

sFerme(COM)

SI PAS sOuvre(COM,2048,2048,7000,Vrai) ALORS

Info("Problème lors de l'ouverture de "+COM)

RETOUR

FIN

SI PAS sFixeParamètre (1,1200,1 ,7 ,0,False,False,Vrai) ALORS

Info("Problème lors du paramétrage")

RETOUR

FIN

TimeOut est un booléen = True
DateHeureDebut est une chaîne = DateSys()+HeureSys()
WHILE Val(Droite(DateHeureDifférence(DateHeureDebut,DateSys()+HeureSys()),4))<2000
// TimeOut sur 20s
IF 2048-sDansFileSortie(COM)>=Taille(texte) THEN
// 2048 Taille Buffer Sortie utilisé dans sOuvre(...)
sEcrit(COM,texte)

TimeOut = False
END
END

sEcrit(COM,Caract(0x04) )

IF TimeOut THEN
Erreur("Transmission impossible")
ELSE
Info("Bonne Transmission...")
END

sFerme(COM)

****************************************************

Voici le code de réception sur l'ordinateur de bureau;

sFerme(port)
sOuvre(port,2048,2048,sTimeoutDéfaut,Vrai)
sFixeParamètre (1,1200,1 ,7 ,0,False,False,Vrai)
DateHeureDebut est une chaîne = DateSys()+HeureSys()
recup est une chaîne= ""
WHILE Val(Droite(DateHeureDifférence(DateHeureDebut,DateSys()+HeureSys()),4))<2000
IF sDansFileEntrée(port)>0 THEN
recup += sLit(port,sDansFileEntrée(port))
DateHeureDebut = DateSys()+HeureSys()
IF Droite(recup,1)=Caract(0x04) THEN
SORTIR
END
END
END

sFerme(port)

Info("recup="+recup+" long="+Taille(recup))

i est un entier
l est une chaîne = ""

POUR i=1 A Taille(recup)

l += Asc(Milieu(i,1))
l += ","

FIN


**************************************************

Les résultats:

Je lance l'application de bureau et il attend les données

SUr le pokcet, j'envoie les données. Mais cela marche pas au premier coup,
il faut que je le lance au moins cinq fois, car le ppc me dit "erreur dans l'ouverture du port 1"

J'obtiens deux résultats différents:

Cas 1:
je recois un texte de longueur de 2
recup est composé d'un carré et du caractère "2"

La décomposition en ASCII me donne une série de milliers de chiffres entre 49 et 57!

Cas 2:
je reçois un texte d'un caractère qui se présente sous forme d'un carré

La valeur ASCII vaut 49




les valaurs ascii 48 à 57 représentent les chiffres (0x30 à 0x39 en hexa)
attention à une chose : les caractères que tu envoies sont en ANSI.
si tu veux de l'ascii pur, tu dois faire un ansiversoem(tachaine)
à propos , pourquoi utiliser un codage 7 bits ? sans parité, en plus ?
ceci explique peut-être cela.
le paramétrage des ports série standard sont :
longueur : 8 bits
parité : aucune
bit de stop : 1
vitesse : aucune importance mais la même des 2 cotés.

quant au cablage proprement dit, les croisements dépendent des
connecteurs utilisés.
les broches ne sont pas au même endroit, selon qu'on utilise des
connecteurs 25 ou 9 broches.

dans tous les cas, le schéma est simple (en xon/xoff dans cet exemple)
transmit => receipt
receipt => transmit
ground => ground



--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de spam.trepp@free.fr
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Posté le 03 novembre 2005 - 15:48
Salut,

Les chaînes coté Pocket sont au format UNICODE. Le systéme du Pocket est
UNICODE. Utilisez la commande UnicodeVersAnsi() pour reconvertir en chaîne
ANSI.

--
Ed en Ligne


"Thomas Patrice" <tpatrice2006@yahoo.fr> a écrit dans le message de news:
436a014c$1@news.pcsoft.fr...

Bonjour,

J'essaie de faire une transmission d'un texte simple "22222222"
via le port série entre un ordinateur et un PocketPc.
J'utilise Windev9 et Windev MoBile 9

Je pensais que c'était un jeu d'enfant avec les fonctions puissantes de
windev
mais cela s'avère un casse-tête.

J'ai alors pris un exemple de code sur ce forum, mais cela ne donne pas
des résultats cohérents que je
presente ci-dessous. (j'ai regardé les valeurs ASCII de ce que je reçois)

Je me demande si ce n'est pas à cause de sTimeoutDefaut, car cette
constante n'existe pas sur WindevMobile

Tous les paramètres doivent être identiques du côté émission et du côté
réception.

Ou cela vient du câble? J'ai entendu parler de fantaise du RS232, car
parfois il faut inverser un fil?

Merci pour toute réponse à venir

Patrice


Voici le code d'émission du Pocket PC:


texte est une chaîne = "222222222"

COM est un entier =1

sFerme(COM)

SI PAS sOuvre(COM,2048,2048,7000,Vrai) ALORS

Info("Problème lors de l'ouverture de "+COM)

RETOUR

FIN

SI PAS sFixeParamètre (1,1200,1 ,7 ,0,False,False,Vrai) ALORS

Info("Problème lors du paramétrage")

RETOUR

FIN

TimeOut est un booléen = True
DateHeureDebut est une chaîne = DateSys()+HeureSys()
WHILE
Val(Droite(DateHeureDifférence(DateHeureDebut,DateSys()+HeureSys()),4))<2000
// TimeOut sur 20s
IF 2048-sDansFileSortie(COM)>=Taille(texte) THEN
// 2048 Taille Buffer Sortie utilisé dans sOuvre(...)
sEcrit(COM,texte)

TimeOut = False
END
END

sEcrit(COM,Caract(0x04) )

IF TimeOut THEN
Erreur("Transmission impossible")
ELSE
Info("Bonne Transmission...")
END

sFerme(COM)

****************************************************

Voici le code de réception sur l'ordinateur de bureau;

sFerme(port)
sOuvre(port,2048,2048,sTimeoutDéfaut,Vrai)
sFixeParamètre (1,1200,1 ,7 ,0,False,False,Vrai)
DateHeureDebut est une chaîne = DateSys()+HeureSys()
recup est une chaîne= ""
WHILE
Val(Droite(DateHeureDifférence(DateHeureDebut,DateSys()+HeureSys()),4))<2000
IF sDansFileEntrée(port)>0 THEN
recup += sLit(port,sDansFileEntrée(port))
DateHeureDebut = DateSys()+HeureSys()
IF Droite(recup,1)=Caract(0x04) THEN
SORTIR
END
END
END

sFerme(port)

Info("recup="+recup+" long="+Taille(recup))

i est un entier
l est une chaîne = ""

POUR i=1 A Taille(recup)

l += Asc(Milieu(i,1))
l += ","

FIN


**************************************************

Les résultats:

Je lance l'application de bureau et il attend les données

SUr le pokcet, j'envoie les données. Mais cela marche pas au premier coup,
il faut que je le lance au moins cinq fois, car le ppc me dit "erreur dans
l'ouverture du port 1"

J'obtiens deux résultats différents:

Cas 1:
je recois un texte de longueur de 2
recup est composé d'un carré et du caractère "2"

La décomposition en ASCII me donne une série de milliers de chiffres entre
49 et 57!

Cas 2:
je reçois un texte d'un caractère qui se présente sous forme d'un carré

La valeur ASCII vaut 49