在數(shù)據(jù)采集時,精準的相對時間是非常重要的。尤其是高速采集時,上位機的軟件(尤其是windows系統(tǒng)里的軟件)很難精準地確定信息的時刻。這時候,如果PLC能夠在提供數(shù)據(jù)時,同時提供一個精準的時間標志(時間戳),將能極大地提高數(shù)據(jù)采集的計時準確性,并降低采集系統(tǒng)的復雜性。
下面將介紹獲取一個精確到微秒的Uint32時間戳的方法。雖然S7-1500已經(jīng)支持64位的整型,但是,考慮到低端的PLC還不支持64位的整型,因此,此處選擇相對通用的32位無符號整型。
PART01 完整程序
程序在準備工作結(jié)束后,進行一次時間戳計算,包括了時鐘獲取、轉(zhuǎn)換等過程。
PART02 將時鐘轉(zhuǎn)換成整型數(shù)
首先讀取時鐘,寫入到一個長時間類型LDT,然后,轉(zhuǎn)成64位無符號整型ULInt。這個轉(zhuǎn)化是無損失的,"timeMeasure".timeNowULInt精確到納秒(ns)。
PART03 獲取相對時間
精確到納秒的時間位數(shù)很長(從1970-1-1開始計算),是無法被32位整數(shù)容納的,因此,此處僅計算其相對時間。起始時間"timeMeasure".timeNowULIntStart在開始通訊,或者PLC啟動時獲取。
PART04 轉(zhuǎn)成微秒(μs),并轉(zhuǎn)成32位無符號整數(shù)
此處截取微秒的部分,并強制轉(zhuǎn)化成32位無符號整數(shù)"dbGen_1024".stamp。
PART05 翻轉(zhuǎn)的問題
用32位無符號整數(shù)表達微秒的時間戳時,由于32位無符號整數(shù)的最大值是4_294_967_295,大概1.2小時就會溢出而自然翻轉(zhuǎn)到0,因此,采集軟件必須注意處理翻轉(zhuǎn)的問題。
PART06 有時間戳采集時的對時機制
由于PLC的對時(調(diào)表)不是很方便,因此,PLC里的絕對時間很可能是原始的時間,因此,我們只利用其準確的相對時間來生成時間戳。
在采集軟件里要進行對時操作(PLC-Recorder是在收到第一個完整電文時,讀取電文內(nèi)的時間戳和系統(tǒng)時間,完成對時,后續(xù)都用相對時間來處理,實際工作時,還要考慮PLC初始化、網(wǎng)絡(luò)中斷等很多其他因素)。
審核編輯:劉清
-
plc
+關(guān)注
關(guān)注
5037文章
13931瀏覽量
474866 -
數(shù)據(jù)采集
+關(guān)注
關(guān)注
40文章
7196瀏覽量
116559 -
上位機
+關(guān)注
關(guān)注
27文章
969瀏覽量
55816 -
S7-1500
+關(guān)注
關(guān)注
3文章
301瀏覽量
6862
原文標題:西門子PLC S7-1500產(chǎn)生精確時間戳及各種數(shù)據(jù)處理的方法
文章出處:【微信號:PLC與自控設(shè)備,微信公眾號:PLC與自控設(shè)備】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問RX23T如何獲取系統(tǒng)時鐘,以便獲取類似時間戳,如何獲取此段代碼運行時間?
1個Uint16和1個Uint32總共占用3字,實際上sizeof返回值為4是為什么?
ulog里現(xiàn)在默認的時間戳是從哪里獲取的呢?
求助,求一個時間戳的RTC示例
可由CR設(shè)定數(shù)微秒~數(shù)十秒時間的通用定時器

UNIX時間戳和北京時間的相互轉(zhuǎn)換

GD32精確延時和時間戳

uCOS-III(2) 時間戳

西門子PLC S7-1500如何獲取精確Uint32時間戳

西門子PLC S7-1500產(chǎn)生精確時間戳及各種數(shù)據(jù)處理的方法

西門子S7-1500產(chǎn)生精確時間戳的方法

評論