Autor Beitrag
thorstenf01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win XP
D5 enterprise
BeitragVerfasst: Mo 12.07.04 23:58 
Hallo,
wer kann mir bei folgendem Problem helfen:
der unten angegebene Code zeigt eine zeitlich festgelegte Schnittstellenabfrage, bei der die vom Anwender
festgelegten Zeiten mit der Istzeit verbunden werden. Ist die festgelegte Zeit innerhalb der Istzeit, so
wird die Schnittstelle freigestaltet.

Bsp.: Start der Abfrage: 12.07.04, 23:45Uhr
Ende der Abfrage: 13.07.04, 0:30Uhr
Istzeit: 12.07.04, 23:54Uhr, (die Schnittstelle ist freigeschaltet "grüne Anzeige)

Bisher kann man den Start der Abfrage nur so einstellen, wie die Startzeit in der Zukuft liegt.
Wie kann ich das hinbekommen, dass der Start auch rüchwirkend in der Vergangenheit fuktioniert.

Bsp.: Start der Abfrage: 12.07.04, 23:45Uhr
Ende der Abfrage: 13.07.04, 0:30Uhr
Istzeit: 12.07.04, 23:00Uhr,

ausblenden volle Höhe Delphi-Quelltext
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:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
//Anfang der Schnittstellenabfrage
...
procedure TForm3.FormCreate(Sender: TObject); // Schnittstellenkonfiguration
begin
 Opencom(Pchar('COM1:9600,N,8,1'));
 Edit4.text := FormatDateTime('tt',Time);
 Edit5.text := FormatDateTime('ddddd',Date);
 DTR (1);
 CTSalt:= -1;
 DSRalt:= -1;
 DCDalt:= -1;
 RIalt:= -1;

end;

procedure TForm3.Timer2Timer(Sender: TObject); // Vergleich der "jetztzeit" mit den in den Edit's eingegebenen Zeiten 
var  Hour, Min, Sec, mSec: Word;
     I: Integer;
begin
 if (timer1.Enabled = true) and (Opencom(Pchar('COM1:9600,N,8,1')) = 0then
 ShowMessage ('COM1 belegt');
 DecodeTime(time, Hour, Min, Sec, mSec);
 Edit4.text := FormatDateTime('tt',Time);
 Edit5.text := FormatDateTime('ddddd',Date);

 if (Time > StrToTime (Edit2.Text)) and (Time < StrToTime (Edit3.Text)) and (Date >= StrToDate (Edit6.Text))
 and (Date <= StrToDate (Edit7.Text)) then timer1.Enabled := true;
 if (Time > StrToTime (Edit3.Text)) and (Date >= StrToDate (Edit7.Text)) then timer1.Enabled := false ;

 if (Time > StrToTime (Edit9.Text)) and (Time < StrToTime (Edit11.Text)) and (Date >= StrToDate (Edit8.Text))
 and (Date <= StrToDate (Edit10.Text)) then timer3.Enabled := true;
 if (Time > StrToTime (Edit11.Text)) and (Date >= StrToDate (Edit10.Text)) then timer3.Enabled := false ;

 with shape1 do begin
    if timer1.Enabled = true and timer3.Enabled = true then Brush.Color:=clRed else Brush.Color:=clLime;
 end;
end;

procedure TForm3.Timer1Timer(Sender: TObject); //  Ausgabe der Werte wenn eine 1 anliegt für den ersten Zeitabschnitt
begin
  try
    CTSneu:=CTS;
    DSRneu:=DSR;
    DCDneu:=DCD;
    RIneu:=RI;

    if CTSneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         CTS = 1' + '               1.Jahreshaelfte')

    else if  DSRneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         DSR = 1' + '               1.Jahreshaelfte')

    else if  DCDneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         DCD = 1' + '               1.Jahreshaelfte')

    else if  RIneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         RI = 1' + '                1.Jahreshaelfte');
 
   except
  end;
end;

procedure TForm3.Timer3Timer(Sender: TObject); //  Ausgabe der Werte wenn eine 1 anliegt für den zweiten Zeitabschnitt
begin
  try
    CTSneu:=CTS;
    DSRneu:=DSR;
    DCDneu:=DCD;
    RIneu:=RI;

    if  CTSneu = 1  then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         CTS = 1' + '               2.Jahreshaelfte')

    else if  DSRneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         DSR = 1' + '               2.Jahreshaelfte')

    else if  DCDneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         DCD = 1' + '               2.Jahreshaelfte')

    else if  RIneu = 1 then
    ListBox2.Items.Add(' '+DateToStr(Date)+'    '+TimeToStr(Time)+'' + '         RI = 1' + '                2.Jahreshaelfte');

   except
  end;
end;
...
// Ende der Schnittstellenabfrage

Danke im voraus für Eure Hilfe
Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
thorstenf01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win XP
D5 enterprise
BeitragVerfasst: Di 13.07.04 21:03 
Ich habe das eigentliche Problem wahrscheinlich schlecht beschrieben.
Ich versuche es nocheinmal:
Die Freischaltung der Schnittstellen soll anhand von Datum1 und Uhrzeit1 (timer1, Start+Ende der Abfrage) und Datum2 und Uhrzeit2 (timer3, Start+Ende der Abfrage) erfolgen.
Timer2 ist die Aktuelle Uhrzeit und das aktuelle Datum.
Die Aktivierung des Timer1 erfolgt vor Timer3.
Timer1 und Timer3 haben den gleichen Zeitintervall (60 Sek.) in der sie
die Schnittstelle abfragen.
Mit dem oben angegebenen Code ist es allerdings nur möglich, Datum1,Uhrzeit1 sowie Datum2,Uhrzeit2 vor der aktuellen Uhrzeit und dem aktuellen Datum einzugeben, damit es funktioniert. Sobald Datum1, Uhrzeit1 in der Vergangenheit oder das aktuelle Datum zwischen Start und Ende der Abfrage liegen, funktioniert die Aktivierung der Timer 1 und 2 nicht mehr. Wie kann ich dieses Problem angehen?