Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfragen des Input (https://www.delphipraxis.net/131282-abfragen-des-input.html)

christheg 22. Mär 2009 04:35


Abfragen des Input
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ersteinmal Hallo an alle wirklich nettes Forum was ihr hier habt^^


so nun zum Thema, hoffe ich hab den richtigen Forenteil erwischt^^


Es geht darum , ich habe mir eine USB Optokopler Karte geholt, weil ich gerne versuche starten wollte mit Signal über Eingängen die von draußen kommen mit meinem Delphi etwas auszulösen^^.
So habe mir diese Karte besorgt und es gab ein beispiel Porgramm dazu, dieses Funktioniert auch Tadelos, allerdings steig ich nicht dahinter wie die das Programiert haben.

Ich habe versucht mit dem ersten Eingang der karte ein Porgramm zu schreiben, auf Knopfdruck bzw Schalterumlegung soll erscheinen Hallo Welt, nur irgendwie gelingt mir das nicht, ich würde mich über hilfe sehr freuen.

Habe das Mitgeliferte Programm angehangen.

Danke schonmal im voraus^^

thkerkmann 22. Mär 2009 10:44

Re: Abfragen des Input
 
Hi,

also ich finde das Programm ist sehr einfach aufgebaut. Zeige mal deinen Code, damit wir rausfinden können woran es hapert.

Wichtig scheint mir zu sein, dass die Inputs mit Hilfe eines Timer immer wieder abgefragt werden. Es passiert also nix von alleine.

Gruss

christheg 22. Mär 2009 11:06

Re: Abfragen des Input
 
code habe ich noch keinen, wollte eigentlich einfach nur hallo welt schreiben lassen auf knopfdruck also

hatte mir gedacht anfrangs:


Delphi-Quellcode:
Label1.Caption := 'Bereit, warte...';
while QApiExtReadDl1(...) = 0 do
  Application.ProcessMessages;
ShowMessage('Hallo Welt');
aber wollt er nicht, zur timer abfrage, die wollte ich eigentlich komplet weglassen einmal ausgelöst soll es bis manuelle pc eingabe dableiben.

In deren Programmbeispiel hab ich mich garnicht zurecht gefunden :wall:

Gruß Christian.

thkerkmann 22. Mär 2009 11:55

Re: Abfragen des Input
 
Ok, also versuchen wir es mal zusammen.

Zunächst scheint mir wichtig zu sein, das Gerät zu öffnen und ein Handle zu bekommen

Delphi-Quellcode:
  handle := QAPIExtOpenCard(USBOPTO8, device);
device ist eine Gerätenummer von 0 - 7, versuch es mal mit 0.

dann sollte es möglich sein die inputs zu lesen

Delphi-Quellcode:
    lines := QAPIExtReadDI32(handle, 0, 0);
lines liefert dir 8 inputs auf einmal, jeder ist ein bit und kann mit
Delphi-Quellcode:
    if (lines and (1 shl j)) <> 0 then
       // input an
    else
      // input ist aus
    ;
wobei j von 0 - 7 geht, auf seinen Zustand geprüft werden.

und am Ende wieder das Gerät schliessen
Delphi-Quellcode:
   QAPIExtCloseCard(handle);
Das erste im FormCreate, das letzte im FormDestroy. In der Mitte deine Prozedur zu erkennen der Aktion.

Versuchs mal. :thumb:

christheg 22. Mär 2009 12:36

Re: Abfragen des Input
 
irgendwi versteh ich das nicht^^

wo die befehle hinmüssen und die vereinbarungen. könntest du mir ein beispiel für mein hallo welt schreiben, tappe komplett im dunkeln bei dem ganzen.

Grüße Christian

thkerkmann 22. Mär 2009 13:12

Re: Abfragen des Input
 
Liste der Anhänge anzeigen (Anzahl: 1)
Na eigentlich solltst Du das selber können.
Du hast doch schon mal ein Programm geschrieben oder ?

Also ich will mal nicht so sein....

Achtung in der qlib.pas sind noch ein paar Fehler drin. Habe sie korrigiert.
Ich kann es natürlich nicht testen, da ich deine Hardware nicht habe.

Versuchs. Die Dll zu der Karte sollte im Windows Verzeichnis oder im Programmverzeichnis liegen.

Gruss

christheg 22. Mär 2009 13:37

Re: Abfragen des Input
 
danke dir^^ ja habe schon programme geschrieben allerdings stehe ich noch weit am anfang vieles ist für mich eher neu und ich will auch daran lernen^^


eine frage habe ich allerdings wozu ist dieses formdestroy eigentlich gut? hatte als ich selber versucht habe das program zu kürzen diese funktion entfern dachte immer die wäre unnütz

thkerkmann 22. Mär 2009 16:13

Re: Abfragen des Input
 
Hi,

unnütz ist sie sicher nicht, sonst gäbe es sie nicht :-)

FormDestroy wird aufgerufen, kurz bevor das Form halt freigegeben wird. Hier kann man notwendige Aufräumarbeiten durchführen, z.B. Speicher oder Handles freigeben, den/die man am Anfang (FormCreate) reserviert hat. Es ist einfach das logische Gegenstück zu FormCreate.

Ich Empfehle dir mal ein paar Tutorials zu studieren, das bringt dich sicherlich konzeptionell weiter. Verwende die Forensuche Hier im Forum suchenTutorials oder auch hier [dt:f12f890d28]Tutorials[/dt:f12f890d28], da wirst du sicherlich fündig.

Gruss

christheg 22. Mär 2009 19:39

Re: Abfragen des Input
 
so hab nun bischen rumgespielt (ganzen tag schon) möchte auch gerne das bischen anders probieren, nun hab ich ein altes schulprojekt mal rausgegraben, und will nun das mit dem abfragen einbasteln.

Delphi-Quellcode:
procedure TForm1.StartesequenzielleAufnahme1Click(Sender: TObject);
begin
  Aufnahme:=true; AnsichtUpdate1Click(self); //aktualisiere Menüs
  if form1.IniEinzelbild then begin
     // Foto - Sequenz
     timer1.Interval:=form1.IniIntervall*1000;
     TimerStatus:=TSBildFolge;
     timer1.Enabled:=true;
  end else begin
     // Video - Folge
     TimerStatus:=TSvideoFolge;
     repeat
       label1.Caption:='Videoaufnahme';
       NextDateiname;
       EinVideo;                                       // aufnehmen
       Timer1.Interval:=form1.IniEinzelVideoDauer*1000;
       timer1.Enabled:=true;
       repeat
         Application.ProcessMessages;                  //Abbruchmöglichkeit 1
       until TimerStatus<>TSvideoFolge;
       label1.Caption:='Videoerholpause';
       EinVideoStop;                                   // erholen
       Timer1.Interval:=form1.IniErholzeit;
       timer1.Enabled:=true;
       repeat
         Application.ProcessMessages;                  //Abbruchmöglichkeit 1
         label1.Caption:=inttostr(timer1.interval)+'x'+inttostr(Timerstatus);
       until TimerStatus<>TSvideoFolgePause;
     until TimerStatus=TSStopAnforderung;             // abbruch?
     Aufnahme:=false;
     AnsichtUpdate1Click(self);
  end;
end;
das ist die prozedur die ich damit auslösen will

also muss ich das nun folgendermaßen einbinden:


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 while QAPIExtReadDI32(handle, 0, 0) = 0 do
    Application.ProcessMessages;
     label1.Caption:='Videoaufnahme';
       NextDateiname;
       EinVideo;                                       // aufnehmen
       Timer1.Interval:=form1.IniEinzelVideoDauer*1000;
       timer1.Enabled:=true;
 

end;

end.

ist das nun richtig gedacht oder komplet falsch?

thkerkmann 22. Mär 2009 21:04

Re: Abfragen des Input
 
Sagen wir mal so: "Es ist nicht elegant, aber würde wohl gehen."

Du solltest mal über das Programmkonzept nachdenken.
Wenn ich erst einen Button klicken soll, um dann noch darauf zu warten dass ein Schalter umgelegt wird, ist hier eine Aktion zu viel da.

Ich denke dass lässt sich schöner lösen. Aber das ist halt deine Aufgabe als Entwickler, ein Konzept zu erstellen.

Versuch es mal nicht mit "Try and Error", sondern mit "Concept and Realisation". :zwinker:

Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz