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.
//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
Guck an, unser weiss_nix, liefert eine richtig knackige Alternative. Sehr, sehr schön!
Und jetzt muss ich für unsere Einsteiger erklären, wie das funktioniert?!
Weiss_nix hat in die Zuweisung (Q[MD1]:=)das Ergebnis (TRUE oder FALSE) eines Vergleichs (IA1+1 = MD1) eingebaut.
Nehmen wir an, der Eingangswert sei 0. Darauf addieren wir eine 1, weil es den Q0 nicht gibt und unser Schleifenzähler von
1 bis 12 läuft. Jetzt vergleichen wir das mit dem FOR-Schleifenzähler MD1.
Das Ergebnis dieses Vergleichs ist TRUE (was wir dem Q[MD1] zuweisen), wenn der Schleifenzähler den gleichen Wert besitzt, wie der Eingangswert+1. -> (0+1 = 1) = TRUE
In unserem Fall wird dann der Q1 gesetzt.
Lässt man das +1 weg, wird beim Eingangswert 0 (und >12) kein Ausgang gesetzt.
Weiss_nix, dass ist was für Fortgeschrittene, du Tiefstapler. (Nick-Namen ändern?
)
Zur Geschmackssache: Diese Funktionsweise ist an den 74154 (ein Standard TTL-Baustein) angelehnt - mit invertierter Ausgangslogik.
Wenn wir hier fertig sind, kann sich jeder die Bausteine so anpassen, dass sie für seine Zwecke passen.
Es gibt ja immer viele (lange, kurze, Irr-) Wege nach Rom.
Grüße
Konni