Q | |||
0 0 0 0 0 0 0 0 0 1 1 1 | |||
dezimal | binär | 1 2 3 4 5 6 7 8 9 0 1 2 | |
0 | 0000 | 1 0 0 0 0 0 0 0 0 0 0 0 | |
1 | 0001 | 0 1 0 0 0 0 0 0 0 0 0 0 | |
2 | 0010 | 0 0 1 0 0 0 0 0 0 0 0 0 | |
3 | 0011 | 0 0 0 1 0 0 0 0 0 0 0 0 | |
4 | 0100 | 0 0 0 0 1 0 0 0 0 0 0 0 | |
5 | 0101 | 0 0 0 0 0 1 0 0 0 0 0 0 | |
6 | 0110 | 0 0 0 0 0 0 1 0 0 0 0 0 | |
7 | 0111 | 0 0 0 0 0 0 0 1 0 0 0 0 | |
8 | 1000 | 0 0 0 0 0 0 0 0 1 0 0 0 | |
9 | 1001 | 0 0 0 0 0 0 0 0 0 1 0 0 | |
10 | 1010 | 0 0 0 0 0 0 0 0 0 0 1 0 | |
11 | 1011 | 0 0 0 0 0 0 0 0 0 0 0 1 | |
12 | 1100 | 0 0 0 0 0 0 0 0 0 0 0 0 | ab hier (12) Werte ungültig, alle Qs abgeschaltet |
13 | 1101 | 0 0 0 0 0 0 0 0 0 0 0 0 | |
14 | 1110 | 0 0 0 0 0 0 0 0 0 0 0 0 | |
15 | 1111 | 0 0 0 0 0 0 0 0 0 0 0 0 |
//Baustein wird nur ausgeführt, wenn sich der Wert am Eingang IA1 ändert.
IF IA1<>MD02 OR NOT M1 THEN //Wenn es einen neuen Wert (ungleich dem alten in MD02) gibt oder bei Erstausführung
FOR MD01 := 1 TO 12 BY +1 DO //Alle 12 Ausgänge setzen
Q[MD1]:= (IA1+1 = MD01);
END_FOR;
MD02:=IA01; //den zukünftigen "alten" Wert speichern
M1:=TRUE; //Verriegelung bei der Erstusführung
//Genau einen Ausgang entspr. des Eingangswertes einschalten
END_IF;
Achtung: Auch bei logischen Verknüpfungen gelten Rechenregeln. Eine der zahlreichen Regeln ist z. B. die Regel,
dass eine UND-Verknüpfung vor der ODER-Verknüpfung ausgeführt wird.
So ergeben folgende Verknüpfungen NICHT das gleiche Ergebnis (Beispiel Selbsthaltung):
Q01:=I01 AND I02 AND I03 AND (I04 OR Q01); //Motorschütz M1
Q01:=I01 AND I02 AND I03 AND I04 OR Q01; //Motorschütz M1
Betrifft: UF-DEMUX4_12Q
Hallo Konni,
sehr schönes Beispiel, allerdings würde ich den Code in der UF "für mich" ein wenig abändern (da ich sehr code-faul bin) wollen ;)
und einen Wert an IA01 außerhalb der Range anzugeben um keinen Ausgang zu setzen ist Geschmacksache, man kann ja das "+1" weglassen.Code: [Auswählen]//Baustein wird nur ausgeführt, wenn sich der Wert am Eingang IA1 ändert.
IF IA1<>MD02 OR NOT M1 THEN //Wenn es einen neuen Wert (ungleich dem alten in MD02) gibt oder bei Erstausführung
FOR MD01 := 1 TO 12 BY +1 DO //Alle 12 Ausgänge setzen
Q[MD1]:= (IA1+1 = MD01);
END_FOR;
MD02:=IA01; //den zukünftigen "alten" Wert speichern
M1:=TRUE; //Verriegelung bei der Erstusführung
//Genau einen Ausgang entspr. des Eingangswertes einschalten
END_IF;
GLG
WeiteresQ01 := Q01 AND ( NOT I01 ); Q01 kann niemals 1 sein, weil er selbst als AND TRUE verknüpft ist. ::)
Q01 := Q01 AND ( NOT I01 );
Dies ist eine ST Anweisung, welche die Funktion des FB ED im Modus R_TRIG nachbildet.
Q01 := Q01 OR ( I01 );
Dies ist eine ST Anweisung, welche die Funktion des FB ED im Modus F_TRIG nachbildet.