操作就是人工调配好后,在触摸屏上按下开始,然后PLC或者触摸屏自动计算。考虑到放假时停电关机,所以用计时器累计行不通,只能用实时时钟做减法,这样就算中途停电也不影响。
大概思路时,工人调配好后,按一个键记录下当前的实际时钟,然后隔一段时间调出***新时间与前面的时间相减即可。我想用威纶通触摸屏的宏指令做,上网搜了一下,没看到有专门的函数,只能自己写程序判断这就麻烦了,要判断闰年(2月是28天还是29天)、月大(31天)、月小(30天)
大家有什么好的想法和建议呢?
你的问题有点问题
【考虑到放假时停电关机】~如果放假超过72个钟(是小时?)啥方法都难实现,除非有值班的那就用一个用电池的独立定时器。
抛开放假停机可能产生的问题
可以这样~交给PLC来做
触摸屏启动按键开始记录,同时修正PLC时钟(PLC时钟误差太大)
PLC里就简单了~就怕所用PLC没有时钟或没有时钟运算指令
就算放假时长超过72小时,那么来上班通电时也会马上报警提醒,工人报废处理不用就可以了。
西门子***论坛有一个是计算天数的
//基本好像可以。。。。。
if year1+1>=year2 then //没有完整的一年,不参与计算
else
for i=year1+1 to year2-1
if i%4==0 then
sum=sum+366 //闰年算366日
else
sum=sum+365 //平年算365日
end if
next i
end if
//计算两个月份之间的天数
if (year1==year2)&(month1+1>=month2) then //年相同,月之间没有完整月,就不需要计算什么。
else //否则就出现后面两种情况……
if year1==year2 then //这是***种情况,年相等,直接计算。
if year1%4==0 then //闰年了
mon[1]=29
else
mon[1]=28
end if
for i=month1 to month2-2 //从当前月的下一个月起,累加,到结束之前的一个月。
sum=sum+mon[i]
next i
else //这是第二种情况,年不相等,分两段计算月。
//1 2 3 4 5 6 7 8 9 10 11 12
//1 2 3 4 5 6 7 8 9 10 11 12
if month1<>12 then //计算前段不足一年的月数的天数。
if year1%4==0 then //闰年了
mon[1]=29
else
mon[1]=28
end if
for i=month1 to 11
sum=sum+mon[i]
next i
end if
if month2<>1 then //计算后段不足一年的月数的天数。
if year2%4==0 then //闰年了
mon[1]=29
else
mon[1]=28
end if
for i=0 to month2-2
sum=sum+mon[i]
next i
end if
end if
end if
//计算两个日期之间的天数
if (year1==year2)&(month1==month2) then
sum=day2-day1
else
if year1%4==0 then
mon[1]=29
else
mon[1]=28
end if
i=month1-1
sum=mon[i]-day1+day2+sum
end if
你不需要看代码,只需要看文字解释就可以大概地了解这个计算日子的过程。就要这么多的过程。