Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   USB-Schnittstelle steuern (https://www.delphipraxis.net/137119-usb-schnittstelle-steuern.html)

melssner 14. Jul 2009 19:55


USB-Schnittstelle steuern
 
Hallöle DP´ler,

Habe folgendes anliegen.
Ich habe mir eine USB-Schnittstellenkarte gebastelt mit Relais welche durch ne Manuelle Steuerung über Checkboxen
geschaltet werden. Das funzt alles.
Um dies automatisiert Schalten zu lassen habe ich nen Timer Integriert.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
i: Single;
t : string;
h,CardAddr,data1,data2:longint;
start,ende : string;

begin
//Beginn der Schaltung
start := '17:13:00';
if TimeToStr(Time) = start Then
  begin
    h:= OpenDevice(0);
    SetDigitalChannel(1);
    CheckBox1.Checked:= true;
    CloseDevice;
  end
  else
  begin
    ende := '17:14:00';
    if TimeToStr(Time) = ende Then
      begin
      h:= OpenDevice(0);
      ClearDigitalChannel(1);
      CheckBox1.Checked:= false;
      CloseDevice;
      end;
//Ende der Schaltung
//Beginn Thermometer
    h:= OpenDevice(0);
    data1 := ReadAnalogChannel(1);
    i := StrToInt('101')*data1/256-23;
    label5.Caption := format('%2.1f',[i]);
    if format('%2.1f',[i]) < '0' THEN label5.Caption := '00,0';
    if format('%2.1f',[i]) < '0' THEN begin Label5.Enabled := false; end else begin Label5.Enabled := True; end;

    data2 := ReadAnalogChannel(2);
    i := StrToInt('101')*data2/256-23;
    label6.Caption := format('%8.1f',[i]);
    if format('%2.1f',[i]) < '0' THEN label6.Caption := '00,0';
    if format('%2.1f',[i]) < '0' THEN begin Label6.Enabled := False; end else begin Label6.Enabled := True; end;
    CloseDevice;
  end;
//Ende Thermometer

 label4.Caption := TimeToStr(Time);
end;
das funzt auch

jetzt will ich aber diese Zeitangaben aus einer Datenbank nehmen mit mehreren Steuerzeiten.
Die Datenbank hat den Aufbau
Tabelle : AutoTimes
Felder : ID, CardAdress, Monat, Tag, StartTime, EndTime

bis dahin würde ich auch noch mitkommen. :wink:

Nur sollte der alte Laptop mal abschmieren schalten wieder alle Relais ab.
Beim Neustart müssten die Einträge geprüft werden und wenn die, die in dem Start- und EndTime Zeitfenster sich mit der momentanen Uhrzeit befinden wieder geschalten werden.

Wie kann ich dies umsetzen, hab als Anfänger noch ni so den Plan.

LG Mario

DP-Maintenance 14. Jul 2009 20:07

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Geht um Delphi

mkinzler 14. Jul 2009 20:38

Re: USB-Schnittstelle steuern
 
Hallo melssner, auf was zielt deine Frage genau um die Datenbankintegration?

melssner 14. Jul 2009 22:11

Re: USB-Schnittstelle steuern
 
Nein wie ich die Datenbank integriere weiß ich.

Nur mal angenommen in der Datenbank steht ein Startzeitpunkt um 08:30:00 und Endzeitpunkt um 21:00:00 (Time)

Zur Zeit wird jeder Channel nur gesteuert wenn TTime mit der Uhrzeit in der Datenbank übereinstimmt, siehe Code.
Wie kann ich gewährleisten wenn das Prog mal ausgefallen ist und neu gestartet wird das die Steuerung wieder geschaltet wird.

zb: startzeitpunkt laut DB 08:30:00 und EndZeitpunkt 21:00:00 Channel(1)
Programm/Rechner ist um 10:35:00 ausgefallen und Neugestartet

demnach wird ja der channel(1) nicht neu ausgelöst/gestartet

Wie kann ich aber die schleife so umstellen das es gestartet wird wenn TimeToStr(Now) zwischen start und endzeitpunkt liegt.

habe echt kein plan. :?

LG Mario

phade 15. Jul 2009 00:31

Re: USB-Schnittstelle steuern
 
Der Datentyp TDateTime ist nichts anderes als ein Double.

Wenn du jeweils Start-/End-Uhrzeit in einen solchen Wert konvertierst,
kannst du durch simple "größer/kleiner" Vergleiche testen,
ob ein weiter Wert (Time()) zwischen diesen liegt.

Effektiver wäre natürlich in diesem Fall, wenn du Datum+Uhrzeit in
der Datenbank als Bei Google suchenTimeStamp speicherst, somit
du die Konvertierungen vermeiden kannst.

Delphi-Quellcode:
var
  Start, Ende, tmpTime: TDateTime;
begin
  LadeZeitenAusDatenbank()
  // nehmen wir mal an, Start = '12:00' und Ende = '14:00'
  tmpTime := Time();
  if (tmpTime > StrToTime(Start)) and
     (tmpTime < StrToTime(Ende)) then
    machLaempchenAnOderAus();
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr.

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