AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

USB-Schnittstelle steuern

Ein Thema von melssner · begonnen am 14. Jul 2009 · letzter Beitrag vom 15. Jul 2009
Antwort Antwort
melssner

Registriert seit: 14. Jul 2009
18 Beiträge
 
Delphi 7 Enterprise
 
#1

USB-Schnittstelle steuern

  Alt 14. Jul 2009, 20:55
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]) < '0THEN label5.Caption := '00,0';
    if format('%2.1f',[i]) < '0THEN 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]) < '0THEN label6.Caption := '00,0';
    if format('%2.1f',[i]) < '0THEN 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.

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
  Mit Zitat antworten Zitat
14. Jul 2009, 21:07
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Geht um Delphi
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: USB-Schnittstelle steuern

  Alt 14. Jul 2009, 21:38
Hallo melssner, auf was zielt deine Frage genau um die Datenbankintegration?
Markus Kinzler
  Mit Zitat antworten Zitat
melssner

Registriert seit: 14. Jul 2009
18 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: USB-Schnittstelle steuern

  Alt 14. Jul 2009, 23:11
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
  Mit Zitat antworten Zitat
phade

Registriert seit: 27. Aug 2003
6 Beiträge
 
#5

Re: USB-Schnittstelle steuern

  Alt 15. Jul 2009, 01:31
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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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