Mit den Displayfunktionen ist es möglich, Texte auf das Frontdisplay der Steuerung auszugeben ( FC_DisplayLineWrite), FC_DisplayMessageWrite()) bzw. Zeichen vom Display zu löschen (FC_DisplayClear(), FC_DisplayClearLine()). Hierfür steht ein spezifischer Modus zur Verfügung (ET_DisplayModeSelect.IecMode), der über die Funktion FC_DisplayModeSet() aktiviert werden kann.
In der Standardeinstellung befindet sich das System im DISPLAY_SYSTEM_MODE. In diesem Modus hat nur die PacDrive-Firmware Schreibzugriff auf das Display. Der aktuell eingestellte Modus kann auch mit Hilfe der Funktion FC_DisplayModeGet() erfragt werden. Bei Programm-Reset wechselt der Modus automatisch in den Standardmodus.
Wenn das Display beim Aufruf nicht geändert wird (falls z. B. eine Schreibfunktion aufgerufen wird), der Text sich aber nicht von dem auf dem Display angezeigten Text unterscheidet, ist der Text im Display nicht betroffen, und die Funktion FC_DisplayRefreshed() liefert sofort TRUE zurück.
Die Displayfunktionalität darf erst benutzt werden, wenn der Bootvorgang der Steuerung abgeschlossen ist.
HINWEIS: Mit der Funktion FC_GetPacDriveBootState() stellen Sie sicher, dass der Bootvorgang der PacDrive-Steuerung abgeschlossen ist.
Die Ausgabe erfolgt bei abgeschlossenen Bootvorgang asynchron zur aufrufenden Task. Werden Displayfunktionen bereits vorher aufgerufen (FC_GetPacDriveBootState() = 0), erfolgt eine synchrone Ausgabe. D. h. die Task wird für die Bearbeitungszeit der Displayausgabe verzögert. Dies kann aufgrund der langsamen Verarbeitung bei den Steuerungen bis zu einer Sekunde dauern.
Folgende Funktionen sind hiervon betroffen:
PROGRAM SRC_Display
VAR
diState : DINT := 0; (*State*)
sDisplayMessage : STRING(80) := 'Test'; (*display-message*)
diResult : DINT := 0; (*Result of the display functions*)
diResultDisplayRefreshed : DINT := 0; (*Result of the DisplayRefreshed-function*)
xDisplayStatus : BOOL := FALSE; (*Display refreshed?*)
xError : BOOL := FALSE; (*Error*)
xEnableWriteDisplayMessage : BOOL := FALSE; (*enable writing the DisplayMessage*)
xEnableClearDisplay : BOOL := FALSE; (*enable clearing the display*)
END_VAR
CASE diState OF
0 : (*Wait on PacDrive Controller ready*)
IF FC_GetPacDriveBootState()=1 THEN
diState := diState + 1;
END_IF;
1 : (*Wait on user input*)
IF xEnableWriteDisplayMessage THEN
diState := diState + 1;
END_IF
IF xEnableClearDisplay THEN
diState := diState + 1;
END_IF
2 : (*Actual Display-mode?*)
IF (FC_DisplayModeGet() = ET_DisplayModeSelect.IecMode) THEN
diState := diState + 2;
ELSE
diState := diState + 1;
END_IF
3 : (*Switch on IEC-Mode*)
IF( FC_DisplayModeSet(ET_DisplayModeSelect.IecMode) = 0) THEN
diState := diState + 1;
END_IF
4 : (*Write or Clear Display*)
IF xEnableWriteDisplayMessage THEN
diResult := DisplayMessageWrite(1, 1, sDisplayMessage, TRUE);
xEnableWriteDisplayMessage := FALSE;
diState := diState + 1;
END_IF
IF xEnableClearDisplay THEN
diResult := FC_DisplayClear();
xEnableClearDisplay := FALSE;
diState := diState + 1;
END_IF
5 : (*Display refreshed?*)
diResultDisplayRefreshed := DisplayRefreshed(xDisplayStatus);
IF( (diResultDisplayRefreshed = 0) AND ( xDisplayStatus = TRUE) ) THEN
diState := diState + 1;
END_IF
6 : IF(diResult <> 0) THEN
xError := TRUE;
diState := 10;
ELSE
diState := 1;
END_IF
10: (*error state*)
; (*do nothing*)
END_CASE