LABVIEW編程技巧——如何比較系統時間
如何比較當前時間是否在22:00:00和05:00:00之間?從字面上看05:00:00應該是第二天凌晨。有人的比較方法是把時間上下限和當前時間轉換為字符串,然后進行比較,下面是他的程序框圖,因為在邏輯上存在問題,所以引起了熱烈的討論。
獲取系統時間使得時間在22:00:00之后到5:00:00之前燈亮,但是其他時間都對的,為什么在0:00:00~2:00:00之間就不對呢?
似乎是4:59:59那里的冒號是使用了中文輸入法的冒號,而那個節點輸出的時候是使用英文輸入法下的冒號的,所以比較時就出錯了。
不是的,那個只要時間小于2比如說1:10:50,因為它的第一個數字比2小,輸出就不對
后面還有一些相關的回復就不摘錄了,討論到后來一位朋友提出了意見“感覺這個思路不是很好”
我個人認為這位朋友的看法是對的,我們知道字符串是逐個字符比較的,它實際上比較的是字符的ASCII值?!?”和“22”進行字符串比較,那么5>22,因為5>2,這對數字比較來說是不符合邏輯的。
Labview中的時間本身是數值,任何編程語言都會定義一個0時刻,當前時間為從那個0時刻開始后經過的秒數。LV作為面向工程實踐的編程語言,有關時間操作函數非常豐富,因此使用“數值”比較更容易理解、不容易發生錯誤。
我們知道,目前LV有三種不同的方式表示時間,三者之間可以自由轉換:
1、直接利用秒,自0時刻開始經歷過的秒數。

上圖所示的就是LabVIEW定義的0時刻時間,這個時間是時區相關的。
2、時間標識符,時間標識符可能是在LV8.0之后才出現的,是LV專門為時間操作提供的新的控件,如上圖所示。其時間精度比直接使用秒數要高。
3、時間簇表示。時間簇表示是我們最為常用的時間表示法,簇的數據結構如下圖所示:

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

上面的程序框圖中,有兩個重要的技巧,如紅色箭頭所示。
1、年、月、日、小時可以是相對時間,沒有限制,我們不用考慮24小時,31天等等,LV會自動進行轉換。上圖中22+7=29,超過24小時后,LV自動調整天數。
2、判斷范圍并強制轉換函數可以直接使用時間標識符作為輸入參數。
我們知道,時間標識符可以直接轉換為秒數,更為重要的是時間標識符可以直接和數值進行加減運算,沒有數值單位時默認為秒,因此上面的程序框圖可以簡化為:

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

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