Beispielprogramm

Das folgende SPS-Programm zeigt beispielhaft die Anwendung der drei Bausteine für das Netzteil.

PROGRAM MAIN

VAR
    nCounter AT %Q*: USINT;
    (* navi switch *)
    bUp AT %I*        : BOOL;
    bDown AT %I*    : BOOL;
    bLeft AT %I*    : BOOL;
    bRight AT %I*    : BOOL;
    bEnter AT %I*    : BOOL;
    bToggle AT %I*    : BOOL;
    nIn            : USINT;
    eNaviSwitchCx2    : E_CX2100_NaviSwitch;

    (* get display *)
    fbGetDisplayText     : FB_CXGetTextDisplayUSB;
    bExecuteRead        : BOOL;
    eModeRead            : E_CX2100_DisplayModesRd;
    nCursorMode        : USINT;
    nBacklight            : USINT;
    bReadCursorInfoReq    : BOOL := TRUE;
    bReadBacklightReq    : BOOL := TRUE;
    bReadLine1Req        : BOOL;
    bReadLine2Req        : BOOL;
    bReadLinesReq        : BOOL := TRUE;

    (* set display *)
    fbSetDisplayText    : FB_CXSetTextDisplayUSB;
    bExecuteWrite        : BOOL;
    eModeWrite            : E_CX2100_DisplayModesWr;
    bCursorOnReq        : BOOL;
    bCursorOffReq        : BOOL;
    bBlinkCursorOnReq    : BOOL;
    bBlinkCursorOffReq    : BOOL;
    bBacklightOnReq        : BOOL;
    bBacklightOffReq    : BOOL;
    bClearDisplayReq    : BOOL;
    bWriteLine1Req        : BOOL;
    bWriteLine2Req        : BOOL;
    bWriteLinesReq        : BOOL;
    bSetCursorPosXReq    : BOOL;
    bSetCursorPosYReq    : BOOL;
    bSetCursorPosXYReq    : BOOL;

    (* common *)
    nCursorPosX    : USINT;
    nCursorPosY    : USINT;
    sLine1        : STRING;
    sLine2        : STRING;
    bBusy         : BOOL;
    bError        : BOOL;
    nErrorID        : UDINT;
END_VAR

nCounter := nCounter + 1;

nIn.2 := bUp;
nIn.3 := bDown;
nIn.4 := bLeft;
nIn.5 := bRight;
nIn.6 := bEnter;

(* get navi switch *)
eNaviSwitchCx2 := F_CXNaviSwitchUSB(nIn);

(* prepare get display mode *)
IF (eModeRead = eCX2100_DisplayNoActionRd) AND (eModeWrite = eCX2100_DisplayNoActionWr) THEN
    IF bReadCursorInfoReq THEN
        eModeRead := eCX2100_ReadCursorInfo;
        bExecuteRead := TRUE;
    ELSIF bReadBacklightReq THEN
        eModeRead := eCX2100_ReadBackLight;
        bExecuteRead := TRUE;
    ELSIF bReadLine1Req THEN
        eModeRead := eCX2100_ReadLine1;
        bExecuteRead := TRUE;
    ELSIF bReadLine2Req THEN
        eModeRead := eCX2100_ReadLine2;
        bExecuteRead := TRUE;
    ELSIF bReadLinesReq THEN
        eModeRead := eCX2100_ReadLines;
        bExecuteRead := TRUE;
    END_IF
END_IF

(* get display *)

IF (eModeRead <> eCX2100_DisplayNoActionRd) AND (eModeWrite = eCX2100_DisplayNoActionWr) THEN
    fbGetDisplayText(
        bExecute := bExecuteRead,
        sNetID := '',
        nPort     := 16#7100,
        eMode     := eModeRead,
        bBusy     => bBusy,
        bError    => bError,
        nErrorID => nErrorID,
    );
    IF NOT fbGetDisplayText.bBusy THEN
        fbGetDisplayText(bExecute := FALSE);
        IF NOT fbGetDisplayText.bError THEN
            CASE eModeRead OF
            eCX2100_ReadCursorInfo:
                nCursorPosX    := fbGetDisplayText.nCursorPosX;
                nCursorPosY    := fbGetDisplayText.nCursorPosY;
                nCursorMode    := fbGetDisplayText.nCursorMode;
                bReadCursorInfoReq := FALSE;
            eCX2100_ReadBackLight:
                nBacklight        := fbGetDisplayText.nBacklight;
                bReadBacklightReq := FALSE;
            eCX2100_ReadLine1:
                sLine1        := fbGetDisplayText.sLine1;
                bReadLine1Req    := FALSE;
            eCX2100_ReadLine2:
‘                sLine2        := fbGetDisplayText.sLine2;
                bReadLine2Req    := FALSE;
            eCX2100_ReadLines:
                sLine1        := fbGetDisplayText.sLine1;
                sLine2        := fbGetDisplayText.sLine2;
                bReadLinesReq    := FALSE;
            END_CASE
        END_IF

        bExecuteRead        := FALSE;
        eModeRead        := eCX2100_DisplayNoActionRd;
    END_IF
END_IF

(* prepare set display mode *)
IF (eModeWrite = eCX2100_DisplayNoActionWr) AND (eModeRead = eCX2100_DisplayNoActionRd) THEN
    IF bCursorOnReq THEN
        eModeWrite        := eCX2100_CursorOn;
        bExecuteWrite    := TRUE;
        bReadCursorInfoReq := TRUE;
    ELSIF bCursorOffReq THEN
        eModeWrite        := eCX2100_CursorOff;
        bExecuteWrite     := TRUE;
        bReadCursorInfoReq := TRUE;
    ELSIF bBlinkCursorOnReq THEN
        eModeWrite     := eCX2100_CursorBlinkOn;
        bExecuteWrite     := TRUE;
        bReadCursorInfoReq := TRUE;
    ELSIF bBlinkCursorOffReq THEN
        eModeWrite     := eCX2100_CursorBlinkOff;
        bExecuteWrite     := TRUE;
        bReadCursorInfoReq := TRUE;
    ELSIF bBacklightOnReq THEN
        eModeWrite     := eCX2100_BackLightOn;
        bExecuteWrite     := TRUE;
        bReadBacklightReq := TRUE;
    ELSIF bBacklightOffReq THEN
        eModeWrite     := eCX2100_BackLightOff;
        bExecuteWrite     := TRUE;
        bReadBacklightReq := TRUE;

    ELSIF bClearDisplayReq THEN
        eModeWrite     := eCX2100_ClearDisplay;
        bExecuteWrite     := TRUE;
        bReadLinesReq    := TRUE;
    ELSIF bWriteLine1Req THEN
        eModeWrite     := eCX2100_WriteLine1;
        bExecuteWrite     := TRUE;
        bReadLine1Req    := TRUE;
    ELSIF bWriteLine2Req THEN
        eModeWrite     := eCX2100_WriteLine2;
        bExecuteWrite     := TRUE;
        bReadLine2Req    := TRUE;
    ELSIF bWriteLinesReq THEN
        eModeWrite     := eCX2100_WriteLines;
        bExecuteWrite     := TRUE;
        bReadLinesReq    := TRUE;
    ELSIF bSetCursorPosXReq THEN
        eModeWrite     := eCX2100_CursorPosX;
        bExecuteWrite     := TRUE;
        bReadCursorInfoReq := TRUE;
    ELSIF bSetCursorPosYReq THEN
        eModeWrite     := eCX2100_CursorPosY;
        bExecuteWrite     := TRUE;
        bReadCursorInfoReq := TRUE;
    ELSIF bSetCursorPosXYReq THEN
        eModeWrite     := eCX2100_CursorPosXY;
        bExecuteWrite     := TRUE;
        bReadCursorInfoReq := TRUE;
    END_IF
END_IF

(* set display *)
IF (eModeWrite <> eCX2100_DisplayNoActionWr) AND (eModeRead = eCX2100_DisplayNoActionRd) THEN
    fbSetDisplayText(
        bExecute     := bExecuteWrite,
        sNetID    := '',
        nPort        := 16#7100,
        eMode        := eModeWrite,
        sLine1     := sLine1,
        sLine2     := sLine2,
        nCursorPosX := nCursorPosX,
        nCursorPosY := nCursorPosY,
        bBusy        => bBusy,
        bError    => bError,
        nErrorID    => nErrorID
    );
    IF NOT fbSetDisplayText.bBusy THEN
        fbSetDisplayText(bExecute := FALSE);

        bExecuteWrite := FALSE;
        eModeWrite := eCX2100_DisplayNoActionWr;
    END_IF
END_IF