楼主:我不是高手,说话没有底气,腿也软啊~~ 不过 我以前做过此类的事情,抓了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码就可以了!(仅供参考)