Array schreiben und Werte vermitteln

arcomp

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Schoenen Guten Tag zusammen,

Ich muss ein Array schreiben und damit Werte vermitteln. Danach gehts " First in - Last out"

Erst das Array definieren

Type

Channel1_ARRAY: ARRAY[1..20] OF REAL;

END_TYPE

( Beim kompilieren gibts eh schon mal Fehlermeldung)

1.) Dann muessen die real Werte aus dem Analog Modul ( Variable Channel1 als REAL) dem Array zugeordnet werden. Wie mach ich das ??

2.) Dann muessen alle Werte addiert werden and anschliessend durch 20 geteilt werden. Resultat ist mein gemittelter Wert x

3.) Dann den aeltesten Wert 'rausnehemen und den aktuellsten Wert wieder hinzuaddieren und ab gehts wieder zu Nr. 2.)


Vielleicht koennte jemand helfen.

Gruss aus SA
 
(* erste Version------------------------------------------------------------------------------------------

IF n = 20 THEN
Channel1_ARRAY[n] := Channel2_read;
n := 1;
ELSE
FOR n := 1 TO 19 BY 1 DO
m := n + 1;
Channel1_ARRAY[n] := Channel1_ARRAY[m];
END_FOR;
END_IF;



IF i > 0 and i < 21 THEN
Additionswert := Additionswert + Channel1_ARRAY;
i := i + 1;
ELSIF i = 21 THEN
Mittelwert := Additionswert / 20.0;
i := 1;
END_IF;
------------------------------------------------------------------------------------------------------*)









(*zweite Version------------------------------------------------------------------------------------------

Additionswert := 0.0;
FOR n := 1.0 TO 20.0 BY 1.0 DO
m := n + 1.0;
IF n < 20.0 THEN
Channel1_Array[n] := Channel1_Array[m];
Additionswert := Additionswert + Channel1_Array[n];
Mittelwert := Additionswert / n;
ELSE
Channel1_Array[n] := Channel2_read;
Mittelwert := (Mittelwert + Channel1_Array[n]) / n;
END_IF;
END_FOR;
------------------------------------------------------------------------------------------------------*)






(*Dritte Version------------------------------------------------------------------------------------------
Additionswert := 0.0;
FOR n := 1.0 TO 20.0 BY 1.0 DO
m := n + 1.0;
IF n < 20.0 THEN
Channel1_Array[n] := Channel1_Array[m];
ELSE
Channel1_Array[n] := Channel2_read;
END_IF;
Additionswert := Additionswert + Channel1_Array[n];
END_FOR;
Mittelwert := Additionswert / n;

------------------------------------------------------------------------------------------------------*)


Geht leider alles nicht
 
Hallo,
ich bleibe mal bei deiner 1. Version :
Code:
n := n +1 ;
if n > 20 then n:=1 ; end_if ;
Channel1_ARRAY[n] := Channel2_read;

Additionswert := 0 ;
for i:= 1 to 20 by 1 do
    Additionswert := Additionswert + Channel1_ARRAY[i];
end_for ;
Mittelwert := Additionswert / 20.0;

Anmerkungen dazu :
Der Code sollte natürlich in einem FB stehen (ein FC würde von Zyklus zu Zyklus wieder alles vergessen).
Die Variablen Channel1_ARRAY und n sollte als STAT deklariert sein.
Die Variablen Channel1_ARRAY, Additionswert, Mittelwert, Channel2_read sollten vom gleichen Typ (hier REAL) sein.

Mehr ist mir im Augenblick nicht aufgefallen ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Alles gemacht aber beim debuggen kommt Fehelermeldung " POU ' Array_testen " not used in any resource! Debug for Worksheet 'Array_testen' not possible!.

Was heisst eine variable als "STAT" deklarieren ??

Danke
 
Guten Morgen

Wie wärs wenn du mal etwas kommentar dazu schreibst was du eigentlich mit welcher zeile machst.
Dann eine Schleife mit Real würde ich nie machen.

und das wichtigste wann kommt welcher fehler bzw kannst du es gar nicht ausführen

und ist das ganze eine Hausübung
 
Ja ... poste mal deinen ganzen Code - inklusive der Deklaration.

Wenn du nicht weißt was STAT heißt - wie hast du dann überhaupt deine Variablen deklariert ?

Gruß
Larry
 
Hallo

bei PCWORX erstellst du einen FB, im Variablenarbeitsblatt sind die variablen dann auomatisch "STAT"

POU not used, bedeutet das diese nicht durchlaufen wird, ist ja auch nur ein FB, hierzu muss der FB in einem Programm instanziert werden, und die Programminstanz dann einer Task zugeodnet werden

wenn du ein leeres Projekt startest, hast du ein Programm namens Main, welches der Task Default zugeordnet ist, in dieser Main einfach mal deinen Funktionsbaustein aufrufen

bei der PCWORX Installation findest du auch eine PDF Datei "Quickstart", vielleicht einfach mal durchlesen ?
 
Jetzt gehts ja.


Additionswert6 := 0.0;
FOR n6 := 1 TO 20 DO
m6 := n6 + 1;
IF n6 < 20 THEN
Channel6_ARRAY[n6] := Channel6_Array[m6];
Additionswert6 := Additionswert6 + Channel6_Array[n6];
Mittelwert6 := Additionswert6 / 19.0;
ELSE
Channel6_Array[n6] := Channel6_read; (* Channel6_read ist der Wert aus dem Analouge modul *)
Channel6 := (Mittelwert6 + Channel6_Array[n6]) / 2.0;
END_IF;
END_FOR;


Und die Variable Channel6_Array[n6] als Datentyp Array deklariert.




Schoenen Valentinstag noch

P.S
( ich geh heut Nachmittag mit meiner Suessen an die Beach ! Gruss aus Kapstadt)
 
Zurück
Oben