Funktionsweise des Tasters
Die CX1100-000x Netzteile verfügen alle über eine 4 + 1 Navigationstaster. Es können als fünf Grundzustände über den Taster eingegeben werden:
- UP
- DOWN
- LEFT
- RIGHT
- SELECT
Darüber hinaus können auch kombinierte Eingaben also UP + RIGHT oder UP + RIGHT + SELECT erfasst werden. Die Werte des Tasters werden in einem Register des "Auxiliary Control Blocks" ACB abgelegt. Details sind in der Architekturbeschreibung nachzulesen.
In einem SPS-Programm wird kann auf das Register zugegriffen werden und der Wert ausgewertet werden. Dazu muss in dem SPS-Programm zunächst eine Variable vom Type USINT angelegt werden. Diese wird dann im TwinCAT System Manager mit dem IN-Register des CX1100 verbunden.
Die Abbildung zeigt die verknüpften Signale (hellrot unterlegt). Über die Variable Taster kann jetzt im SPS-Programm auf den Taster zugegriffen werden. Das SPS-Programm hat die folgende Gestallt. Zuerst wird eine externe Variable als Eingang deklariert. (In diesem Beispiel an Adresse 0)
PROGRAM MAIN
VAR
Taster AT %IB0 : USINT;
END_VAR
Über ein einfaches CASE-Statement kann der Schalter dann ausgewertet, und die gewünschte Funktion initiiert werden z.B.:
CASE Taster OF
0: ACTION := NONE;
1: ACTION := UP;
2: ACTION := DOWN;
4: ACTION := LEFT;
8: ACTION := RIGHT;
16: ACTION := SELECT;
END_CASE;
In diesem Fall ist "ACTION" ein neu definierter ENUM-Type. Es kann auch die gewünschte Aktion sofort aktiviert werden.
Für die kombinierten Funktionen werden die Zahlwerte addiert. Also UP (1) und RIGHT (8) wäre dann 8 + 1 = 9 (Rechts-Oben). Es sind auf diese Weise nur sinnvolle Kombinationen möglich also Gegenüber liegende Schalterpositionen sind ohne Zerstörung des Schalters nicht anwählbar.
Will man die Auswertung nicht selbst vornehmen, so stellt das TwinCAT-System eine Bibliotheksfunktion bereit, die die Umwandlung der Tastereingabe in einen ENUM-Type realisiert. Dazu muss zuerst die Bibliothek für die CX-Systeme: TcSystemCX.lib im Bibliotheksverwalter eingebunden werden. Die Funktion heißt " F_CXNaviSwitch(iCX1100_IN : USINT) " und liefert einen ENUM-Type. Dieser codiert namentlich die gedrückte Richtung des Schalters also z.B. e_CX1100_NaviSwitch_MIDDLE für <Mitte>. Alle gültigen Varianten lauten:
- e_CX1100_NaviSwitch_IDLE
- e_CX1100_NaviSwitch_MIDDLE
- e_CX1100_NaviSwitch_TOP
- e_CX1100_NaviSwitch_TOPRIGHT
- e_CX1100_NaviSwitch_RIGHT
- e_CX1100_NaviSwitch_BOTTOMRIGHT
- e_CX1100_NaviSwitch_BOTTOM
- e_CX1100_NaviSwitch_BOTTOMLEFT
- e_CX1100_NaviSwitch_LEFT
- e_CX1100_NaviSwitch_TOPLEFT
- e_CX1100_NaviSwitch_MIDDLE_TOP
- e_CX1100_NaviSwitch_MIDDLE_TOPRIGHT
- e_CX1100_NaviSwitch_MIDDLE_RIGHT
- e_CX1100_NaviSwitch_MIDDLE_BOTTOMRIGHT
- e_CX1100_NaviSwitch_MIDDLE_BOTTOM
- e_CX1100_NaviSwitch_MIDDLE_BOTTOMLEFT
- e_CX1100_NaviSwitch_MIDDLE_LEFT
- e_CX1100_NaviSwitch_MIDDLE_TOPLEFT
Weitere Details zu der Funktion sind in der Dokumentation zu TwinCAT nachzulesen. In einem Programm kann die Funktion wie folgt eingesetzt werden: (die Deklaration und Verknüpfung sind wie im oberen Beispiel angegeben)
CASE F_CXNaviSwitch(Taster) OF
e_CX1100_NaviSwitch_IDLE :; (* do nothing *)
e_CX1100_NaviSwitch_MIDDLE :call_select; (* select item *)
e_CX1100_NaviSwitch_TOP :call_prev_item;(* previous menue item *)
e_CX1100_NaviSwitch_RIGHT :call_inc_value;(* increase value *)
e_CX1100_NaviSwitch_BOTTOM :call_next_item;(* next menue item *)
e_CX1100_NaviSwitch_LEFT :call_dec_value;(* decrease value *)
END_CASE;
Die weitere Auswertung der Schaltereingabe erfolgt dann auch hier im fortlaufenden Programm.