Taster mit zwei Funktionen
Szenario
Ein Taster ist mit dem digitalen Eingang 1 eines IOZER basic verbunden. Über denselben Taster sollen zwei Leuchten an den digitalen Ausgängen 1 und 2 unabhängig voneinander umgeschaltet werden.
Das Beispiel zeigt zwei alternative Varianten: die Auswertung der Klickanzahl über die Button-Funktion und die Auswertung der Betätigungsdauer beim Loslassen des Tasters.
Ziel
| Variante | Bedienung | Aktion |
|---|---|---|
| Button-Funktion | Einfachklick | Leuchte 1 umschalten |
| Button-Funktion | Doppelklick | Leuchte 2 umschalten |
| Betätigungsdauer | Kurzer Tastendruck, weniger als 500 ms |
Leuchte 1 umschalten |
| Betätigungsdauer | Langer Tastendruck, mindestens 500 ms |
Leuchte 2 umschalten |
Umschalten (Toggle) bedeutet: Ein ausgeschalteter Ausgang wird eingeschaltet, ein eingeschalteter Ausgang wird ausgeschaltet. Die jeweils andere Leuchte behält ihren Zustand.
Eingesetzte Hardware
- IOZER basic (IOZ-B-10) mit geeigneter Spannungsversorgung
- Taster als Schließer am digitalen Eingang 1
- zwei für die Ausgänge geeignete Leuchten an den digitalen Ausgängen 1 und 2
- Rechner mit Zugriff auf die Weboberfläche
Voraussetzungen
- Der IOZER basic und die angeschlossenen Komponenten sind gemäß den Sicherheitshinweisen und dem elektrischen Anschluss installiert.
- Der Eingang ist bei losgelassenem Taster logisch
0und bei gedrücktem Taster logisch1. - Für die Variante mit Betätigungsdauer stellt die verwendete Firmware im Ereigniskontext
previous_duration_msbereit.
Die Schritte 1 und 2 bereiten Eingang, Ausgänge und Datenpunkte vor. Wählen Sie anschließend entweder Schritt 3.1 oder Schritt 3.2. Beim Wechsel der Variante ändern Sie den Eingangsdatenpunkt entsprechend und deaktivieren oder entfernen das Ereignis der bisherigen Variante.
Umsetzung
1. Eingang und Datenpunkt konfigurieren
Öffnen Sie I/O & Schnittstellen → Digitale Eingänge und bearbeiten Sie Eingang 1 über das Stiftsymbol.

| Einstellung | Wert |
|---|---|
| Bezeichnung | Taster 1 |
| Aktiviert | Ein |
| Name | taster_1 |
| Invertiert | Aus |
| Filterzeit (Entprellzeit) | 50 ms |
| Pausezeit (für Button-Funktion) | 500 ms |

Die Filterzeit unterdrückt kurze Signalwechsel durch prellende Kontakte. Die Pausezeit bestimmt das Zeitfenster für die Zusammenfassung mehrerer Klicks zu einer Button-Auswertung. Sie ist unabhängig von der später in der Logik festgelegten Grenze zwischen kurzem und langem Tastendruck.
Bestätigen Sie den Dialog mit Übernehmen, speichern Sie die Konfiguration und übernehmen Sie sie in den laufenden Betrieb.
Legen Sie anschließend unter Datenpunkte einen Datenpunkt für den Eingang an. Alternativ können Sie das Plus-Symbol in der Zeile des Eingangs verwenden.
| Einstellung | Variante 3.1: Klickanzahl | Variante 3.2: Betätigungsdauer |
|---|---|---|
| Bezeichnung | Taster 1 |
Taster 1 |
| Name | taster_1 |
taster_1 |
| Datentyp | Integer |
Boolean (Bool) |
| Datenquelle → Datenbindung | Digitaler Eingang |
Digitaler Eingang |
| Datenquelle → Digitaler Eingang | Taster 1 |
Taster 1 |
| Datenquelle → Wert | Button-Klickzahl |
Zustand |
| Datenziel | keines | keines |
Die Datenbindung wird im Reiter Datenquelle & Ziel eingestellt. Die Klickanzahl benötigt einen ganzzahligen Datenpunkt, damit die Werte 1 und 2 unterschieden werden können. Für die Betätigungsdauer wird der boolesche Zustand des Eingangs verwendet.
Speichern und übernehmen Sie die Datenpunktkonfiguration. Weitere Informationen finden Sie unter Digitale Eingänge und Datenpunkte.
2. Ausgänge und Datenpunkte konfigurieren
Wechseln Sie zu I/O & Schnittstellen → Digitale Ausgänge und bearbeiten Sie die Ausgänge 1 und 2.

| Einstellung | Ausgang 1 | Ausgang 2 |
|---|---|---|
| Bezeichnung | Leuchte 1 |
Leuchte 2 |
| Aktiviert | Ein | Ein |
| Name | leuchte_1 |
leuchte_2 |
| Invertiert | Aus | Aus |
| Anfangszustand | Aus | Aus |
| Auto-Aus | Deaktiviert | Deaktiviert |
| Blinken | Deaktiviert | Deaktiviert |
Speichern und übernehmen Sie die Ausgangskonfiguration. Legen Sie anschließend für jeden Ausgang einen Datenpunkt an, entweder unter Datenpunkte oder über das Plus-Symbol in der jeweiligen Ausgangszeile.
| Einstellung | Datenpunkt Leuchte 1 | Datenpunkt Leuchte 2 |
|---|---|---|
| Bezeichnung | Leuchte 1 |
Leuchte 2 |
| Name | leuchte_1 |
leuchte_2 |
| Datentyp | Boolean (Bool) |
Boolean (Bool) |
| Datenquelle → Datenbindung | Digitaler Ausgang |
Digitaler Ausgang |
| Datenquelle → Digitaler Ausgang | Leuchte 1 |
Leuchte 2 |
| Datenquelle → Wert | Zustand |
Zustand |
| Datenziel → Datenbindung | Digitaler Ausgang |
Digitaler Ausgang |
| Datenziel → Digitaler Ausgang | Leuchte 1 |
Leuchte 2 |
| Datenziel → Wert | Zustand |
Zustand |
Die Datenquelle liest den aktuellen Ausgangszustand zurück; das Datenziel gibt den von der Logik gesetzten Wert an den Ausgang weiter. dp.toggle arbeitet anschließend mit dem jeweiligen Datenpunkt.
Speichern und übernehmen Sie die Datenpunkte. Kontrollieren Sie in der Übersicht, dass alle drei Datenpunkte den Status OK besitzen und die Ausgangsdatenpunkte den Zustand Aus anzeigen. Datenpunkt-IDs werden automatisch vergeben und können von den IDs in den Screenshots abweichen. Die JavaScript-Beispiele verwenden deshalb die technischen Namen.
Die folgende Übersicht zeigt den Eingangsdatenpunkt für Variante 3.2 mit dem Quellenwert Zustand und dem Datentyp Bool. Für Variante 3.1 stellen Sie ihn gemäß Schritt 1 auf Button-Klickzahl und Integer um.

Details zur Ausgangskonfiguration finden Sie unter Digitale Ausgänge.
3.1 Ereignis für die Button-Funktion erstellen
Für diese Variante muss taster_1 als Integer mit dem Quellenwert Button-Klickzahl konfiguriert sein.

Öffnen Sie Programm → Ereignis hinzufügen und wählen Sie Datenpunkt → Wert aktualisiert. Fügen Sie das Ereignis hinzu und konfigurieren Sie es:
| Einstellung | Wert |
|---|---|
| Datenpunkt | Taster 1 |
| Aktiviert | Ein |
| Beschreibung | beispielsweise Einfachklick: Leuchte 1; Doppelklick: Leuchte 2 |


Wert aktualisiert ist hier entscheidend: Zwei aufeinanderfolgende Einfachklicks liefern jeweils den Wert 1. Ein Ereignis vom Typ Wert geändert würde bei erneut gleicher Klickanzahl nicht reagieren.
Blockly-Logik
Erstellen Sie zwei aufeinanderfolgende falls-Blöcke aus der Kategorie Logik:
- Vergleichen Sie Ereignis → Neuer Wert mit der Zahl
1. Fügen Sie im mache-Bereich Datenpunkte → Datenpunkt umschalten ein und wählen SieLeuchte 1. - Vergleichen Sie im zweiten Block Neuer Wert mit der Zahl
2. Schalten Sie in dessen mache-BereichLeuchte 2um.
Andere Klickanzahlen führen in diesem Beispiel zu keiner Aktion.

Alternativ: JavaScript
Die gleiche Logik lässt sich im JavaScript-Editor des Ereignisses wie folgt hinterlegen:
if (ioz_event.value == 1) {
dp.toggle("leuchte_1");
}
if (ioz_event.value == 2) {
dp.toggle("leuchte_2");
}

Verwenden Sie pro Ereignis entweder Blockly oder die JavaScript-Alternative. Speichern Sie das Programm und übernehmen Sie es in den laufenden Betrieb.
Funktion prüfen
- Drücken Sie den Taster einmal kurz und lassen Sie ihn los. Warten Sie die eingestellte Klickpause ab: Leuchte 1 muss ihren Zustand wechseln.
- Wiederholen Sie den Einfachklick nach abgeschlossener Auswertung. Leuchte 1 muss erneut umschalten, obwohl die Klickanzahl wieder
1ist. - Drücken Sie zweimal kurz hintereinander innerhalb der eingestellten Klickpause. Nach Abschluss der Klickfolge muss Leuchte 2 einmal umschalten; Leuchte 1 behält ihren Zustand.
- Prüfen Sie die Zustände in der Datenpunktübersicht und den Ausführungsstatus des Ereignisses im Programmbereich.
3.2 Ereignis für die fallende Flanke erstellen
Für diese Variante muss taster_1 als Boolean mit dem Quellenwert Zustand konfiguriert sein. Deaktivieren oder entfernen Sie zuvor das Ereignis aus Schritt 3.1, falls es bereits angelegt wurde.

Öffnen Sie Programm → Ereignis hinzufügen und wählen Sie Datenpunkt → Wert geändert. Konfigurieren Sie das Ereignis:
| Einstellung | Wert |
|---|---|
| Datenpunkt | Taster 1 |
| Aktiviert | Ein |
| Beschreibung | beispielsweise Beim Loslassen: kurz Leuchte 1, lang Leuchte 2 |
Das Ereignis reagiert auf Zustandsänderungen beim Drücken und Loslassen. Die Bedingung Neuer Wert = 0 wählt die fallende Flanke beim Loslassen aus. Erst dann wird die Betätigungsdauer ausgewertet. Auch ein langer Tastendruck schaltet die Leuchte somit erst beim Loslassen um.
Blockly-Logik
- Erstellen Sie einen falls-Block mit der Bedingung Ereignis → Neuer Wert = 0.
- Fügen Sie in dessen mache-Bereich einen weiteren falls-Block mit einem sonst-Zweig ein.
- Vergleichen Sie Ereignis → Dauer des vorherigen Werts mit
< 500. - Schalten Sie im inneren mache-Bereich
Leuchte 1um und im sonst-BereichLeuchte 2.

Die Dauer des vorherigen Werts wird in Millisekunden geliefert. Bei der fallenden Flanke ist der vorherige Wert der gedrückte Zustand des Tasters. Eine Dauer von genau 500 ms gehört bereits zum langen Tastendruck.
Alternativ: JavaScript
if (ioz_event.value == 0) {
if (ioz_event.previous_duration_ms < 500) {
dp.toggle("leuchte_1");
} else {
dp.toggle("leuchte_2");
}
}
ioz_event.previous_duration_ms entspricht dem Blockly-Block Dauer des vorherigen Werts. Der Vergleich ioz_event.value == 0 erkennt sowohl den booleschen Wert false als auch die numerische Darstellung 0 als losgelassenen Zustand.

Verwenden Sie entweder Blockly oder die JavaScript-Alternative. Speichern und übernehmen Sie das Programm.
Funktion prüfen
- Drücken Sie den Taster deutlich kürzer als
500 ms, beispielsweise etwa200 ms, und lassen Sie ihn los. Leuchte 1 muss einmal umschalten. - Halten Sie den Taster deutlich länger als
500 ms, beispielsweise etwa eine Sekunde. Während des Haltens darf noch keine Umschaltung erfolgen. Beim Loslassen muss Leuchte 2 einmal umschalten. - Wiederholen Sie beide Bedienungen. Die jeweils zugeordnete Leuchte muss bei jedem Loslassen erneut umschalten; die andere behält ihren Zustand.
- Prüfen Sie die Zustände in der Datenpunktübersicht und den Ausführungsstatus des Ereignisses.
Fehlerbehebung
| Fehlerbild | Mögliche Ursache und Prüfung |
|---|---|
| Eingang reagiert nicht | Aktivierung, Verdrahtung und logischen Eingangswert unter Digitale Eingänge prüfen. |
| Doppelklick schaltet die falsche Leuchte | Für Variante 3.1 Datentyp Integer und Quellenwert Button-Klickzahl prüfen. Ein boolescher Datenpunkt kann die Klickanzahlen 1 und 2 nicht unterscheiden. |
| Ein weiterer Einfachklick bewirkt nichts | In Variante 3.1 den Auslöser Wert aktualisiert verwenden. |
| Zwei Klicks werden als getrennte Einfachklicks erkannt | Abstand zwischen den Klicks und die konfigurierte Pausezeit von 500 ms prüfen. |
| Umschaltung erfolgt beim Drücken statt beim Loslassen | Für Variante 3.2 den logischen Eingangszustand, die Invertierung und die Bedingung Neuer Wert = 0 prüfen. |
| Kurz und lang werden nicht richtig unterschieden | Quellenwert Zustand, Auslöser Wert geändert und den Vergleich von previous_duration_ms mit 500 prüfen. Die Einheit ist Millisekunden. |
| Leuchte schaltet unerwartet oder zweimal | Nur das Ereignis der gewählten Variante aktivieren; weitere Logik sowie Auto-Aus- und Blinkfunktionen der Ausgänge prüfen. |
| Datenpunkt ändert sich, Ausgang aber nicht | Datenziel und Zuordnung zum richtigen digitalen Ausgang kontrollieren. |
Ergebnis und Erweiterung
Ein einzelner Taster steuert zwei Ausgänge unabhängig voneinander. Die Button-Funktion unterscheidet die Anzahl der Klicks; die zweite Variante unterscheidet die Dauer des gedrückten Zustands beim Loslassen.
Für weitere Funktionen lässt sich die Klickauswertung um zusätzliche Klickanzahlen erweitern. Die Grenze für einen langen Tastendruck kann über den Vergleichswert in Blockly oder JavaScript angepasst werden. Die Pausezeit der Button-Funktion bleibt eine separate Eingangseinstellung.