[AB] AB PLC | 将故障时间戳转换为日期时间

[复制链接]
查看55419 | 回复0 | 2024-7-25 09:19:04 | 显示全部楼层 |阅读模式
前言:在发表了《如何避免CPU在发生故障时停机》之后,有朋友在后台留言:如何获取并显示发生故障的时间?在那篇文章中,只提及到了存储故障时间戳是由2个DINT数据组成,无法直观的显示为yyyy-mm-dd hh:mm:ss时间格式。那么,本文来说说如何实现获取并直观显示发生故障的时间。

时间戳定义

由于存储故障发生的时间为时间戳格式,首先了解一下什么是时间戳?

1. 定义:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,如下图所示:



2. 时间戳通常是一个字符序列,唯一地标识某一刻的时间,一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据;

3. 广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面.

故障时间戳

1. 在《如何避免CPU在发生故障时停机》文章中,获取的主故障信息,包括了故障时间戳,由2个DINT数据组成为1个64位的时间戳.



2. 发生主故障时,将其发生的时间记录下来,如下图,其中:Time_Low为-401804333,Time_High为362541,均为十进制数据,无法直观的显示为日期时间格式。



获取故障时间

在《如何避免CPU在发生故障时停机》的程序里面,继续下面的操作。
1. 新建一个自定义的日期时间数据类型.



2. 在控制器标签域内新建3个变量,均用于存储发生故障的时间:

(1)FaultDateTime:数据类型UDT_DateTime;

(2)FaultTime_unit_ms:数据类型LINT,类型为Date/Time;

(3)FaultTime_unit_us:数据类型LINT,类型为Date/Time.



3. 在清除故障的例程Fault里面,编写获取发生故障时间的程序,详见下图.



方法介绍

1. 方法一:使用COP指令,将Time_Low和Time_High,2个DINT(8个字节)数据复制到1个LINT数据(FaultTime_unit_us)里,这样就能完整的显示发生故障的日期时间了.


2. 方法二:使用GSV指令,获取TimeSynchronize的当前时间CurrentTimeMicrosecond.



3. 方法三:使用GSV指令,获取WallClockTime的当地日期时间.



模拟故障测试

模拟间接寻址数组维度超过范围,发生故障类型4、代码20的主故障,使用上面介绍的三种方法,均能获取并显示发生故障的精精确间(us级别).


结束语:本文介绍了获取并显示故障时间的三种方法,这样对控制器发生故障或指令执行出错的时间进行追溯,以便找出问题所在。



【AB PLC工作室】

微信公众号ID:abseme

      坚持原创  注重实用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则