|
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
|
| |
| |
| | | |
|
| | | | |
| | |
|