www.mikrocontroller.net

Forum: PC-Programmierung Delphi: For-Schleifen und Timer


Autor: Tatjana Eichmann (tatjanazwilling)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute ich habe folgendes Problem:
Ich muss ein Programm in Delphi schreiben, um  mit dessen Hilfe
Mittel-,Min- und Maxwerte bei der Abgasmessung zu finden. Einmal sollen
min, max, mid innerhalb einer Minute gebildet werden und zweitens sollen
mid, min, max je halbe Minute berechnet werden.
Ich habe folgende Prozedur geschrieben:
Globalbe Variablen sind:
Messwerte_3 : array [0..29, 1..14] of Extended;        // 0-29 sek
 Messwerte_2  : array [0..11, 1..14] of Extended;        // min, max,
mid
Insgesamt habe ich 14 Messwerte(O2, NO2, NOx… usw.) in einer Messung

procedure TForm1.Timer2Timer(Sender: TObject);
var
   i: integer;
   j: integer;
   k: integer;
   temp : extended;
begin
Edit1.Text:= TimeToStr(now);
i:= StrToInt(copy(TimeToStr(now),7,2));
    // Stelle in der O2 angezeigt wird

 if tryStrToFloat (Form1.eO2.Text, temp) then
//wenn es gelingt eine Gleitkommazahl zu erstellen
//dann wird vom Form1.eO2.Text der Wert in temp gespeichert
   Messwerte_3[j, 1] := temp
   else
  //wenn nicht dann ist temp 0
   Messwerte_3[j, 1] := 0 ;

    if tryStrToFloat (Form1.eTGas.Text,temp) then
    Messwerte_3[j, 2] := temp
    else
    Messwerte_3[j, 2] := 0 ;
.
.
.
    if tryStrToFloat (Form1.eNOx_2.Text, temp)
    Messwerte_3[j, 14]:= temp
    else
    Messwerte_3[j, 14]:= 0;

if messung_ok_counter < 60 then
      inc (messung_ok_counter) ;
//Mit Hilfe dieser Anweisung  möchte ich, dass das Programm eine Minut
leerläuft
//damit die Messung ab 0 beginnt
 if messung_ok_counter = 60 then
      messwerte_ok := true ;

if (i = 0) and (messwerte_ok) then
  begin
    for j := 0 to 29 do
    for k := 1 to 14 do
    begin
      Messwerte_2 [0,k] := 0 ;
 //Stelle in der Gesamtsumme von  0 bis 29 sek gespeichert wird
      Messwerte_2 [6,k] := 0 ;
//Stelle in der Maximumwert von  0 bis 29 sek gespeichert wird
      Messwerte_2 [3,k] := 1000 ;
 //Stelle in der Minimumwert von  0 bis 29 sek gespeichert wird
    //Messwerte_2 [9,k]
  //Stelle in der Mittelwert  von  0 bis 29 sek gespeichert wird
          for j := 0 to 29 do
          begin
          if Messwerte_3[j,k]< Messwerte_2[3,k] then
          //Minimum von 0 bis 29 Sekunden
             Messwerte_2[3,k]:=Messwerte_3[j,k] ;
          if Messwerte_3[j,k]> Messwerte_2 [6,k] then
         //Maximum von 0 bis 29 Sekunden
             Messwerte_2[6,k]:=Messwerte_3 [j,k] ;
       //Gesamtsumme von 0 bis 29 Sekunden
             Messwerte_2[0,k]:=Messwerte_2[0,k] + Messwerte_3[j,k] ;
          end;
     //Mittelwert von 0 bis 29 Sekunden

          Messwerte_2[9, k]:=Messwerte_2[0,k]/30 ;
    end;
    WriteDatabase3;
end;

end;

Irgendwie funktioniert das hier nicht!!!
Wenn mir jemand helfen könnte, wäre es super!
Ich kenne Delphi erst seit 2 Monaten, d.h. die Kenntnisse gehen Richtung
0.
Wäre euch sehr dankbar

Tatjana

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Irgendwie funktioniert das hier nicht!!!

Was soll das Programm machen und was macht es stattdessen?

Autor: Tatjana Eichmann (tatjanazwilling)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Programm soll bei der Abgasmessung jede Sek. Messwert einlesen und 
auswerten. Die ausgelesenen Werte werden gleichzeitig in Edit Fenstern 
angezeigt. Von diesen werden die Werte in Array gespeichert. Danach 
sollen von 0-29 sek, von 30-59 sek und von 0 bis 59 sek Mittelwerte 
gebildet werden und Minimum-/Maximumwert sollen angezeigt (bzw. in die 
Tabelle reingeschrieben) werden.
Ich habe genau die selbe Prozedur für die Auswertung von 0 bis 59 sek 
geschrieben, da funktioniert es hervorragend. In den anderen (also 0 bis 
29 und 30 bis 59) werden der erste und der letzte Wert miteinander 
verglichen und jeweils der größte als Maximum und der kleinere als 
Minimun eingetragen....Und die Werte dazwischen werden gar nicht 
beachtet

Autor: spess53 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Für Mittelwert, Maximum und Minimum in Arrays gibt es fertige 
Funktionen:
'Mean','MaxValue' und 'MinValue'.

Allerdings ist da deine Array-Gestaltung ungünstig.

Besser : Messwerte_3 : array [0..13,0..29] of Extended;        // 0-29 
sek
und natürlich entsprechend Einlesen.

Dann könnte die Mittelwertbildung beispielsweise so aussehen:
      Mittelwert0:=Mean(Messwerte_3[0]);

Ein Stück von deinem Programm habe ich mal etwas 'umformatiert'. 
Wahrscheinlich wirst du dein Fehler selbst finde.

MfG Spess

Autor: Tatjana Eichmann (tatjanazwilling)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cool...danke!

hab gar nicht gewusst, dass es eine fertig Funktion dafür gibt.
Werd mal ausprobieren

Autor: neeeee (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und fuer das Timing gibt es Timer. So eine Delayloop ist eher 
unguenstig.

Autor: Trank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tatjana,

da Du Delphi erst kurz kennst, solltest Du schnell auf eine andere 
Sprache wechseln. Delphi hat (leider) keine Zukunft.

Unabhängig davon - ich gehe davon aus, dass Du bereits unter 
Win-Programme geschrieben hast - empfiehlt es sich unter dem Stichwort 
"exception" in der Hilfe nachzuschlagen. Sonst könnte es sein, dass die 
Anwender nicht viel Spaß an Deinem Programm haben werden.

mfg Trank

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Delphi hat (leider) keine Zukunft.

Unwissen ist auch eine Art von Wissen. Welches Delphi meinst du 
eigentlich.

MfG Spess

Autor: Trank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Spess,

ich meine das von Borland, Inprise, Borland, CodeGear, Embarcadero, 
...?...

Unter Win wird man an .net zukünftig nicht vorbei kommen, ob man will 
oder nicht. Und eine Klassenbibliothek zur Abstraktion einer 
Klassenbibliothek macht nicht wirklich Sinn.

Ich nutze Delphi seit der ersten Version und bin davor mit TP5 
eingestiegen. Auch TV hat mich begeistert. Delphi: super Compiler mit 
klasse IDE aber in den letzten Jahren hat das RAD doch eheblich 
nachgelassen. Ich denke nur an die Online Hilfe.

Auf keine Fälle möchte ich das Produkt madig machen, aber wenn ich jetzt 
einsteigen würde, dann mit C#.

mfg Trank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.