![]() |
Daten einlesen im fünfMinuten Takt
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:
[edit=Luckie] Mfg, Luckie[/edit]
//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. |
Re: Daten einlesen im fünfMinuten Takt
Zitat:
Zitat:
Zitat:
Versuch dne Fehler genauer zu beschreiben und ihn ein zu grenzen. |
Re:Daten einlesen im fünfMinuten Takt die
Ja ok ...SORRRRRRYYYYYYY :oops:
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:
Die daten solleneinmal in ein MemoFeld gelsen werden und in eine erstellte Txtdatei (Problem was ich eben hatte)
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; 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!!! :drunken: :drunken: :drunken: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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-2025 by Thomas Breitkreuz