新聞中心

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

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

作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
日前在論壇上看到網(wǎng)友的一個帖子,內(nèi)容是比較當(dāng)前時間是否在22:00:00和05:00:00之間,從字面上看 05:00:00應(yīng)該是第二天凌晨。網(wǎng)友的比較方法是把時間上下限和當(dāng)前時間轉(zhuǎn)換為字符串,然后進(jìn)行比較,下面是他的程序框圖,因?yàn)樵谶壿嬌洗嬖趩栴},所以引起了熱烈的討論。

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

本文引用地址:http://butianyuan.cn/article/201701/337289.htm

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

不是的,那個只要時間小于2比如說1:10:50,因?yàn)樗牡谝粋€數(shù)字比2小,輸出就不對

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

我個人認(rèn)為這位網(wǎng)友的看法是對的,我們知道字符串是逐個字符比較的,它實(shí)際上比較的是字符的ASCII值。“5”和“22”進(jìn)行字符串比較,那么5>22,因?yàn)?>2,這對數(shù)字比較來說是不符合邏輯的。

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

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

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

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

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

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

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

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

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

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

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

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


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



評論


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

關(guān)閉