IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Lecture et écrire sur port série Pocket PC [WD15]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Lecture et écrire sur port série Pocket PC
    Bonjour à tous,
    Je viens à l'instant de terminer mon inscription sue le site.
    Je m’intéresse à tout ce qui touche à la technique en général, et l'informatique et le développement en font parties.
    Je développe en ce moment une petite application en WinDev mobile (version 15), qui doit tourner sur un Pocket PC.
    Je précise que j'ai toujours mis un point d'honneur à rechercher et à trouver une solution par moi-même à chaque fois que cela m'a été possible.
    Mais la, je "sèche" lamentablement.
    Donc voici la description de mon projet.
    La partie matériel est composé d'une carte processeur "Arduino" associée à un module de 8 relais.
    Cette carte doit dialoguer avec un pocket PC (HP Ipaq 2210) grâce à un module Bluetooth (module Kibuck BT)
    Je pilote donc l'ouverture des relais à partir du pocket PC et je récupère la position de ces relais afin d'afficher leurs états sur le pocket PC.
    Le programme sur la carte "Arduino" est écrit en C++ grace au pack de développement proposé par Arduino.
    Celui, testé en local (liaison USB) grâce à une fenêtre visualisant les données sur le port USB fonctionne parfaitement.
    Le programme sur le Pocket PC est développé a partir de WinDev Mobile.
    Lorsque je teste la totalité du projet (Arduino + WinDev) en simulation dans WinDev, tout fonctionne correctement.
    Je pilote bien mes relais et je récupère bien leurs positions.
    Mais lorsque je charge l’application sur le Pocket PC, il y a soucis.
    Dans ce cas, je pilote toujours bien mes relais, mais je ne récupère plus leurs positions.
    Mes recherches sur la toile font apparaitre un problème "éventuel" de code Ansi et Unicode mais malgré l'intégration de cette modification dans le programme le problème reste entier.
    A ce stade, je ne sais vers quel direction effectuer mes recherche et en appelle donc à votre savoir.
    Cordialement
    JPR

    Voici le morceau de programme en question; il n'y a aucune erreur lors de la compilation.

    Déclaration des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sPortCom est un entier = 8 // Port Com en sortie
    POSCVOAVG est un entier
    Transit est un entier
    Nombre est un entier
    Lancement de la procédure pCom()

    Déclaration d'une procédure globale pCom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PROCEDURE pCom()
    sFerme(sPortCom) // Au cas ou il serait déjà ouvert
    SI sOuvre(sPortCom, 1200, 1200, 1000) ALORS
    	SI sFixeParamètre(sPortCom, 9600, 0, 8, 0) ALORS
    		// Paramètres de sOuvre et sFixeparamètre à adapter à vos besoins
    		TimerSys(pLitCom,100,10)
    	SINON
    		sFerme(sPortCom)
    		Info("Problème de paramètrage du Port Com : " + sPortCom + RC + RC + "Le programme va maintenant s'arreter")
    		FinProgramme()
    	FIN
    SINON
    	Info("Problème d'ouverture du Port Com : " + sPortCom + RC + RC + "Le programme va maintenant s'arreter")
    	FinProgramme()
    FIN
    TimerSys(pLitCom,100,10) // On peut également utiliser un thread à la place
    Déclaration d'une procédure globale pLitCom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCEDURE pLitCom()
    FinTimerSys(100) // On stope le timer pendant la lecture
    Nombre = sDansFileEntrée(sPortCom)
    POSCVOAVG = Val(sLit(sPortCom,Nombre))
    TimerSys(pLitCom,100,10) // On relance le timer.
    Transit = AnsiVersUnicode(POSCVOAVG)
    Accueil1.Texte = Transit
    Déclaration d'une procédure globale TESTCVOAVG pour un des relais (les 7 autre sont identiques)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROCEDURE TESTCVOAVG1()
    SI   Transit = 1 ALORS
    	NivStab.BOUTON26..CouleurFond= VertFoncé
    SINON
    	NivStab.BOUTON26..CouleurFond= Blanc
    FIN

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Bonjour et bienvenu sur le forum,

    Tout d'abord, concernant le mobile, tu as un sous-forum Windev Mobile.

    Les développements mobiles ne sont vraiment tester qu'une fois l'application installée sur le pocket, donc je ne suis pas surpris que tu trouves une différence entre le test PC et le pocket.

    Dans la procédure pLitCOM(), tu traites le résultat de sLit() dans un Val() ?
    Es-tu certain que sLit() va te renvoyer un chiffre ? car le premier caractère est autre chose, tu n'auras que 0 au résultat du Val().

    Pour cette histoire de Ansi et Uncode, le plus "simple" et d'ajouter dans le code de pLitCOM() des petits Info(), du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Info(Nombre)
    Info(sLit(sPortCom,Nombre))
    Info(AnsiVersUnicode(sLit(sPortCom,Nombre)))
    ça te permettra de mieux cerner le problème.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous
    Merci de ta réponse Lo²
    Je n'avais pas remarqué le sous-forum WinDev mobile; donc si un modé peux y déplacer ce post je lui en serais reconnaissant.
    Concernant mon problème, j'ai appliqué toute tes recommandations.
    il en ressort que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sPortCom est un entier = 8 
    POSCVOAVG est un entier -> doit être déclaré en buffer
    Transit est un entier
    Nombre est un entier

    La transformation de "Ansi" vers "Unicode" est bien obligatoire dans ce cas la (pocket PC).
    Par contre, il ne la faut pas pour faire le test en simulation sous WinDev.
    Ainsi que tu la dis, dans la procédure pLitCOM(), le résultat de sLit() ne doit pas être traité dans un Val().

    Ce problème étant réglé je vais abuser de vos conseils.
    Si pour le problème précédent, j'avais trouver des pistes, pour le suivant, je ne sais même pas par quel bout l'attraper.
    Comme indiquer précédemment, je récupère la position de 8 relais.
    En fait, chaque paire de relais pilote un moteur (donc 4 moteurs), et ce moteur renvoi une info sur 3 positions possibles.
    Je dois donc récupérer 12 infos (soit 1 soit 0) ainsi que 2 infos analogiques.
    Il faut donc que je stocke ces infos dans autant de variables différentes qu'il y a d’entrées.
    D'autant, que la carte Arduino, pour une position donnée, délivre une suite de 1 ou de 0 et c'est le traitement dans WinDev qui sélectionne un seul 1 ou un seul 0.
    Je cherche donc un début de piste pour pouvoir avancer.
    Merci de votre aide.
    Cordialement
    JPR

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Tu veux stocker les infos pour en faire quoi :
    - un affichage ?
    - un traitement puis j'efface ?
    - garder en mémoire si ton appli se ferme ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Le projet est destiné à piloter des vérins.
    Le pocket PC va servir de télécommande.
    Pour chaque vérin, il y a une commande "Ouverture" et une commande "Fermeture".
    Les vérins peuvent être manœuvrer séparément, par paire ou bien les 4 en même temps.
    Chaque vérin doit indiquer en temps réel si :
    - il est fermé
    - il est ouvert
    - il est en contact avec le sol.
    Ces infos sont envoyées en permanence par la carte arduino.
    Je veux donc simplement les afficher en permanence tant que la télécommande est en fonction.
    Je n'ai pas besoin de les stocker.
    J'ai bien assimiler la procédure pour traiter une seul variable, mais je ne vois pas comment faire le tri lorsqu'il y en à plusieurs.
    En fait, pour simplifier à l’extrême, il faudrait que je fasse ce que j'ai fait pour une seule variable mais en plusieurs exemplaires.
    JPR

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Tu pourrais éventuellement passer par des objets, possédant toutes les propriétés qui caractèrisent le signal.

    A chaque signal, tu crées une nouvelle instance de l'objet et tu le stockes dans un tableau.

    Tu pourras ainsi stocker chaque signal et les traiter un par un.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous, bonjour Lo².
    Merci de ta réponse.
    En fait, j'ai simplifié le problème à l’extrême.
    Coté émission (carte Arduino) j'ai concaténé toute mes variables dans une chaine unique que je transmet sur le port série.
    Coté Pocket PC, je récupère cette chaine et j'extrais les variables une par une grâce aux fonctions de traitement des chaines (droite, milieu, gauche) que je stocke dans autant de variables que nécessaire.
    Ce qui fait que j'ai grandement avancé dans le projet.
    Je me permet de poser une autre question.
    Coté Pocket PC, est il possible avec "Windev mobile V15", d'automatiser d'une part le démarrage du Bluetooth et d'autre part la reconnaissance et donc la connexion avec le module Bluetooth de la carte Arduino.
    Bonne soirée à tous
    JPR

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    J'utilise régulièrement ta solution simple également, donc pas de soucis ^^

    Pour bluetooth, je n'ai jamais utilisé mais regardes du côté des fonctions BT dans l'aide, tu y trouveras peut-être des choses intéressantes.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous,
    Bon, je considère que ma 1° question a trouvé réponse.
    Je vais donc passé ce post en "résolu".
    Concernant ma 2° question (automatisation du Bluetooth) j'ouvrirais un nouveau post sur le bon forum (WinDev mobile) pour que ce soit plus clair.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JNI] Lecture/Ecriture sur port série RS232
    Par jabesq dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 20/09/2010, 17h01
  2. Lecture sur port série sous Linux
    Par DangerousBowlOfJelly dans le forum C
    Réponses: 6
    Dernier message: 28/03/2008, 17h00
  3. [C] Lecture de caractère sur port série
    Par walidbou dans le forum Linux
    Réponses: 1
    Dernier message: 28/10/2007, 11h05
  4. Pb lecture sur port série sous XP SP2
    Par ViveLesQuads dans le forum Delphi
    Réponses: 7
    Dernier message: 09/06/2006, 17h12
  5. [C#] lecture sur port série
    Par Iokanaan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/05/2005, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo