![]() |
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:
das funzt auch
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; 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
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Geht um Delphi |
Re: USB-Schnittstelle steuern
Hallo melssner, auf was zielt deine Frage genau um die Datenbankintegration?
|
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 |
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 ![]() 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 00:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz