回复:程序编程请教!!!!!

askluck

  • 帖子

    65
  • 精华

    0
  • 被关注

    3

论坛等级:游士

注册时间:2013-07-31

普通 普通 如何晋级?

发布于 2014-12-06 21:54:11

2楼

首先读取系统时间
FC1: 名称 READ_TIME
VAR_OUTPUT
// Output Parameters
year:INT;
month:INT;
day:INT;
hour:INT;
mins:INT;
second:INT;
week:INT;
END_VAR

VAR_TEMP
// Temporary Variables
temp11:INT;
temp10:INT;
temp12:DT;
date_time:ARRAY[0..8] OF BYTE;
TS:WORD;
week_no:INT;
END_VAR
temp11:=READ_CLK(CDT := temp12 // OUT: DATE_AND_TIME
); // INT
temp10:=BLKMOV(SRCBLK :=temp12 // IN: ANY
,DSTBLK :=date_time // OUT: ANY
); // INT
year:=BCD_TO_INT(date_time[0]);
month:=BCD_TO_INT(date_time[1]);
day:=BCD_TO_INT(date_time[2]);
hour:=BCD_TO_INT(date_time[3]);
mins:=BCD_TO_INT(date_time[4]);
second:=BCD_TO_INT(date_time[5]);
TS:=BYTE_TO_WORD(date_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;
END_FUNCTION
FB1: 保存触发变量时间
VAR
// Temporary Variables

date_time:ARRAY[0..8] OF INT;
Pluse:BOOL;
END_VAR

VAR_INPUT
button_on:BOOL:=false;
total_cancel:BOOL:=false;
END_VAR
VAR_OUTPUT
store_total:INT;
store_time:ARRAY[0..6] OF INT;
END_VAR
IF button_on AND NOT Pluse THEN
store_total:=store_total +1;
Pluse:=true;
SS(year :=date_time[0] // OUT: INT
,month :=date_time[1] // OUT: INT
,day :=date_time[2] // OUT: INT
,hour :=date_time[3] // OUT: INT
,mins :=date_time[4] // OUT: INT
,second :=date_time[5] // OUT: INT
,week :=date_time[6] // OUT: INT
); // VOID
store_time[0]:=date_time[0];
store_time[1]:=date_time[1];
store_time[2]:=date_time[2];
store_time[3]:=date_time[3];
store_time[4]:=date_time[4];
store_time[5]:=date_time[5];
store_time[6]:=date_time[6];

END_IF;
IF button_on= FALSE THEN
Pluse:=false;
END_IF;
IF total_cancel THEN
store_total:=0;
END_IF;
以上程序,只是当有触发,读取当前时间,
如果要存储,可以建立一个DB块保存你的触发记录时间,块的大小根据你记录的数据总量相关
程序已经测试
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。