Hab jetzt mal mit SCL ein Programm geschrieben, dass den DB10 ausliest.
Klappt auch fast, jedoch zählt er nicht richtig. Die Gesamtsumme von belegeten Feldern (True) und freien Feldern (false) sollte 20 sein.
Ista ber 40. Auch ist die anzahl der Freien und belegten Felder falsch.
FUNCTION_BLOCK fb99
VAR_INPUT
zustand : ARRAY [1..20] OF BOOL;
END_VAR
VAR_TEMP
i :INT;
sum : INT;
// anzbelegt : INT;
END_VAR
VAR_OUTPUT
anzbelegt : INT ;
END_VAR
VAR
END_VAR
BEGIN;
//
// erstmal sum und anzgelegt auf 0 setzen!
//
FOR i:= 1 TO 20 BY 1 DO // nehmen wir mal an, alle sind TRUE
// dann solten anzbelegt und sum die Werte haben, die ich so :
// n:x, n=Durchlauf, x=Wert
sum := sum + anzbelegt; // n mehr: 1:1
IF zustand = false THEN
anzbelegt := anzbelegt; // das ist ein wirkungsloser Befehl, was soll das?
ELSif zustand= true THEN // hier reicht else, da zustand nur TRUE sein kann, wenn
// er nicht FALSE ist
anzbelegt := anzbelegt +1; // eins mehr: Durchlauf 1:1,2:2, 3:3... n:n
sum := sum + anzbelegt; // n mehr: 1:1, 2:3, 3: 6, ... (n*n+n)/2
// Wen du das wirklich berechnen willst, kannst du das mittels der Formel
// (n*n+n)/2 hinter der Schleife tun. Spart Rechenzeit!
END_IF;
END_FOR;
END_FUNCTION_BLOCK;