恭喜,你发布的帖子
发布于 2021-09-29 12:03:06
6楼
现在300的系统,想完成设备运行周期次数的统计,设备运行周期信号是I1.2,要求每月21号计数自动清零,计数分为本月计数和上月计数,请问用梯形图怎么实现?计数器串联什么意思?c2是完成一次计数999吗?
那么问题的解决分为要分开解决。
第一 I1.2 为运行周期,那么 I1.2 为周期性的脉冲信号,当I1.2 接通或断开的 上升沿 计数器增加一个。
第二,需要制作系统时间去比较21日这个节点。
我是否可以这样理解 例如 8月21日 00:00:00 清零后开始统计
数据1 为 8月21日 00:00:00 ---31日 23:59:59 之间的计数值。 会有大小月区分。
数据2 为 9月1日 00:00:00-----9月20日 23:59:59 之间的计数值
这样从8月21日 统计到9月20 为一个月,数据为8月和9月 对应你所谓的本月计数和上月计数。
这个程序块 可以读取并写入 PLC 系统时间。
年 ,月 日
然后分别比较。
FUNCTION_BLOCK FB10
TITLE = 'Block Title'
//
// 写入系统时间
//
VERSION: '1.0'
AUTHOR: baikai
NAME: Sys_time
FAMILY: baikai
VAR_INPUT
//enable_store_time:BOOL:=false; //存储系统时间 可以记录设备故障时间
//enable_write_time:BOOL:=false; //写入系统时间
END_VAR
VAR_OUTPUT
year:INT;
month:INT;
day:INT;
hour:INT;
mins:INT;
second:INT;
week:INT;
END_VAR
VAR
read_status:INT;
copy_status1:INT;
copy_status2:INT;
write_status:INT;
read_time:DT;
act_time:ARRAY[0..8] OF BYTE;
write_time:DT;
TS:WORD;
week_no:INT;
END_VAR
read_status:= READ_CLK(CDT := read_time
); // 读取系统时间
copy_status1:= BLKMOV(SRCBLK := read_time
,DSTBLK := act_time
); //转化当前时间,并显示时间。
year:=BCD_TO_INT(act_time[0])+2000;
month:=BCD_TO_INT(act_time[1]);
day:=BCD_TO_INT(act_time[2]);
hour:=BCD_TO_INT(act_time[3]);
mins:=BCD_TO_INT(act_time[4]);
second:=BCD_TO_INT(act_time[5]);
TS:=BYTE_TO_WORD(act_time[7]);
week_no:=WORD_TO_INT(ts AND W#16#F) -1;
IF week_no = 0 THEN
week:= 7;
ELSE
week:=week_no;
END_IF;
(*
IF enable_store_time THEN // 存储时间
copy_status2:= BLKMOV(SRCBLK := act_time
,DSTBLK := write_time
); // 当需要写入,先把最后一次的运行时间存储。
END_IF;
IF enable_write_time THEN // 写入时间
write_status:= SET_CLK(PDT := write_time //
); //写入最后一次时存储的时间。
END_IF;
*)
END_FUNCTION_BLOCK
请填写推广理由:
分享
只看
楼主