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

API, COM et SDKs Delphi Discussion :

ZLportIO et inisialisation


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut ZLportIO et inisialisation
    Bonjour a tous ..
    voila mon programme utilisait jusqu'a present un drivers qui s'apelle ' smallport ' pour piloter le port // , mais qui a configuration equivalente ne fonctionne pas sur tout les PC . J'ai donc decidé de changer de drivers et suite au conversation lu sur le forun j'ai pris ZlportIO.qui semble bien fonctionner a quelque detail pres , mais surement de ma part !

    je suis sous delphi 7 et Xp pro .

    j'utilise ' zliosetiopm= true' pour travailler directement avec les ports.
    je passe l'etat de la variable ZLiostarted dans un 'showmessage' juste pour pour voir l'etat du port .

    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 initParallele(port:integer);
    begin
           Zliostop;
           // etat_port est l'image de ZLiostarted
     showmessage(etat_port)
           Zliostart;
     showmessage(etat_port)
           Zliosetiopm(true);
           if port=1 then adr_Add:=$378;
           if port=2 then adr_Add:=$37C;
           adr_control:=adr_Add + 02 ;
           adr_reg_etat:=adr_Add + 01 ;
           // positionne le port en EPP+ECP
           portwriteb($77,$80)        
    end;

    mais je recontre deux problemes .

    1er) Quand je lance mon application (programme principal)parfois 'ZLiostarted' reste a false et donc le port est pas initialiser et ceci aleatoirement et parfois il est a true meme avant l'initialisation !!
    quelqu'un a t il deja vu ce probleme ?

    2eme ) j'ai un certain nombre de dll qui utilise le port //
    donc j'initialise le port // une fois dans mon programme principal et ensuite une autre fois dans l'initialisation de mes dlls ( la methode est elle correcte je fesais comme çà avant aussi ) ..et mes showmessage me dise que mon port est pas ouvert quand je veux l'utiliser dans une de mes dll. pourtant j'utilise la meme procedure d'initialisation .
    si quelqu'un a une idée ?

    merci d'avance
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    suite de mes manips...pour ce qui utilise aussi zlportio..

    mes deux problemes semblent liés :

    dans le fonction zlioopen(var handle : Thandel ): boolean ,le message d'erreur retourné avec le createfile(..) est ' le fichier est introuvable'

    donc a un moment la creation marche pas a d'autre ??

    je n'avance pas plus !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Salut,

    moi aussi j'ai besoin de contrôler le port LPT et je ne connaissais pas ZlportIO
    je viens de l'essayer ça a l'aire pas mal...
    par contre pour le moment j'ai pas eu de problème comme le tien...
    le driver est charger comme il faut...
    bon la au taf je suis sur NT4 mais ce soir j'essayerais sur XP Pro.

    Par contre je suis curieux de savoir ce que tu fais avec le port Lpt : par ce que moi je vais utiliser un circuit électronique que je pense fabriquer, mais je ne sais pas par ou commencer...

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    je pilote tous un systeme electronique via le port // du pc , demande moi j'essayerai de t'aider ...
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Je pense que ZlportIO , crée un handle a chaque chargement et peut etre peut il pas le faire si un handle est deja crée , cela et il possible ?
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    C'est cool, c'est toi qui pose une question, et c'est toi qui m'explique...

    j'ai des commandes a passer qui sont des messages composer de 4 à 8 octets (pas tout a fait défini)

    j'ai vu que sur le port LPT il y a : BUSY, ACK
    d'un point de vu électronique je sais pas câbler ça, sachant qu'il va me falloir de la mémoire pour retenir le message.
    je suppose aussi qu'il faut un signal CLK

    Dernière chose pour la lecture : y a moyen d'avoir un évènement ou un call back ?

    Ps : j'ai essayé de lancer deux fois mon applis : la deuxième fois initialisation du port ne passe pas...

  7. #7
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    ben oui je vois que tu as aussi ce probleme d'initialisation .. est on les seul !!! . enfin je vais continuer a chercher ..

    en ce qui te conserne , c'est koi ton message de 4 ou 8 octet ( les octets doivent il etre memorisé.... ) si oui en effet un signal externe au data peut etre utiliser comme clock , reset , strobe... , pour la memorisation de tes mots. Dans moi cas j'ai pas besoin de recevoir un evenement en lecture , je sais quand j'attends une reponse ! . mais je sais plus sous XP , mais avant tu avais aussi une interruption port // .
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    j'ai regarder dans les fichier .pas (ddkint.pas, zlportio.pas et rdtsc.pas)
    on dirais qu'il va chercher un service
    et donc je pense que ce service gere qu'une connection au port...

    mon message resemble a ca

    Debut(1o) Adresse(1 ou 2o) Valeur(no) CheckSum(1o)
    j'ai pas specialement besoin de le memorisé mais j'ai besoin de créé un signal numerique sur un seul fil...
    enfin bon c'est pour faire une interface avec un petit train electrique


    une interruption ... ou la la ca me fait peur

  9. #9
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    donc la liaison serie serait pas mieux pour toi que la parallele ? autrement il te faut un convertieur parallele<-> serie , c'est la methode que j'utilise , mais au niveau hard çà passe par un fgpa et cela a se corser !!
    qu'appele tu un signal numerique , sur un seul fil ... ? qu' y a t il a l'autre bout ... ?
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    le probleme c'est que j'ai un cadencement special
    grocierement : les bit de valeur 1 dure 58µs, et les bit 0 dure 100µs
    donc mes messages ne dure pas forcement le meme temps
    (Norm DCC)

    j'aimerais bien utilisé une liason serie, mais je ne sais pas command gerer des temps si petit. (GetTickCount donne des ms)

  11. #11
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    pour ce qui est de ton callback
    regarde ce post

    http://www.developpez.net/forums/vie...ighlight=delay

    et pour ce qui est de ton delai < a la ms ceci marche tres bien , si tu es sous un noyau NT seuelemtn je crois !!

    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
     
    procedure DelaiSoft(Delai:Double);
    // remarque delai en seconde : resolution a la µS
    Var
       FHighPerf : Boolean ;
       HighFreq : Int64 ;
       Start, Stop : Int64 ;
       SecDelta : Double ;
    begin
         FHighPerf:=QueryPerformanceFrequency(HighFreq);
         If Not FHighPerf Then HighFreq:=1000;
         If FHighPerf Then QueryPerformanceCounter(Start)
         Else Start:=GetTickCount;
         repeat
               If FHighPerf Then QueryPerformanceCounter(Stop)
               Else Stop:=GetTickCount;
               SecDelta:=(Stop-Start)/HighFreq;
         until SecDelta > Delai;
         // SecDelta contient maintenant le nombre de secondes qu'à pris la fonction pour s'exécuter.
         // Sur ma machine, ce compteur est précis à 0.3 NANOsecondes... :-) 
         // je confirme juste inferieur a la µseconde 
    end;
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    heu je crois que j'ai un pb :
    pour tester la fonction j'ai fait ca ...

    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
    function DelaiSoft(Delai:Double): Double;
    // remarque delai en seconde : resolution a la µS
    Var
       FHighPerf : Boolean ; 
       HighFreq : Int64 ; 
       Start, Stop : Int64 ; 
       SecDelta : Double ; 
    begin 
         FHighPerf := QueryPerformanceFrequency(HighFreq);
         If Not FHighPerf Then HighFreq:=1000; 
         If FHighPerf Then QueryPerformanceCounter(Start) 
         Else Start := GetTickCount;
         repeat 
               If FHighPerf Then QueryPerformanceCounter(Stop) 
               Else Stop:=GetTickCount; 
               SecDelta:=(Stop-Start)/HighFreq; 
         until SecDelta > Delai; 
         // SecDelta contient maintenant le nombre de secondes qu'à pris la fonction pour s'exécuter. 
         // Sur ma machine, ce compteur est précis à 0.3 NANOsecondes... :-) 
         // je confirme juste inferieur a la µseconde
     
         Result := SecDelta; 
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       LogConf('test.log', 1);
       LogMessage('Start - ');
       LogMessage('plus 1µs   - ' + FloatToStr(DelaiSoft(0.000001)));
       LogMessage('plus 10µs  - ' + FloatToStr(DelaiSoft(0.00001)));
       LogMessage('plus 100µs - ' + FloatToStr(DelaiSoft(0.0001)));
       LogMessage('plus 1ms   - ' + FloatToStr(DelaiSoft(0.001)));
       LogMessage('plus 10ms  - ' + FloatToStr(DelaiSoft(0.01)));
       LogMessage('plus 100ms - ' + FloatToStr(DelaiSoft(0.1)));
       LogMessage('plus 1s    - ' + FloatToStr(DelaiSoft(1.0)));
       LogMessage('End - ');
    end;
    LogMessage : me permet d'ecrire un message dans un fichier log (j'utilise une file de message pour eviter un tros gros nb d'acces au fichier : sauvegarde du log tous les 500 ms)

    j'auption ca comme log :

    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
    2004/11/19 09:36:45:890 PID341 : Start - 
    2004/11/19 09:36:45:890 PID341 : plus 1µs   - 1,36810602821719E-6
    2004/11/19 09:36:45:890 PID341 : plus 10µs  - 1,06340200825023E-5
    2004/11/19 09:36:45:890 PID341 : plus 100µs - 0,00010029696220376
    2004/11/19 09:36:45:890 PID341 : plus 1ms   - 0,00100070485192332
    2004/11/19 09:36:45:906 PID341 : plus 10ms  - 0,010000238031961
    2004/11/19 09:36:46:000 PID341 : plus 100ms - 0,100000332782547
     
    2004/11/19 09:36:47:000 PID341 : plus 1s    - 1,00000047721942
    2004/11/19 09:36:47:000 PID341 : End - 
     
    2004/11/19 09:38:52:718 PID543 : Start - 
    2004/11/19 09:38:52:718 PID543 : plus 1µs   - 1,36232855343586E-6
    2004/11/19 09:38:52:718 PID543 : plus 10µs  - 1,06340200825023E-5
    2004/11/19 09:38:52:718 PID543 : plus 100µs - 0,00010029696220376
    2004/11/19 09:38:52:734 PID543 : plus 1ms   - 0,00100037322487087
    2004/11/19 09:38:52:734 PID543 : plus 10ms  - 0,010000580058468
    2004/11/19 09:38:52:843 PID543 : plus 100ms - 0,100000183723698
     
    2004/11/19 09:38:53:843 PID543 : plus 1s    - 1,00000008435113
    2004/11/19 09:38:53:843 PID543 : End -
    je trouve ca bizard : DelaiSoft(0.001) dur moins d'une milli second dans le premier essai et 16ms dans le deuxieme ???
    je trouve pas ca super precie....

    autre chose si je met : DelaiSoft(10) ca prend 100% Cpu => ca risque pas d'etre preci.... ?

  13. #13
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Ça fait pas mal de temps que j'utilise ZLPortIO et je le connais bien.
    Déjà, pour l'initialiser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    zliostop; 
    zliostart; 
    zliosetiopm(True);
    Je l'arrête avant de le lancer, si par hasard, la fermeture du handle précédent a échoué...

    Port parrallèle : http://www.developpez.net/forums/viewtopic.php?t=256882
    Port série : http://www.developpez.net/forums/viewtopic.php?t=133052

    De retour parmis vous après 10 ans!!

  14. #14
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    je fais comme toi Sub0 pour initialiser ZlPortIO et çà fais pareil , en fait quand on regarde le zliostart il fait aussi un zliostop . Mais permet pas un bon fonctionnement ( du moins chez moi ), en fait l'erreur se produit chez moi , dans l'initialisation de l'unité Zlportio, c'est la creation du handle qui echoue !
    je fonctionne nettement mieux si je lui laisse faire que sa propre inialisation sans rajouter le stop et le start, peut etre parceque , vu que j'utilise aussi le ZlPortIO dans mes dlls , je le lance plusieurs fois !! je sais pas trop là !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  15. #15
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Effectivement! Le problème provient sûrement du fait qu'il soit lancé plusieurs fois!
    Pourquoi ne pas utiliser le même handle? :
    Par exemple, enregistrer cet handle dans un fichier (ou base de registre) pour pouvoir l'utiliser avec d'autres prog...
    De retour parmis vous après 10 ans!!

  16. #16
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Oui sub0 j'aimerai faire cela et le charger qu'un seule fois au debut de mon programme principal , et que les dLLs puissent l'utiliser , en utilisant par exemple le meme handle , mais je ne sais pas comment faire !!
    si tu as une idée , une methode , ou un exemple je suis prenneur de tout !! ce qui pourra me faire avancer .. ( je suis pas habituer a jouer avec les handels )
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  17. #17
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Sub0
    Par exemple, enregistrer cet handle dans un fichier (ou base de registre) pour pouvoir l'utiliser avec d'autres prog...
    De retour parmis vous après 10 ans!!

  18. #18
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Merci Sub0 !! , mais je crois bien que Zlioport , crée deja un fichier quand il cree son handel , le tout est de savoir comment je le fais connaitre a mes dll , pour que le port // marche .. ,
    donc en supposant que lors du lancement de mon programme et donc de l'inialisation de l'unité Zlioport le handle se crée , il me faut ensuite empecher cette iniatialisation via mes DLL , donc modifier l'unité Zlioport , pour en avoir une avec l'initialisation et l'autre sans ... suis je suis la bonne voie ???
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  19. #19
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Tout à fait! Contrôle si le pilote est déjà lancé, soit en enregistrant toi-même son initialisation (son handle) dans un fichier ou dans la base de registre, soit en utilisant une autre méthode du genre détection des handles actifs... Si il est déjà lancé, alors ne pas le relancer une 2ème fois. A la finalisation, supprime cet enregistrement... Bon courage, à+
    De retour parmis vous après 10 ans!!

  20. #20
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    malgres des recherche dans l'aide de delphi sur le comment detectuer les handle chargé j'ai rien trouve qui m'aidé a faire cela , je sais meme j'arrive meme pas a decharcher mon driver !!

    donc si tu as un exemple merci d'avance !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Programme d'accès direct aux ports avec ZLPortIO
    Par Sub0 dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 23/02/2013, 14h00
  2. Réponses: 4
    Dernier message: 24/11/2007, 09h12
  3. ZlPortIO - Valeurs de port bizarre
    Par fab56 dans le forum Delphi
    Réponses: 3
    Dernier message: 30/05/2007, 15h29
  4. Controle du Port parallel avec la dll zlportio
    Par visualk dans le forum Delphi
    Réponses: 4
    Dernier message: 22/05/2007, 00h14

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