新聞中心

EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > LABVIEW編程技巧——如何比較系統(tǒng)時間

LABVIEW編程技巧——如何比較系統(tǒng)時間

作者: 時間:2017-02-27 來源:網(wǎng)絡(luò) 收藏

  如何比較當(dāng)前時間是否在22:00:00和05:00:00之間?從字面上看05:00:00應(yīng)該是第二天凌晨。有人的比較方法是把時間上下限和當(dāng)前時間轉(zhuǎn)換為字符串,然后進行比較,下面是他的程序框圖,因為在邏輯上存在問題,所以引起了熱烈的討論。

  獲取系統(tǒng)時間使得時間在22:00:00之后到5:00:00之前燈亮,但是其他時間都對的,為什么在0:00:00~2:00:00之間就不對呢?

  似乎是4:59:59那里的冒號是使用了中文輸入法的冒號,而那個節(jié)點輸出的時候是使用英文輸入法下的冒號的,所以比較時就出錯了。

  不是的,那個只要時間小于2比如說1:10:50,因為它的第一個數(shù)字比2小,輸出就不對

  后面還有一些相關(guān)的回復(fù)就不摘錄了,討論到后來一位朋友提出了意見“感覺這個思路不是很好”

  我個人認為這位朋友的看法是對的,我們知道字符串是逐個字符比較的,它實際上比較的是字符的ASCII值。“5”和“22”進行字符串比較,那么5>22,因為5>2,這對數(shù)字比較來說是不符合邏輯的。

  Labview中的時間本身是數(shù)值,任何編程語言都會定義一個0時刻,當(dāng)前時間為從那個0時刻開始后經(jīng)過的秒數(shù)。LV作為面向工程實踐的編程語言,有關(guān)時間操作函數(shù)非常豐富,因此使用“數(shù)值”比較更容易理解、不容易發(fā)生錯誤。

  我們知道,目前LV有三種不同的方式表示時間,三者之間可以自由轉(zhuǎn)換:

  1、直接利用秒,自0時刻開始經(jīng)歷過的秒數(shù)。

  上圖所示的就是LabVIEW定義的0時刻時間,這個時間是時區(qū)相關(guān)的。

  2、時間標(biāo)識符,時間標(biāo)識符可能是在LV8.0之后才出現(xiàn)的,是LV專門為時間操作提供的新的控件,如上圖所示。其時間精度比直接使用秒數(shù)要高。

  3、時間簇表示。時間簇表示是我們最為常用的時間表示法,簇的數(shù)據(jù)結(jié)構(gòu)如下圖所示:

  回過頭來看看大家所提的問題,他的目的是要看看當(dāng)前系統(tǒng)時間是否在上上下限范圍之內(nèi)。當(dāng)前系統(tǒng)時間很容易獲得,問題是如何獲取上下限的問題??纯聪旅娴某绦蚩驁D。

  上面的程序框圖中,有兩個重要的技巧,如紅色箭頭所示。

  1、年、月、日、小時可以是相對時間,沒有限制,我們不用考慮24小時,31天等等,LV會自動進行轉(zhuǎn)換。上圖中22+7=29,超過24小時后,LV自動調(diào)整天數(shù)。

  2、判斷范圍并強制轉(zhuǎn)換函數(shù)可以直接使用時間標(biāo)識符作為輸入?yún)?shù)。

  我們知道,時間標(biāo)識符可以直接轉(zhuǎn)換為秒數(shù),更為重要的是時間標(biāo)識符可以直接和數(shù)值進行加減運算,沒有數(shù)值單位時默認為秒,因此上面的程序框圖可以簡化為:

  我曾經(jīng)介紹過時間標(biāo)識符可以直接攜帶單位進行加減運算,因此上述程序框圖可以簡化為:

  注意紅色箭頭部分,h表示小時,這樣就不需要乘以3600,轉(zhuǎn)換為秒了,對于時間比較非常方便。



評論


技術(shù)專區(qū)

關(guān)閉