![]() |
AW: bestimmte teile einses arrays auslesen
PS: Timer/GetTickCount haben derzeit eine durchschnittliche Taktfrequenz von 16ms.
Und je nach Systemauslastung kann der auch ganz schön verzögert werden, da der Timer über Nachrichten mit niedriger Priorität arbeitet. oder
Delphi-Quellcode:
//hier jetzt das Array füllen
if myzahler >= Length(myarray) then SetLength(myarray, myzahler + 1000); myarray[myzahler]:= mydaten; inc(myzahler); |
AW: bestimmte teile einses arrays auslesen
Okay
Wenn ich das richtig verstanden habe willst du nur dann einen eintrag ins Array machen, wenn der zähler des Timers größer ist als das array. Der Eintrag kommt an die Stelle des Arrays, die durch den zähler des timers angegeben wird. Falls diese Annahme richtig ist habe ich 2 Fragen: Wie bestimmtst du deine Variable "myzähler"? wieso setzt du "myzähler" = 0 am ende? (Bezieht sich auf den Beitrag von Alfold) |
AW: bestimmte teile einses arrays auslesen
myZaehler ist eine globale Variable bzw. eine Eigenschaft der Klasse.
Diese muss im Timer enrhöht werden und dann ggf geprüft, ob sie noch im Bereich des Arrays liegt bzw. Modulowert ermittelt werden |
AW: bestimmte teile einses arrays auslesen
Danke sehr :)
Ich denke damit wären meine Probleme vorerst gelöst. |
AW: bestimmte teile einses arrays auslesen
Zitat:
Welche Rohdaten? Barcodelesegerät liefert den Code komplet zurück! Man muss nur noch encodieren. Auch ein Lesegerät kann nicht schneller lesen. Warum also der Zeitparameter von 10ms? oder verstehe ich da was nicht richtig:?: Gruss alfold |
AW: bestimmte teile einses arrays auslesen
Ich glaube hier liegt wirklich ein Missverständnis vor. :D
Das Barcodelesegerät ist selbst gebaut, darin lag ja die Aufgabe. Wir arbeiten mit dem Velleman k8055 Interface Board und einem Optokoppler von Vishay. Die besagten Rohdaten sind einfach die Daten, die wir über den Analogen Input erhalten. Hoffe damit ist das Missverständnis beseitigt. |
AW: bestimmte teile einses arrays auslesen
Eine Sache wäre da noch:
man kann ja einzelne Einträge eines Arrays in einer listbox ausgeben listbox1.items.add (inttostr(messwerte[1])); // damit würde ich ja den 2. Eintrag meines Arrays "Messwerte" von typ integer ausgeben. gibt es jetzt eine Möglichkeit mit einem ähnlich simpeln Befehl die ersten 100 Werte auszugeben? im Sinne von listbox1.items.add (inttostr(messwerte[0.99])); //Dass das nicht geht ist mir klar; dient nur der Verdeutlichung meiner Absicht. Ich hoffe auch hier habt ihr ein paar Antworten parat :) |
AW: bestimmte teile einses arrays auslesen
Nein, du musst eine Schleife verwenden
|
AW: bestimmte teile einses arrays auslesen
Nagut
Trotzdem danke:) |
AW: bestimmte teile einses arrays auslesen
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TMessDaten = class (TObject) Daten: array of Byte; Mittelwerte: array of double; procedure Add(const Value: Byte); procedure Clear; procedure CreateMittelwerte; function DivN (const I: integer): boolean; function Mittelwert (const W: double): double; private N: integer; public constructor Create; destructor Destroy; override; end; TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure MachWasMitMittelwerten; procedure Timer1Timer(Sender: TObject); private MessDaten: TMessDaten; end; var Form1: TForm1; implementation {$R *.dfm} procedure TMessDaten.Clear; begin SetLength(Daten, 0); SetLength(Mittelwerte, 0); end; constructor TMessDaten.Create; begin inherited Create; Clear; N:= 100; end; destructor TMessDaten.Destroy; begin Clear; inherited Destroy; end; procedure TMessDaten.Add(const Value: Byte); var Count: integer; begin Count:= Length(Daten); Inc(Count); SetLength(Daten, Count); Daten[Count-1]:= Value; end; function TMessDaten.DivN (const I: integer): boolean; begin Result:= ((I mod N) = 0); end; function TMessDaten.Mittelwert (const W: double): double; begin Result:= W/N; if Result > 0.7 then Result:= 1; if Result < 0.3 then Result:= 0; end; procedure TMessDaten.CreateMittelwerte; var I, J: integer; W: double; begin I:= -1; J:= -1; W:= 0; SetLength(Mittelwerte, 0); while I < Length(Daten)-1 do begin Inc(I); W:= W+Daten[I]; if DivN(I+1) then begin Inc(J); SetLength(Mittelwerte, J+1); Mittelwerte[J]:= Mittelwert(W); W:= 0; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin MessDaten:= TMessDaten.Create; Randomize; end; procedure TForm1.FormDestroy(Sender: TObject); begin MessDaten.Free; end; procedure TForm1.MachWasMitMittelwerten; var I, Count: integer; W: double; begin Messdaten.CreateMittelwerte; Count:= Length(MessDaten.Mittelwerte); W:= 0; for I:= 0 to Count-1 do W:= W+MessDaten.Mittelwerte[I]/Count; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Messdaten.Add(Random(Succ(1))); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 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