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

Lazarus Pascal Discussion :

Gestion de port COM ! [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 11
    Points
    11
    Par défaut Gestion de port COM !
    Bonjour à tous,

    Je vous explique mon soucis, je suis actuellement en stage de licence mesure physique, l’objet de mon stage est de réaliser l’acquisition de grandeur physique mais avant de pouvoir réaliser cela il faut que je réalise un programme pour pouvoir gérer les ports COM.

    Pour cela j’utilise Lazarus sous Windows avec la librairie Synaser qui permet de gérer les ports COM, par la suite mon programme devra être compatible à linux.

    Mon gros problème est que je ne connais pas grand chose en programmation et c’est bien la le problème (surtout en langage Pascal que je n’ai jamais utilisé).

    J’ai commencé par réaliser l’interface graphique :

    Voici se que doit réaliser la Feuille 1

    La feuille 1 est composé de 3 boutons et d'un mémo leur rôles sont:

    un bouton ouvrir doit ouvrir le port COM, permettre le lancement de l'acquisition sur le mémo et bloquer l'accès à la configuration et ouvrir
    Un bouton fermer doit fermer le port COM et redonner l'accès à ouvrir et configuration
    un bouton configuration doit afficher la feuille2 de configuration
    un mémo doit récupérer les données du port COM par événement c'est à dire afficher les données dit que cela est possible

    Voici ce que doit réaliser la feuille2

    La feuille 2 est composé de 2 bouton et 4 TComboBox(menu déroulant)

    Un bouton détection automatique des ports doit détecter les ports COM branchés sur le pc
    Un ComboBox doit configurer le paramètre Vitesse de transfert
    Un ComboBox doit configurer le paramètre bit de donnés
    Un ComboBox doit configurer le paramètre bit d'arrêt
    Un ComboBox doit configurer le paramètre parité
    Un bouton appliquer les paramètres doit appliquer les paramètres sélectionnés au port COM et les retranscrire afin que la librairie synaser permette la bonne configuration du port

    Si quelqu’un pouvais m’aider sa serai cool, je pense que se n'est pas insurmontable pour quelqu'un qui connait le langage mais la personnellement je rame, j'ai réalisé l'interface graphique et la fonction qui permet de lancer la deuxième feuille mais pour réaliser les autres fonctions je n'y arrive pas.

    Je vous met les photo de l'interface et des code sources
    Images attachées Images attachées     

  2. #2
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    regarde si cela peut t'aider:


    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,synaser,
      Buttons, ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        ConnectButton: TButton;
        SendButton: TButton;
        ComboBoxNumeroPort: TComboBox;
        ComboBoxBauds: TComboBox;
        Trame: TEdit;
        Label1: TLabel;
        terminal: TMemo;
        Timer1: TTimer;
     
        procedure ConnectButtonClick(Sender: TObject);
        procedure SendButtonClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
     
      private
        { private declarations }
      public
        { public declarations }
      end; 
     
    var
      Form1: TForm1; 
      PortCom: TBlockSerial;
      TimeOut: integer;
     
    const ligneMax = 30;
    implementation
     
     
    { TForm1 }
     
     
     
     
     
    procedure TForm1.FormCreate(Sender: TObject);
        var l: string;
        p: integer;
     
    //lister les ports disponibles
     
    begin
          l := GetSerialPortNames;
     
      if l >'' then repeat
        begin
        p :=  pos(',',l);
        if p > 0 then
          begin
          form1.ComboBoxNumeroPort.Items.Add(copy(L,1,p-1));
          delete(L,1,p);
          end
        else
          form1.ComboBoxNumeroPort.Items.Add(L);
        end;
        until p = 0;
     
    end;
     
     
     
    procedure TForm1.ConnectButtonClick(Sender: TObject);
     
    var bauds: integer;
    const ligneMax = 30;
     
    begin
         PortCom := TBlockSerial.Create;
         PortCom.RaiseExcept := true;
         with ComboBoxNumeroPort do PortCom.Connect(Items[itemindex]);
         with ComboBoxBauds do bauds := StrToInt(Items[itemindex]);
         PortCom.Config(bauds,8,'N',0,false,false);
         TimeOut := LigneMax*10000 div bauds;
         timer1.enabled := true;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var ligne: string;
         WD: integer;
     
    // a l'ecoute  du peripherique
     
    begin
       timer1.Enabled := false;
       WD := PortCom.WaitingData;
       if WD  > 0 then  terminal.Lines.Add(PortCom.Recvstring(TimeOut));
       timer1.Enabled := true;
    end;
     
    procedure TForm1.SendButtonClick(Sender: TObject);
    begin
      PortCom.SendString(Trame.Text+CRLF);
    end;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    merci parhelie pour le code!!
    cela ma était d'une grande aide
    Aujourd'hui mon programme marche mais j'ai encore quelque soucis !!

  4. #4
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    Avec plaisir.
    Sous linux, GetSerialPortNames ne fonctionne pas avec les USB/Serial. Mais c'est pas bien dfficile à résoudre.
    Bon courage pour la suite.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    salut parhelie, ben justement c exactement mon probléme maintenant j'ai mit mon application sous linux et la sa marche plus !!
    j'ai essayer en forçant la connection du port COM manuellement (/dev/ttyUSB0) et la sa marche donc c bien GetSerialPortNames qui ne fonctionne pas
    Je précise que le port COM est branché en USB sur mon PC donc dans synaser j'ai essayer de changer /dev/ttyS* par /dev/ttyUSB* mais sa ne marche toujours pas et la je coince donc si tu pouvais m'expliquer la modification a réaliser sa serai !!!

    Une fois que le code sera sans probléme je le mettrai sur le site on sait jamais si sa peu servir a quelqu'un !!!

  6. #6
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    Tu ne devrais pas bricoler Synaser!

    Moi, j'avais rajouté ces trois lignes à la fin de la procedure Form.Create.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     {$ifdef linux}
       ComboBoxNumeroPort.Items.Add('/dev/ttyUSB0');
       ComboBoxNumeroPort.Items.Add('/dev/ttyUSB1');
      {$endif}
    C'est un peu bourrin, mais ça marche.

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

Discussions similaires

  1. Gestion du Port COM
    Par megamario dans le forum Embarqué
    Réponses: 6
    Dernier message: 04/07/2012, 15h43
  2. [IO] PortSerie Gestion des ports COM
    Par maxdwarf dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/11/2007, 18h45
  3. Gestion du port COM en RS232
    Par bkhbkh dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 08/06/2007, 00h47
  4. Réponses: 4
    Dernier message: 07/04/2006, 18h08
  5. Gestion de deux ports COM
    Par chourmo dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 15/12/2005, 15h03

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