S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

瞭解了S5定時器、IEC定時器之後,我們有必要繼續瞭解STEP7中有關“時間”的概念,今天,我們瞭解一下數據類型
DATE_AND_TIME及系統時鐘。


一、數據類型:DATE_AND_TIME

DATE_AND_TIME是Step7四種複雜數據類型(DATE_AND_TIME、STRING、ARRAY及STRUCT)的一種,表示由日期和時間組成的時間,可以使用縮寫DT來代替DATE_AND_TIME。

DATE_AND_TIME變量由8個字節構成,分別代表年、月、日、時、分、秒、毫秒,最後一個字節0-3位代表星期,4-7位表示毫秒,數據以BCD碼錶示。如圖1所示,為DATE_AND_TIME的數據格式。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖1 DATE_AND_TIME的數據格式

DATE_AND_TIME數據類型的取值範圍為:

最小:DT#1900-01-01-0:00:00.000

最大:DT#2089-12-31-23:59:59.999


二、設置系統時鐘

1、在聯機的情況下,通過STEP7軟件菜單指令直接設定系統時鐘,如圖2.1、圖2.2、圖2.3所示。(前提:PG/PC要與實際PLC聯網,或打開仿真器PLCSIM,即要處於"聯機"狀態)

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖2.1 菜單命令設定系統時鐘(一)

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖2.2 菜單命令設定系統時鐘(二)

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖2.3 菜單命令設定系統時鐘(三)

上述三種方法,都會彈出"設置時鐘"的對話框,如圖3所示,勾選"來自PG/PC",使用計算機時鐘來同步PLC時鐘。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖3 與PG/PC時鐘同步

2、使用SFC0設置系統時間

除了使用PG/PC來同步系統時鐘外,我麼也可以使用系統功能SFC0來自定義系統時鐘,方法如下:

1) 首先,創建一個DB塊,如:DB20。並在其中定義一個DATE_AND_TIME變量。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖4 定義DATE_AND_TIME變量

2) 在OB1中編寫代碼,將參考時間以16進制BCD碼的形式賦值給DATE_AND_TIME變量的各個字節。第7個字節包含毫秒的個位值及星期,一般不需要設定,系統會根據給定的年、月、日來自己計算星期值並賦值。如圖5所示。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖5 為DATE_AND_TIME變量賦值

有很多初學者在這裡常常會犯疑惑,為什麼此時"ref_time"中的星期數不對呢?(如圖5所示)。其實,ref_time中並不會顯示當前的星期數,我們需要重新讀取系統時鐘,才能獲得正確的星期值,這點我們將在接下來的"讀取系統時鐘"中繼續討論(圖7、圖9)。

3) 調用SFC0,將定義好的DATE_AND_TIME變量值(這裡為DB20中的"ref_time")設定為系統時鐘,如圖5所示。當M0.0檢測到上升沿信號後,系統的時鐘將變為"time.ret_time"所指定的值,本例中為:2018-12-30 14:39:20。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖5 調用SFC0,自定義系統時鐘


三、讀取系統時鐘

1、使用OB1中的臨時變量"OB1_DATE_TIME"來讀取系統時鐘

OB1中定義了名為"OB1_DATE_TIME"的臨時變量,如圖6所示。OB1的每個掃描週期都會讀取系統時鐘,並存儲到"OB1_DATE_TIME"中。因此,通過該臨時變量即可得到系統時鐘。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖6 臨時變量:"OB1_DATE_TIME"

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖7 通過"OB1_DATE_TIME"讀取系統時鐘

2、調用SFC1來讀取系統時鐘

系統功能SFC1是專門用來讀取系統時鐘的,程序如如8所示。讀取的系統時鐘值存放於DB20中DBX8.0開始的8個字節空間中,如圖9所示。

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖8 調用SFC1來讀取系統時鐘

S7-300/400進階筆記13:深入瞭解DATE_AND_TIME以及系統時鐘

圖9 調用SFC1來讀取系統時鐘

結合圖7、圖9,我們就可以解開圖5的疑惑了。我們自定義的系統時鐘後,系統會自動計算出"星期值",我們讀取當前系統時鐘時,自然會讀出正確的"星期值",因此,在給定系統時間時,僅需要給出年、月、日、小時、分鐘、秒即可。


分享到:


相關文章: