Structured Text gemäß IEC 61131-3)

Zu 2)
Das Array muss also von vornherein so gross sein wie maximal benötigt. Dann kann IN_ucFiltergrad auch nicht zu gross werden.
Ich verstehe nicht genau was du damit meinst! Soll ich die Obergrenze mein Array auf 2^8-1 setzen? oder kannst du bitte mir ein Beispiel zeigen.
Zu 2)
Auch dabei wirst Du besser vorankommen, wenn Du Dein Programm testen kannst. .
Ich habe mich TwinCaT besorgt und habe die syntaktische Fehler korriegieren aber es fällt mir schwer das Programm zu testen
 
Ich habe meine Code nochmal geändert.
Code:
FUNCTION_BLOCK Mittelwert
VAR_INPUT
	IN_nx : INT; (* zu filternder Wert*)
         IN_ucFitergrad: BYTE; (*Anzahl abzuspeichernder Werte*)
END_VAR
VAR_OUTPUT
	OUT_y: INT; (* Mittelwert: gefilterter Wert*)
         Info: STRING; (*Notification für den Benutzer *)
END_VAR
VAR
	Messwerte:ARRAY[1..255] OF INT;
	index_Write:INT:=1;
         index_Read:INT:=1;
	Sum:INT:=0;
        zaehler:INT:=0;
END_VAR

(*zu filternder Wert im FIFO schreiben*)
IF index_Write <= IN_ucFitergrad THEN
Messwerte[index_Write]:=IN_nx;
index_Write:=index_Write+1;
Zaehler:= zaehler+1;
ELSE
index_Write:=1;
END_IF;
(*zu filternder Wert im FIFO auslesen*)
IF index_Read <= index_Write THEN
Sum:= Sum + Messwerte[index_Read];
index_Read:=index_Read+1;
ELSE
index_Read:=1;
END_IF;

(*Mittelwert Berechnung*)
IF zaehler < 20 THEN
Info:= ' Für die Berechnung des gleitenden Mittelwerts reichen die gespeicherten Werte nicht aus';
ELSIF (zaehler MOD IN_ucFitergrad)=0 THEN
OUT_y:=Sum/IN_ucFitergrad;
Sum:=Sum-Messwerte[1];
ELSE
OUT_y:=Sum/IN_ucFitergrad;
Sum:= sum - Messwerte[zaehler MOD IN_ucFitergrad];
END_IF;

werde ich mich immer auf ihre Kritik freuen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe einen 64 Bit Rechner und TwinCAT 2.11 R3. läuft dort nicht
Dann musst Du es wohl in einer virtuellen 32 Bit-Maschine ausführen. Damit habe ich allerdings keine Erfahrung.

Zu Deinem Code: Der wird immer konfuser, ich würde noch mal neu anfangen. Der Baustein muss doch Folgendes in der angegebenen Reihenfolge machen:
1) Wenn der Ringpuffer voll ist, den ältesten Wert von der Summe subtrahieren, sonst den Füllstandszähler um 1 erhöhen.
2) Den neuen Wert in den Ringpuffer eintragen (wenn der Ringpuffer voll ist, wird damit der älteste Wert überschrieben).
3) Den neuen Wert zur Summe addieren und mit Hilfe des Füllstandszählers den Mittelwert berechnen.
 
Zurück
Oben