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

C++Builder Discussion :

Pilotage d'un port parallèle


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Pilotage d'un port parallèle
    Est-ce que quelqu'un aurais une solution pour piloter le port parallèle, autre que DlPortIO qui chez moi ne fonctionne plus avec BDS 2006

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut kurul1
    Peut etre en utilisant quelque chose comme ceci, je ne suis pas sur du code, je n'ai pas la possibiite de l'essayer
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    DCB dcb;
    HANDLE hComm;
    BYTE bSign = 0xFF;
    DWORD dwBytesRecive ;
    hComm = CreateFile( "LPT1", FILE_READ_DATA | FILE_WRITE_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hComm == INVALID_HANDLE_VALUE)
    {
    MessageBox(Form1->Handle,"Can't open file","Error",MB_OK+MB_ICONERROR);
    }
    if((GetCommState(hComm, &dcb))==0)
    {
    MessageBox(Form1->Handle,"GetCommState Error","Error",MB_OK+MB_ICONERROR);
    // CloseHandle(hComm);
    }
    //Set LPT1 conditions......
    //.....
    else
    {
    WriteFile(hComm, &bSign, 1, &dwBytesRecive,NULL);
    }
    CloseHandle(hComm);
    }

  3. #3
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Je vais regarder cela, merci de ta réponse

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    ton code met le message d'erreur du GetCommState.

    En cherchant, j'ai trouver la dll inpout32.dll pour piloter le port parallèle, mais j'ai des soucis.

    Je dois synchroniser deux logiciels présent sur deux PC.
    sur le premier PC, j'ai un logiciel qui envois un front montant sur la broche D0 du port parallèle.

    Je voudrais sur le deuxième PC, me mettre en attente du front montant sur D0, et de déclancher un affichage lorsque l'on reçoit le front montant.

    J'ai donc importer les fonctions de lecture écriture de la DLL comme ceci

    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
     
    #include <conio.h>
     
    /* prototype (function typedef) for DLL function Inp32 et out32: */
    typedef short _stdcall (*PtrIn)(short portaddr);
    typedef void _stdcall (*PtrOut)(short EndPorta, short valor);
     
    // Adresse du port
    unsigned short AdressePort = 0x378;
     
    // Instance de la librairie
    HINSTANCE hLib;
     
    // Fonction de lecture
    PtrIn Lecture;
     
    // Fonction d'écriture
    PtrOut Ecriture;
     
     
    // On charge la librairie
    hLib = LoadLibrary("inpout32.dll");
     
    // Si le chargement s'est mal passé
    if(hLib == NULL)
    {
    	ShowMessage("Erreur de chargement de la librairie !");
    	return false;
    }
     
    // On récupère la fonction de lecture
    Lecture = (PtrIn) GetProcAddress(hLib, "Inp32");
     
    // Si le chargement s'est mal passé
    if(Lecture == NULL)
    {
    	ShowMessage("Erreur de chargement de la fonction inp32 !");
    	return false;
    }
     
    // On récupère la fonction d'écriture
    Ecriture = (PtrOut) GetProcAddress(hLib, "Out32");
     
    // Si le chargement s'est mal passé
    if(Ecriture == NULL)
    {
    	ShowMessage("Erreur de chargement de la fonction out32 !");
    	return false;
    }
    J'utilise également une union pour pouvoir récupérer les valeurs de chaque broche (ce que je faisait avec dlPortIO)

    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
     
    // Union pour la récupération des broches de données
    union TBrochesDonnees
    {
    	char chr;
    	struct
    	{
    		unsigned char D0 : 1;
    		unsigned char D1 : 1;
    		unsigned char D2 : 1;
    		unsigned char D3 : 1;
    		unsigned char D4 : 1;
    		unsigned char D5 : 1;
    		unsigned char D6 : 1;
    		unsigned char D7 : 1;
    	};
    };
    Et donc pour lire les données du Port, je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Union pour récupérer les données
    TBrochesDonnees Donnees;
     
    // On récupère les données
    Donnees.chr = (Lecture)(AdressePort);
    Bien sur, j'ai une boucle pour l'attente du front montant, mais je ne l'ai pas détaillé ici

    Mon souci, c'est que les valeurs des broches restent toujours à 0 dans mon programme, il n'y a pas de changement d'état sur le 2ème PC.

    J'ai tester si le voltage sur les broches changeait et c'est le cas.

    J'ai donc fait un deuxième test en exécutant les 2 logiciels sur le même PC, et là, le changement d'état se produit.

    De quoi cela peut-il venir

    Merci d'avance pour votre aide

  5. #5
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Question bête mais est ce que tes deux machines tournent sous le même système d'exploitation? Ça peut être une source de problème.

    Es tu obligé d'utiliser lpt1 car cette synchronisation peut aussi se faire via le réseau Ethernet ou plus simplement avec une liaison série par l'envoi d'un message. A moins que tu n'aies des contraintes temps réel.

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Oui, mes deux machines tournent sur windows XP.

    J'ai effectivement des contraintes qui m'oblige a utiliser le port parallèle, car c'est un logiciel qui envois un front montant sur le port parallèle que je n'ai pas développé. Moi je suis chargé uniquement de réceptionner les données sur le port et de détecter un front montant.

    Le logiciel qui envoit le front montant est un logiciel qui pilote une plateforme de force. Et je doit synchroniser cela avec mon soft pour que dès que l'on déclenche une acquisition sur la plateforme, j'ai un affichage qui se réalise.

    J'ai déjà réalisé cette synchronisation avec le composant DlPortIO qui était très pratique mais qui malheureusement ne fonctionne plus avec BDS2006, d'où ma recherche d'une autre solution

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

Discussions similaires

  1. Test de du soft Utilitaire pour pilotage du port parallèle
    Par AurelieB dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/05/2012, 15h28
  2. Pilotage du port parallèle
    Par lapenduledargent dans le forum Langage
    Réponses: 19
    Dernier message: 15/07/2009, 18h43
  3. Gestion du port paralléle sous 2000
    Par kardex dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/01/2006, 19h47
  4. ecriture vers le port parallèle
    Par Luther13 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 19/03/2004, 22h46
  5. Port Parallèle EPP ou ECP, hardware vs software ?
    Par TONIAPEL dans le forum Assembleur
    Réponses: 3
    Dernier message: 21/08/2003, 01h39

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