从IEC代码复位后自动重新启动应用程序
- 创建一个标准项目并选择 CODESYS Control Win V3 作为设备。
- 通过网络扫描连接到目标设备

- 打开库管理器并添加以下库: CmpApp SysTypes2 interfaces

- 创建一个名为 PersistentVars 的保持性变量对象。 按如下方式修改 PersistentVars:
声明
{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
xAutoRestart : BOOL;
udiCnt : UDINT;
END_VAR
- 按如下修改 PLC_PRG:
声明
VAR
sAppName : STRING := 'Application';
result : RTS_IEC_RESULT;
pApp : POINTER TO CmpApp.APPLICATION;
udiState : UDINT;
udiOpState : UDINT;
xInit : BOOL := TRUE;
xReset : BOOL;
END_VAR
实现
IF xInit THEN
pApp := CmpApp.AppFindApplicationByName(pszString := sAppName, pResult := ADR(result));
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
- 创建一个返回类型为 DWORD 的名为 taskev_StopDone 的新函数。

然后按如下方式修改函数:
声明
FUNCTION taskev_StopDone : DWORD
VAR_INPUT
EventPrm: CmpApp.EVTPARAM_CmpAppStop;
END_VAR
VAR
END_VAR
实现
IF PersistentVars.xAutoRestart THEN
PersistentVars.udiCnt := PersistentVars.udiCnt + 1;
CmpApp.AppStartApplication(PLC_PRG.pApp);
END_IF
- 打开任务配置中的选项卡: 创建一个 StopDone 类型的新事件并为其分配函数 taskev_StopDone。



- 启动项目并将变量 xReset 设置为 TRUE 开始测试。

变量 PersistantVars.udiCnt 在每次重新启动时都会在应用程序中递增。