[西门子] wincc应用脚本之到期停机程序

[复制链接]
查看77 | 回复0 | 前天 07:45 | 显示全部楼层 |阅读模式
>

//变量定义,VAR--内部变量

防重复                 VAR

停机天数 字[有符号]  VAR

当年天数 字[有符号]  VAR

YEARi 字[有符号]  VAR 计算日期暂存

YEARi2 字[有符号]  VAR 计算日期暂存

YEARi3 字[有符号]  VAR 计算日期暂存

MONi 字[有符号]  VAR 计算日期暂存

MONi2 字[有符号]  VAR 计算日期暂存

MONi3 字[有符号]                 VAR 计算日期暂存

DAYi 字[有符号]                 VAR 计算日期暂存

DAYi2 字[有符号]    VAR 计算日期暂存

DAYi3 字[有符号]                 VAR 计算日期暂存

DAYi4 字[有符号]                 VAR 计算日期暂存

DAYi5 字[有符号]                 VAR 计算日期暂存

DAYi6 字[有符号]                 VAR 计算日期暂存

月份 字[有符号](0..12) VAR 月份数组

//变量定义 ,VAR_INPUT--输入变量

防掉电数值 字[有符号]  VAR_INPUT

外部输入密码I 双字[有符号] VAR_INPUT

外部设置密码1 双字[有符号] VAR_INPUT

外部设置密码2 双字[有符号] VAR_INPUT

外部设置密码3 双字[有符号] VAR_INPUT

外部设置密码4 双字[有符号] VAR_INPUT

注册密码输入 双字[有符号] VAR_INPUT

注册密码设置 双字[有符号] VAR_INPUT

复位清零    位              VAR_INPUT

开始计算    位              VAR_INPUT

//变量定义 ,VAR_OUTPUT--输出变量

STOP_O    位              VAR_OUTPUT 输出停机信号

ALM_O      位                             VAR_OUTPUT 输出报警信号

RUN_O      位                  VAR_OUTPUT 输出可运行信号

YEARi0      字[有符号]  VAR_OUTPUT 激活日期

MONi0      字[有符号]  VAR_OUTPUT 激活日期

DAYi0        字[有符号]  VAR_OUTPUT 激活日期

YEARi1      字[有符号]  VAR_OUTPUT 到期日期

MONi1      字[有符号]  VAR_OUTPUT 到期日期

DAYi1        字[有符号]  VAR_OUTPUT 到期日期

剩余天数    字[有符号]  VAR_OUTPUT

第1期密码  位              VAR_OUTPUT

第2期密码  位              VAR_OUTPUT

第3期密码  位              VAR_OUTPUT

停机小于5天 位              VAR_OUTPUT

PLC掉电    位              VAR_OUTPUT


//变量定义 ,VAR_IN_OUT--输入输出变量

外部输入启动 位              VAR_IN_OUT


//程序

月份[0]:=0;

月份[1]:=31;

月份[2]:=28;

月份[3]:=31;

月份[4]:=30;

月份[5]:=31;

月份[6]:=30;

月份[7]:=31;

月份[8]:=31;

月份[9]:=30;

月份[10]:=31;

月份[11]:=30;

月份[12]:=31;


IF 注册密码设置 = 注册密码输入 THEN (*机器到客户后输入注册密码有10天,同时记下当前日期为激活日期*)

停机天数 := 10;

外部输入启动 := 1;

END_IF;


IF 外部输入启动 AND  防重复=0 THEN

YEARi0 := SD210 ;   (*保存激活当天时间*)

MONi0 := SD211;

DAYi0 := SD212;

防重复:=1;

END_IF;


IF 外部输入密码I = 外部设置密码1 THEN  (*密码分四期,每期代表不同的停机日期*)

停机天数 := 40;

第1期密码 := 1;  (*显示第几期密码,方便给下一期密码*)

ELSE

第1期密码 := 0;

END_IF;


IF 外部输入密码I  = 外部设置密码2 THEN

停机天数 := 80;

第2期密码:=1;

ELSE

第2期密码:=0;

END_IF;


IF 外部输入密码I  = 外部设置密码3 THEN

停机天数 := D250;

第3期密码:=1;

ELSE

第3期密码:=0;

END_IF;



IF 复位清零  = 1 THEN

停机天数 := 0;

防重复:=1;

END_IF;



IF 外部输入密码I  = 外部设置密码4 THEN

YEARi1 := YEARi0+100;       (*输入第四密码时相当于机器无限制时间使用*)

MONi1 := MONi0;

DAYi1 := DAYi0;

    ELSE

IF ANDP(1,开始计算) OR SM8002 THEN (*计算激活日期N天后是几月几日*)

IF YEARi0 MOD 4=0 AND YEARi0 MOD 100 <> 0 OR YEARi0 MOD 100 = 0  THEN (*激活日期当年是否是闰年*)

月份[2]:=29;

ELSE

月份[2]:=28;

END_IF;

YEARi := YEARi0;  (*给计算临时变量赋初始值*)

DAYi1 := DAYi0;

MONi := MONi0;

DAYi2 := DAYi0+停机天数;

  

WHILE  DAYi2 >= 月份[MONi]  DO (*单激活日期+停机天数>=当月天数是循环计算*)

DAYi2 :=  DAYi2 - 月份[MONi]; (*超过当月天数,减去当月天数 *)

MONi := MONi+1;                 (*如果还大于,继续减去下月天数*)

IF MONi > 12 THEN  (*当月临时变量>12月是年+1,月回到1月*)

MONi := 1;

YEARi := YEARi+1;

IF YEARi MOD 4=0 AND YEARi MOD 100 <> 0 OR YEARi MOD 100 = 0  THEN (*计算临时变量是否是闰年*)

月份[2]:=29;

ELSE

月份[2]:=28;

END_IF;

END_IF;

END_WHILE;

        DAYi1 := DAYi2 ;  (*单变量天数<当月天数是就是停机的日期*)

        MONi1 := MONi;

        YEARi1 := YEARi;

END_IF;

END_IF;



RUN_O:=(防掉电数值=K800) AND  (YEARi1>SD210 OR(YEARi1=SD210 AND MONi1>SD211)OR(YEARi1=SD210 AND MONi1=SD211 AND DAYi1>SD212)) ; (*当前日期小于停机日期是输出可运行信号*)

STOP_O:=NOT RUN_O;

ALM_O:=NOT RUN_O;



IF  YEARi1-SD210>50 THEN

剩余天数 := 29999;

ELSE

IF ANDP(1,开始计算) OR SM8002 THEN 

IF SD210 MOD 4=0 AND SD210 MOD 100 <> 0 OR SD210 MOD 100 = 0  THEN

月份[2]:=29;

ELSE

月份[2]:=28;

END_IF;

DAYi3:=0; (*计算当前日期是一年的第N天*)

FOR MONi2:=1 

TO SD211-1 BY 1 DO

DAYi3:=DAYi3+月份[MONi2];

END_FOR;

DAYi4 := DAYi3 + SD212 ;


IF YEARi1 MOD 4=0 AND YEARi1 MOD 100 <> 0 OR YEARi1 MOD 100 = 0  THEN

月份[2]:=29;

ELSE

月份[2]:=28;

END_IF;

DAYi5:=0; (*计算到期日期是一年的第N天*)

FOR MONi3:=1

TO MONi1-1 BY 1 DO

DAYi5:=DAYi5+月份[MONi3];

END_FOR;

DAYi6 := DAYi5 + DAYi1;


YEARi3 := 0;  (*计算当前日期到到期日期总整年的天数相加*)

FOR YEARi2 := SD210

TO YEARi1-1 BY 1 DO


IF YEARi2 MOD 4=0 AND YEARi2 MOD 100 <> 0 OR YEARi2 MOD 100 = 0  THEN

当年天数:=366;

ELSE

当年天数:=365;

END_IF;

YEARi3 := YEARi3 + 当年天数;

END_FOR;

剩余天数 := YEARi3 + (DAYi6-DAYi4);

END_IF;

END_IF;


停机小于5天:=  (剩余天数 <= 5) ;

PLC掉电 := 防掉电数值=0 OR YEARi1<SD210 ;

  



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则