从IEC代码复位后自动重新启动应用程序


  • 创建一个标准项目并选择 CODESYS Control Win V3 作为设备。
  • 通过网络扫描连接到目标设备

图1

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

图2

  • 创建一个名为 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 的新函数。

图3

然后按如下方式修改函数:


声明

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。

图4

图5

图6

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

图7

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