马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 工控小生 于 2020-6-17 23:42 编辑
在调试程序的时候,我们经常会使用热复位或者冷复位,让程序重新开始运行。我们一般都是在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就可以愉快地实现复位操作了。
|