概述
收集数据时,准确的相对时间非常重要。尤其是在高速采集时,上位机软件(尤其是Windows系统中的软件)很难准确判断信息的时刻。这时,如果PLC在提供数据时能够提供准确的时间标记(时间戳),将大大提高数据采集的计时精度,降低采集系统的复杂度。下面介绍获取精确到微秒的Uint32时间戳的详细步骤。虽然S7-1500已经支持64位整数,但考虑到低端PLC尚不支持64位整数,所以这里选择了相对常见的32位无符号整数。 PART01完整程序准备工作完成后,程序进行时间戳计算,包括时钟采集、转换等过程。
PART02 将时钟转换为整数
首先读取时钟,写入长期类型LDT,然后转换为64位无符号整数ULInt。此转换是无损的,并且'timeMeasure'.timeNowULInt 精确到纳秒(ns)。
PART03 获取相对时间
精确到纳秒的时间位数非常长(从1970-1-1开始计算),无法用32位整数容纳,所以这里只计算它的相对时间。开始时间'timeMeasure'.timeNowULIntStart 在通信开始或PLC 启动时获取。
PART04 转换为微秒(s)并转换为32 位无符号整数。这里,微秒部分被截取并强制转换为32位无符号整数'dbGen_1024'.stamp。
PART05 翻转问题当使用32位无符号整数表示微秒时间戳时,由于32位无符号整数的最大值为4_294_967_295,因此会溢出并在1.2小时左右自然翻转为0。因此,采集软件一定要注意处理翻转。问题。
PART06在收集时间戳时有时间同步机制
由于PLC时间调整(表调整)不太方便,PLC中的绝对时间很可能是原始时间。因此,我们仅使用其准确的相对时间来生成时间戳。
采集软件中需要进行时间同步操作(PLC-Recorder在收到第一个完整报文时读取报文中的时间戳和系统时间,完成时间同步,并使用相对时间进行后续处理。实际工作时间,还要考虑许多其他因素,例如PLC初始化、网络中断等)。
审稿人:李茜