Einzelnen Beitrag anzeigen

gine

Registriert seit: 10. Okt 2004
Ort: mannheim&bei kölle
10 Beiträge
 
#1

Daten einlesen im fünfMinuten Takt

  Alt 14. Dez 2004, 15:17
Hallo nächste Frage:

Habe nur noch ein Problem:
Das einlesen der Daten im fübf Minuten Takt funktioniert nicht...hapert am Timer2...hat jemand noch mal Hile?

Vielen vielen Dank auch


Delphi-Quellcode:
//Autor Regine Breuer
//programmiert in Delphi 6 unter WIN98

//Das Programm dient dem Einlesen von Wetterdaten des
//Wettersensors DFT 1MV der Firma Reinhardt
//Die Kommunikation erfolgt über die serielle Schnittstelle mit Hilfe
//des AsyncPro von Turbopower
//Standarseinstellungen: 19200Baud, 8Datenbits,0 Paritätsbit,1 Stopbit
//Zuerst muss der entsprechende Comport gewählt, anschließend verbunden
//werden
//Nach dem Verbinden erfolgt das automatische Setzen der Wettersensoruhr
//mittels Befehl: !uSSMMSSTTMMJJ
//danach wird der Sensor mittels !S4 stumm geschaltet
// Es werden nun in fünfminütigem Takt Daten eingelesen; hierzu wird
//jedes mal der Befehl ?u verwendet (einen Datensatz senden)
//12.12.04

//TIMER FUNKTIONIERT NICHT

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OoMisc, AdPort, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ApdComPort1: TApdComPort;
    Button1: TButton;
    Button2: TButton;
    RadioGroup1: TRadioGroup;

    Timer1: TTimer;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Memo1: TMemo;
    Timer2: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer2Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
end;

 //Verbinden und Uhrzeit setzen nach Verbindung
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
    zeit: string;
    datum: string;
    stumm: string;

begin
ApdComPort1.Open :=true;


// Sendebefehl für Uhrzeit einlesen generieren
// Umwandlung '2004' in '04'
// Doppelpunkte und Punkte rausnehmen,
// da so für Sensorbefehl vorgesehen !uSSMMSSTTMMJJ

datum:=formatdatetime('dd.mm.yy', StrToDate(DateToStr(Now)));
s:= TimeToStr(Now) + datum;
s:=StringReplace(TimeToStr(Now) + datum,':','',[rfReplaceAll]);
s:=StringReplace(s,'.','',[rfReplaceAll]);

zeit := '!u'+ s +#$0d;
if ApdComPort1.OutBuffFree >= Length(zeit) then //prüfen, ob im Output Buffer
                                                       //genügend Platz vorhanden
    ApdComPort1.PutString(zeit); //Befehlsstring senden
    sleep(100);
//Sensor stummschalten mittels !s4 Befehl
    stumm:= '!s4' +#$0d;
    if ApdComPort1.OutBuffFree >= Length(stumm) then //prüfen, ob im Output Buffer
    ApdComPort1.PutString(stumm);
    

Timer2.Enabled:= true;

end;

//Trennen
procedure TForm1.Button2Click(Sender: TObject);
begin
ApdComPort1.Open :=False;
end;

//Com Port wählen
procedure TForm1.RadioGroup1Click(Sender: TObject); //Com Port wählen (1 oder2)
begin
        case RadioGroup1.ItemIndex of
        0: ApdComPort1.ComNumber := 1;
        1: ApdComPort1.ComNumber := 2;
        end;
end;

//Datum/Uhrzeit in Group box
procedure TForm1.Timer1Timer(Sender: TObject); //GroupBox mit Datum und Uhrzeit
begin //Timer um Detum und Uhrezit zu aktualisieren
Label2.Caption := TimeToStr(Now);
Label1.Caption := DateToStr(Now);
end;

//Sensor in Normalbetrieb schalten per Button Click
procedure TForm1.Button4Click(Sender: TObject);
var normalbetrieb: string;
begin
        normalbetrieb:= '!s0' +#$0d;
        if ApdComPort1.OutBuffFree >= Length(normalbetrieb) then //prüfen, ob im Output Buffer
        ApdComPort1.PutString(normalbetrieb);

end;

//Sensor stumm schalten per Button Click
procedure TForm1.Button5Click(Sender: TObject);
var stumm: string;
begin
        stumm:= '!s4' +#$0d;
        if ApdComPort1.OutBuffFree >= Length(stumm) then //prüfen, ob im Output Buffer
        ApdComPort1.PutString(stumm);

end;

//Befehl per Button Click, um einen Datensatz abzurufen
procedure TForm1.Button6Click(Sender: TObject);
var datensatz: string;
begin
        datensatz:= '?u' +#$0d;
        if ApdComPort1.OutBuffFree >= Length(datensatz) then //prüfen, ob im Output Buffer
        ApdComPort1.PutString(datensatz);

end;

procedure TForm1.Timer2Timer(Sender: TObject);
var datensatz: string;
begin
  datensatz:= '?u' +#$0d;
  if ApdComPort1.OutBuffFree >= Length(datensatz) then //prüfen, ob im Output Buffer
  ApdComPort1.PutString(datensatz);
end;

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);

var I : Word;
    C: char;
    daten : string ;
    f: TextFile;
begin
  daten := '';
 AssignFile (f, 'C:\Wetterdaten.txt');
 if not FileExists('C:\Wetterdaten.txt') then
        begin
            ReWrite(f);
        end else
        begin
        Append(f);
        end;
  for I := 1 to Count do
    begin
        C := ApdComPort1.GetChar;
        daten := daten + C;
       sleep(15);
    end;
         // Daten in Memo schreiben
  Memo1.SelText:= daten;
  Write(f,daten);
  CloseFile(f);
end;

//Formular schließen
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer2.Enabled:=false;
ApdComPort1.Open:=false;
end;

end.
[edit=Luckie] Mfg, Luckie[/edit]
Et kütt wie et kütt. Es is wie et is. Un et hätt noch imme jot jejange!
  Mit Zitat antworten Zitat