Binäruntersetzer
In Steuerungsaufgaben wird häufig gefordert, das Verhalten eines Binäruntersetzers, Englisch auch binary scaler genannt, zu realisieren. Mit einem Binäruntersetzer kann man erreichen, dass ein Ausgang nach einer definierten Anzahl von Eingangsimpulsen einen Impuls gibt. Beispiel:
- Eingangssignal erhält Impuls
- Ausgangssignal wird auf 1 gesetzt
- Eingangssignal erhält wieder einen Impuls
- Ausgangssignal wird auf 0 gesetzt
- Eingangssignal erhält nächsten Impuls
- Ausgangssignal wird auf 1 gesetzt
Bei diesem Beispiel haben die Eingangs- und Ausgangsimpulse unterschiedliche Frequenzen. Die Frequenz des Eingangssignals ist 2, die des Ausgangssignals ist 1. Für je 2 Eingangssignale wird 1 Ausgangssignal erzeugt. Das Verhältnis zwischen Eingangs- und Ausgangsimpulsen wird Teilungsverhältnis genannt, das ist in diesem Beispiel 2:1. Bei einem Teilungsverhältnis von 2:1 ist das Verhalten wie bei einem Stromstoßschalter.
Es ist natürlich möglich, Binäruntersetzer mit einem größeren Teilungsverhältnis realisieren. Beispielsweise könnte man ein SPS-Programm erstellen, bei dem der Ausgang erst mit jedem dritten Eingangsimpuls das Ausgangssignal ändert. In der Automatisierungstechnik werden für solche Impulsgeber auch T-Flipflop, T-Kippglied oder Toggle-Flipflop bezeichnet.
Binäruntersetzer mit einer SPS
Mit einer SPS gibt es mehrere Möglichkeiten, einen Binäruntersetzer zu programmieren. Eine Möglichkeit ist die Realisierung mit der Flankenauswertung in Verbindung mit Speichergliedern. Bei einem Teilungsverhältnis von 2:1 besteht die Aufgabe darin, eine Schaltungslogik zu realisieren, bei der der Ausgang jedes Mal den Signalzustand verändert, wenn das Eingangssignal eine positive Flanke gibt. Zum Verständnis des Zusammenhangs zwischen Eingang und Ausgang ein Impulsdiagramm.
Aus dem Impulsdiagramm wird deutlich, dass man hierfür eine positive Flankenauwertung benötigt, da der Ausgang den Zustand bei jeder positiven Flanke verändern soll. Als Eingangssignal wird in diesem Beispiel der Operand E0.1 benutzt. Damit man das Eingangssignal nicht manuell per Hand von 0 auf 1 und umgekehrt setzen muss, könnte man hier auch einen Taktmerker benutzen. So würde man automatisch Taktsignale erzeugen, die stets im gleichen Intervall eine 1 oder 0 liefern.
Netzwerk 1:
Das erste Netzwerk wird dafür benutzt, die positive Flanke des Eingangsoperanden E0.1 auszuwerten und den Impulsoperanden in einer Bitadresse zu speichern. Der Einfachheit halber wird hierfür in diesem Beispiel der Merkerbit M1.1 benutzt. Als Flankenoperanden, der bei einer Flankenauswertung immer benötigt wird, wird der Merkerbit M0.1 genommen.
Netzwerk 2:
Im nächsten Schritt muss nun realisiert werden, dass wenn der Impulsoperand ein Signal bekommt (positive Flanke), dass der Ausgang A0.1 gesetzt wird, aber nur, wenn er nicht bereits gesetzt wurde. Hierfür verwendet man eine UND-Verknüpfung, trägt den Impulsoperanden (M1.1) und den negierten Ausgang (A0.1) als Eingänge der UND-Verknüpfung ein. Gleichzeitig setzt man den Impulsoperanden zurück, damit eine erneute positive Flanke ausgewertet werden kann.
Netzwerk 3:
Im 2. Netzwerk wurde realisiert, dass der Ausgang gesetzt wird, wenn er nicht bereits gesetzt wurde. Man braucht noch ein Netzwerk, für den umgekehrten Fall. Nämlich dass der Ausgang rückgesetzt wird, wenn er bereits gesetzt wurde. Hierfür verwendet man erneut ein UND-Glied und trägt den Impulsoperanden (M1.1) und den Ausgang (A0.1) an die Eingänge des UND-Glieds. Diesmal wird A0.1 am UND-Glied nicht negiert. Der Ausgang des UND-Glieds führt zum Rücksetzen von A0.1.
Die 3 Netzwerke in AWL mit Kommentaren
U | E | 0.1 | //Eingang E0.1 | |
FP | M | 0.1 | //Abfrage einer positive Flanke von E0.1 über Flankenoperanden M0.1 | |
= | M | 1.1 | //Zuweisen eines Impulses an den Impulsoperanden M1.1 | |
U | M | 1.1 | //Abfrage des Impulsoperanden M1.1 | |
UN | A | 0.1 | //Abfrage und Negation des Signalzustandes des Ausgangs A0.1 | |
S | A | 0.1 | //Ausgang A0.1 setzen | |
R | M | 1.1 | //Rücksetzen des Impulsoperanden | |
U | M | 1.1 | //Abfrage des Impulsoperanden | |
U | A | 0.1 | //Abfrage des Ausgangs A0.1 | |
R | A | 0.1 | //Rücksetzen des Ausgangs 0.1 |
So hätte man einen Binäruntersetzer mit einem Teilungsverhältnis von 2:1 realisiert. Braucht man ein größeres Teilungsverhältnis, muss man lediglich mehrere Binäruntersetzer hintereinander schalten, also das Prinzip von Netzwerk 2 und 3 erneut zwischen Netzwerk 1 und 2 einsetzen und statt dem Ausgang irgendeine Bitadresse (Merker) benutzen. So würde man erreichen, dass beim 2. Signal nicht der Ausgang das Signal zum Setzen erhält, sondern die Bitadresse.