在调试程序的时候,我们经常会使用热复位或者冷复位,让程序重新开始运行。我们一般都是在IDE里面执行复位的,当然也可以在程序中通过变量来进行复位操作,在触摸屏上加上这个复位按钮也是极好的,可以规避一些逻辑上的问题,毕竟只要能复位掉的bug都不是bug。下面开始展示实现的步骤:
1,创建一个标准工程,必须连接到实际的控制器,仿真是不能实现的;
2,打开库管理器,在高级里面添加CmpApp、SysTypes2interfaces库;
3,添加一个掉电保持型变量列表;
{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
xAutoRestart : BOOL;
udiCnt : UDINT;
END_VAR
4,在PLC_PRG中编写以下程序;
PROGRAM PLC_PRG
VAR
sAppName : STRING := 'Application';
result : RTS_IEC_RESULT;
pApp : POINTER TO CmpApp.APPLICATION;
xInit : BOOL := TRUE;
xReset : BOOL;
CountTest : DINT;
END_VAR
IF xInit THEN
pApp := CmpApp.AppFindApplicationByName(pszString := sAppName, pResult := ADR(result));
PersistentVars.xAutoRestart := FALSE;
xInit := FALSE;
END_IF
IF xReset THEN
CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET);
PersistentVars.xAutoRestart := TRUE;
xReset := FALSE;
END_IF
CountTest := CountTest + 1;
5,创建一个函数命名为taskev_StopDone,返回值为DWORD;
6,在函数中编写以下程序;
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
7,打开任务配置页面;
8,创建一个StopDone的事件然后把taskev_StopDone这个函数分配给它;
9,下载程序,把PLC_PRG中的xReset设置为TRUE就可以愉快地实现复位操作了。
{{item.nickname}}
{{key+1}}楼{{item.content}}
{{item2.nickname}}
{{item2.content}}