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 :

Port serie et tables hyperfile


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 144
    Points : 16
    Points
    16
    Par défaut Port serie et tables hyperfile
    Bonjour

    Dans un programme, je récupère des informations que je saisi sur un indicateur de pesage et après validation ces informations sont transférées à partir du port série vers une table mémoire dans une fenêtre WinDev en utilisant la commande WinDev tableajouteligne et pour cela j'utilise une procédure qui est appelée par la commande sEvénement de WinDev
    Voilà le code
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    initialisation de la fenêtre
    sOuvre(6, 5000, 5000,sTimeoutDéfaut,Vrai)
    sFixeParamètre(6, 9600, 0, 8, 0)
    sEvénement(6,sEveCaractèreReçu,"lect")
     
    le code de ma procédure "lect"
     
    PROCEDURE lect()
     
    m=""
    mes=""
    mes=sLit(6,sDansFileEntrée(6))   
    CBM_Case1..Valeur=CBM_Case1..Valeur+mes
    m=SansEspace(CBM_Case1..Valeur)
    Table.raison_soc=SansEspace(Milieu(m,5,17))
    Table.Raison_cli=SansEspace(Milieu(m,23,18))
    Table.Produit=SansEspace(Milieu(m,54,8))
    Table.date_pesée_1..Valeur=DateSys()
    Table.heure_pesée_1..Valeur=HeureSys()
    Table.date_pesée_2..Valeur=DateSys()
    Table.heure_pesée_2..Valeur=HeureSys()
    Table.Matricule..Valeur=SansEspace(Milieu(m,63,9))
    Table.Pesée_1..Valeur=SansEspace(Milieu(m,73,6))
    Table.etat_pesée_1..Valeur=SansEspace(Milieu(m,79,1))
    Table.pesée_2..Valeur=SansEspace(Milieu(m,81,6))
    Table.etat_pesée_2..Valeur=SansEspace(Milieu(m,87,1))
    Table.net..Valeur=SansEspace(Milieu(m,89,6))
     
     
    TableAjouteLigne(Table,"",Matricule,raison_soc,Raison_cli,Produit,date_pesée_1,heure_pesée_1,Pesée_1,etat_pesée_1,date_pesée_2,heure_pesée_2,pesée_2,etat_pesée_2,net,"","NON")
     
    sEcrit(6,Caract(6))
    BOUCLE
       SI sDansFileSortie(6)=0 ALORS
          SORTIR
       FIN
    FIN
     
    sFinEvénement(6,sEveEnvoiTerminé)
     
    ecris_donnes() // procédure pour enregistrer les données dans une table hyperfile
     
     
    PROCEDURE ecris_donnes()
    ind est un entier=TableSelect(Table)
     
    HLitRecherchePremier(Pesée,n_tick,Table[ind][1]..Valeur)
    SI HTrouve(Pesée)=Faux ALORS
           HLitDernier(Pesée,n_tick)
           Table[ind][1]..Valeur=Pesée.n_tick+1
           pesée.n_tick=Table[ind][1]..Valeur
           pesée.pesée_liv=0
           pesée.Raison_cli=Table[ind][4]..Valeur
           pesée.Produit=Table[ind][5]..Valeur
           Pesée.date_pesée_1=Table[ind][6]..Valeur
           pesée.heure_pesée_1=Table[ind][7]..Valeur
           Pesée.Pesée_1=Table[ind][8]..Valeur
           pesée.etat_pesée_1=Table[ind][9]..Valeur
           Pesée.date_pesée_2=Table[ind][10]..Valeur
           Pesée.heure_pesée_2=Table[ind][11]..Valeur
           Pesée.pesée_2=Table[ind][12]..Valeur
           Pesée.etat_pesée_2=Table[ind][13]..Valeur
           Pesée.net=Table[ind][14]..Valeur
           pesée.Chauffeur=""
           Pesée.Etat_ticket=Table[ind][15]..Valeur
           Pesée.facture=Table[ind][16]..Valeur
           HAjoute(Pesée)
    FIN
    le problème que je rencontre c'est que la procédure "ecris_donnes()" ne s'exécute pas

    Alors quelqu'un pourrait me dire où est l'erreur dans ce code

    merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Juste une question... tu l'as passé au débugueur ? je crois que c'est quand même le plus simple....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre habitué Avatar de elfasys
    Homme Profil pro
    Ingénieur automatismes industriels, conception et réalisation
    Inscrit en
    Octobre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur automatismes industriels, conception et réalisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 81
    Points : 144
    Points
    144
    Par défaut
    Bonjour

    Pour moi, il y a plusieurs choses qui vont poser problème.

    D'abord, quand tu appelles la procédure Lect, il n'y a qu'un caractère qui est arrivé et tu en attends plusieurs (la durée nécessaire pour recevoir un message, c'est l'éternité pour un PC)

    Et, dans ta boucle de fin, il faut qu'une fonction vide le buffer : sinon, tu boucles : c'est ce qui doit t'arriver.

    Et pour qu'une liaison série fonctionne sans problème, il faut vraiment tout prévoir, faire des tests complets sur le message que tu reçois, vérifier sa vraisemblance, gérer un time-out (si ton système ne renvoie qu'un demi message, par exemple...

    J'adore les liaisons RS232 !!!
    Pourquoi faire simple quand on peut faire compliqué ?

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 144
    Points : 16
    Points
    16
    Par défaut
    Bonjour et merci pour vos réponses

    effectivement je reçois la totalité du message qui est envoyé vers des champs dans une fenêtre.

    le problème qui ce pose, il est dans la procédure "ecris_donnes" que je n'arrive pas a exécuter.

    sinon comment faire pour tester si le buffer du port série est vide

    merci pour votre aide

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Regarde ta fonction Htrouve...

    SI Htrouve(Pesé)= Vrai et non Faux ...

  6. #6
    Membre du Club
    Homme Profil pro
    WinDev Senior Developer
    Inscrit en
    Janvier 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : WinDev Senior Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Points : 54
    Points
    54
    Par défaut
    la boucle d'attente de fin devrait etre avec
    sDansFileEntrée(...
    et pas sortie (ecriture)

    ensuite il faut revoir la notion de flux un event peux etre a n'import quel moment dans le flux (complet ou pas) c'est Window$ qui emet l'event quand il passe dans la gestion de l'uart ... il faut donc gérer des rupture de debut ou de fin à voir suivant le protocole (rupture sur STX,EOT,CR,LF, ...)

    ensuite pourquoi un htrouve alors que hlitrecherchepremier renvoi deja vrai ou faux si trouvé ou pas ...

Discussions similaires

  1. quel est le Meilleur language pour piloter le port serie ?
    Par flyfab dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 21/07/2003, 10h03
  2. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29
  3. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  4. [TP] port série rs232
    Par cyb33 dans le forum Turbo Pascal
    Réponses: 44
    Dernier message: 13/01/2003, 15h49
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 12h07

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