Example Program
The following PLC program shows by way of an example how the three function blocks are used for the power supply unit.
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