AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten einlesen im fünfMinuten Takt

Ein Thema von gine · begonnen am 14. Dez 2004 · letzter Beitrag vom 14. Dez 2004
Antwort Antwort
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, 16: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Daten einlesen im fünfMinuten Takt

  Alt 14. Dez 2004, 16:23
Zitat von gine:
Hallo nächste Frage:

Habe nur noch ein Problem:
Nein du hast zwei.

Zitat:
Das einlesen der Daten im fübf Minuten Takt funktioniert nicht...hapert am Timer2...hat jemand noch mal Hile?
Das ist dein erstes. "funktioniert nicht" ist keine sehr hilfreiche Fehlerbeschreibung.

Zitat:
Code:
//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;

[..]

  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.
Das ist dein zweites. Erst eine nichts sagende Fehlerbeschreibung und dann so ein Code-Monster.

Versuch dne Fehler genauer zu beschreiben und ihn ein zu grenzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gine

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

Re:Daten einlesen im fünfMinuten Takt die

  Alt 14. Dez 2004, 16:35
Ja ok ...SORRRRRRYYYYYYY
AAAAAAAAALso:

Hier die genaue Fehlerbeschreibung:

Nach Verbinden wird an einen Wettersensor der Befehl zum stumm schalten geschickt. d.h.
es können nur noch Daten von Sensor empfangen werden, wenn alle fünf Minuten ein Befehl gesendet wird "schick mir die Daten" (?U #13)

Code:
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;
Die daten solleneinmal in ein MemoFeld gelsen werden und in eine erstellte Txtdatei (Problem was ich eben hatte)

Das passiert allerdings nicht. Wenn ich mein Programm starte...also verbinde setze ich den Timer2 auf true ,dann werden die Befehle zum stumm schalten gesendet und gleichzitig soll der timer laufen um alle fünf minuten die daten einzulesen.
das passiert alerdings nicht.

Zum einlesen der Daten verwende ich ja das OnTriggerAvail, welches doch Daten einliest, sobald welche an der Schnittstelle anliegen...aber da sind keine daten ..w.eder im memo noch in der text datei...


Also noch mal...Hilfe?

Bitte...ich wär wirklich unendlich denkbar, denn dann wär mein Programm soweit fertig!!!

Et kütt wie et kütt. Es is wie et is. Un et hätt noch imme jot jejange!
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:04 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