- Create a "Standard project" and select CODESYS Control Win V3 as the device.
- Define the target system by means of the Network scan.
- Open the Library Manager and add the following libraries:
CmpApp
SysTypes2 interfaces - Activate the automatic generation of the project information in Project/Project information:
Create a persistent variable named PersistentVars.
Adapt PersistentVars as follows:
Section Column width 7 DeklarationDeclaration
Column width 93 Code Block theme Confluence {attribute 'qualified_only'} VAR_GLOBAL PERSISTENT RETAIN xAutoRestart : BOOL; udiCnt : UDINT; END_VAR
Adapt the POU PLC_PRG as follows:
Section Column width 7 Declaration
Column width 93 Code Block theme Confluence VAR sAppName : STRING := 'Application'; result : RTS_IEC_RESULT; instPrjInfo : CmpApp.PROJECT_INFO; pPrjInfo : POINTER TO CmpApp.PROJECT_INFO := ADR(instPrjInfo); pApp : POINTER TO CmpApp.APPLICATION; udiState : UDINT; udiOpState : UDINT; xInit : BOOL := TRUE; xReset : BOOL; END_VAR
Section Column width 7 Implementation
Column width 93 Code Block theme Confluence IF xInit THEN pApp := CmpApp.AppFindApplicationByName(pszString := sAppName, pResult := ADR(result)); // Flag "Automatically generate 'Project Information' POU's must be set CmpApp.AppGetProjectInformation(pApp := pApp, pInfo :=pPrjInfo); xInit := False; PersistentVars.xAutoRestart := False; END_IF IF xReset THEN xReset := FALSE; PersistentVars.xAutoRestart := True; CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET); END_IF
- Create a new function named taskev_StopDone with the return type DWORD.
Then adapt the function as follows:
Section Column width 7 Declaration
Column width 93 Code Block theme Confluence FUNCTION taskev_StopDone : DWORD VAR_INPUT EventPrm: CmpApp.EVTPARAM_CmpAppStop; END_VAR VAR END_VAR
Section Column width 7 Implementation
Column width 93 Code Block theme Confluence IF PersistentVars.xAutoRestart THEN PersistentVars.udiCnt := PersistentVars.udiCnt + 1; CmpApp.AppStartApplication(PLC_PRG.pApp); END_IF
sdggd