回复:“OB80_DATE_TIME”高手请进,欢迎各位围观!

n次看你的背影

  • 帖子

    2321
  • 精华

    73
  • 被关注

    53

论坛等级:奇侠

注册时间:2008-03-11

普通 普通 如何晋级?

发布于 2011-09-04 16:42:07

1楼

楼主:我不是高手,说话没有底气,腿也软啊~~ 不过 我以前做过此类的事情,抓了20次故障发生的时间,依次存入DB20里面。DB20如下图


当OB80第一次触发执行时,我们并不需要去读#OB80_DATE_TIME这个值,可以直接在OB80里面读取当前系统时间,储存到DB20里面,也就是说这个当前读取的时间就是故障发生时的时间。将这个当前读取的系统时间存储到DB20里面。第二次OB80触发执行时,再把当前的故障发生的时间存储到第二次对应的地址。依次类推······
楼主可以参考下面的代码:
//╬╬╬╬╬在OB100、OB101里面写点下面的代码╬╬╬╬╬
L P#0.0 //初始化地址
T MD 100 //存储到MD100里面
T MD 104 //存储到MD104里面
//╬╬╬在OB80读取此时的系统时间(故障发生的时间)╬╬╬
//╬╬╬并将故障发生的时间存储到此DB块对应的地址╬╬╬
//总共能存储20次故障时间,超过20次又从第一次开始记录
//╬╬╬╬╬╬╬╬╬在OB80里面写点如下代码╬╬╬╬╬╬╬╬
CALL "e;READ_CLK"e;
RET_VAL:=LW20
CDT :="e;TEST"e;.SYS_TIME_OF_CURRENT

OPN "e;TEST"e;
LAR1 MD 100
LAR2 MD 104
L 8 //读取8个字节
NEXT: T LW 24
L DBB [AR1,P#0.0] //当前系统故障的时间
T DBB [AR2,P#8.0] //存储当前系统故障的时间
+AR1 P#1.0
+AR2 P#1.0
L LW 24
LOOP NEXT
L P#0.0 //初始化地址
T MD 100 //存储到MD100里面
TAR2 MD 104 //存储到MD104里面
TAR2
L P#168.0
>=D //如果超过20个记录
JC M001 //跳转到M001
JU END
M001: L P#0.0 //初始化地址
T MD 104 //存储到MD104里面
END: NOP 0
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
楼主:上面代码已测试,读取DB20里面的时间你就自己写吧,应该比较简单了,就是相应地址里面的内容转换成BCD码就可以了!(仅供参考)
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54705条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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