很多情況下我們都需要根據(jù)時(shí)間日期的變化來(lái)改變自動(dòng)化系統(tǒng)的控制方式,這時(shí)候我們就需要將這些時(shí)間和日期的信息,從PLC中調(diào)出,下面我們就一起來(lái)學(xué)習(xí),S7-300PLC是將時(shí)間日期信息如何進(jìn)行存儲(chǔ)的?
簡(jiǎn)單應(yīng)用
01
S7-300PLC中實(shí)際上系統(tǒng)的時(shí)間日期信息是存儲(chǔ)在主程序OB1的本地?cái)?shù)據(jù)中,具體位置是OB1的LB12到LB18,分別存儲(chǔ)的是年、月、日、小時(shí)、分鐘、秒、毫秒、信息如圖 1-1所示:
那么我們?nèi)绻枰獙?duì)這些信息進(jìn)行提取最簡(jiǎn)單的方法就是使用MOVE指令把這些L區(qū)的數(shù)據(jù)讀到其他區(qū)域比如說(shuō)M區(qū)如圖 1-2所示:
這里我們必須要注意所有時(shí)間的顯示都是以16進(jìn)制的方式而不是10進(jìn)制的方式顯示的。
高級(jí)應(yīng)用
02
一、數(shù)據(jù)類型:DATE_AND_TIME
DATE_AND_TIME是Step7四種復(fù)雜數(shù)據(jù)類型(DATE_AND_TIME、STRING、ARRAY及STRUCT)的一種,表示由日期和時(shí)間組成的時(shí)間,可以使用縮寫DT來(lái)代替DATE_AND_TIME。
DATE_AND_TIME變量由8個(gè)字節(jié)構(gòu)成,分別代表年、月、日、時(shí)、分、秒、毫秒,最后一個(gè)字節(jié)0-3位代表星期,4-7位表示毫秒,數(shù)據(jù)以BCD碼表示。如圖1所示,為DATE_AND_TIME的數(shù)據(jù)格式。
DATE_AND_TIME數(shù)據(jù)類型的取值范圍為:
最小:DT#1900-01-01-000.000
最大:DT#2089-12-31-2359.999
二、設(shè)置系統(tǒng)時(shí)鐘
1、在聯(lián)機(jī)的情況下,通過(guò)STEP7軟件菜單指令直接設(shè)定系統(tǒng)時(shí)鐘,如圖2.1、圖2.2、圖2.3所示。(前提:PG/PC要與實(shí)際PLC聯(lián)網(wǎng),或打開(kāi)仿真器PLCSIM,即要處于"聯(lián)機(jī)"狀態(tài))
圖2.1 菜單命令設(shè)定系統(tǒng)時(shí)鐘(一)
圖2.2 菜單命令設(shè)定系統(tǒng)時(shí)鐘(二)
圖2.3 菜單命令設(shè)定系統(tǒng)時(shí)鐘(三)
上述三種方法,都會(huì)彈出"設(shè)置時(shí)鐘"的對(duì)話框,如圖3所示,勾選"來(lái)自PG/PC",使用計(jì)算機(jī)時(shí)鐘來(lái)同步PLC時(shí)鐘。
圖3 與PG/PC時(shí)鐘同步
2、使用SFC0設(shè)置系統(tǒng)時(shí)間
除了使用PG/PC來(lái)同步系統(tǒng)時(shí)鐘外,我么也可以使用系統(tǒng)功能SFC0來(lái)自定義系統(tǒng)時(shí)鐘,方法如下:
1) 首先,創(chuàng)建一個(gè)DB塊,如:DB20。并在其中定義一個(gè)DATE_AND_TIME變量。
圖4 定義DATE_AND_TIME變量
2) 在OB1中編寫代碼,將參考時(shí)間以16進(jìn)制BCD碼的形式賦值給DATE_AND_TIME變量的各個(gè)字節(jié)。第7個(gè)字節(jié)包含毫秒的個(gè)位值及星期,一般不需要設(shè)定,系統(tǒng)會(huì)根據(jù)給定的年、月、日來(lái)自己計(jì)算星期值并賦值。如圖5所示。
圖5 為DATE_AND_TIME變量賦值
有很多初學(xué)者在這里常常會(huì)犯疑惑,為什么此時(shí)"ref_time"中的星期數(shù)不對(duì)呢?(如圖5所示)。其實(shí),ref_time中并不會(huì)顯示當(dāng)前的星期數(shù),我們需要重新讀取系統(tǒng)時(shí)鐘,才能獲得正確的星期值,這點(diǎn)我們將在接下來(lái)的"讀取系統(tǒng)時(shí)鐘"中繼續(xù)討論(圖7、圖9)。
3) 調(diào)用SFC0,將定義好的DATE_AND_TIME變量值(這里為DB20中的"ref_time")設(shè)定為系統(tǒng)時(shí)鐘,如圖5所示。當(dāng)M0.0檢測(cè)到上升沿信號(hào)后,系統(tǒng)的時(shí)鐘將變?yōu)?time.ret_time"所指定的值,本例中為:2018-12-30 1420。
圖5 調(diào)用SFC0,自定義系統(tǒng)時(shí)鐘
三、讀取系統(tǒng)時(shí)鐘
1、使用OB1中的臨時(shí)量 “OB1_DATE_TIME"來(lái)讀取系統(tǒng)時(shí)鐘;
OB1中定義了名為"OB1_DATE_TIME"的臨時(shí)變量,如圖6所示。OB1的每個(gè)掃描周期都會(huì)讀取系統(tǒng)時(shí)鐘,并存儲(chǔ)到"OB1_DATE_TIME"中。因此,通過(guò)該臨時(shí)變量即可得到系統(tǒng)時(shí)鐘。
圖6 臨時(shí)變量:"OB1_DATE_TIME"
圖7 通過(guò)"OB1_DATE_TIME"讀取系統(tǒng)時(shí)鐘
2、調(diào)用SFC1來(lái)讀取系統(tǒng)時(shí)鐘
系統(tǒng)功能SFC1是專門用來(lái)讀取系統(tǒng)時(shí)鐘的,程序如如8所示。讀取的系統(tǒng)時(shí)鐘值存放于DB20中DBX8.0開(kāi)始的8個(gè)字節(jié)空間中,如圖9所示。
圖8 調(diào)用SFC1來(lái)讀取系統(tǒng)時(shí)鐘
圖9 調(diào)用SFC1來(lái)讀取系統(tǒng)時(shí)鐘
結(jié)合圖7、圖9,我們就可以解開(kāi)圖5的疑惑了。我們自定義的系統(tǒng)時(shí)鐘后,系統(tǒng)會(huì)自動(dòng)計(jì)算出"星期值",我們讀取當(dāng)前系統(tǒng)時(shí)鐘時(shí),自然會(huì)讀出正確的"星期值",因此,在給定系統(tǒng)時(shí)間時(shí),僅需要給出年、月、日、小時(shí)、分鐘、秒即可。
審核編輯:劉清
-
plc
+關(guān)注
關(guān)注
5008文章
13167瀏覽量
462199 -
S7-300
+關(guān)注
關(guān)注
8文章
225瀏覽量
34249
原文標(biāo)題:干貨分享 | PLC時(shí)間日期還能這樣讀取?
文章出處:【微信號(hào):你身邊的機(jī)器人專家,微信公眾號(hào):你身邊的機(jī)器人專家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論