//变量定义,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 ;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |