前言
很多設(shè)備在實際使用中需要將設(shè)備運行中的部分?jǐn)?shù)據(jù)保存,以便下一次運行時使用。被 保存的數(shù)據(jù)要求在設(shè)備斷電的情況下不丟失,也就是在某些PLC中所稱的“數(shù)據(jù)的掉電保存”,這一功能在Twido PLC可以很方便的實現(xiàn)。
Twido PLC全系列CPU本體中都內(nèi)置有一個可充電的電池,在保證該電池完全充電(PLC連續(xù)通電時間大于15小時)時,并且在PLC的程序中未對%S0做輸出的情況下,PLC內(nèi)部的%MW等中間數(shù)據(jù)全部具有掉電保存功能,保存時間約30天(見圖1);對于TWDLCA*40DRF的CPU本體,通過加裝外部電池TSXPLP01,可將掉電保存時間加長到3年以上;如果設(shè)備掉電的時間很長,或用戶希望掉電后數(shù)據(jù)的保存不依賴于內(nèi)部電池或外部電池,那么可以利用Twido的內(nèi)置Flash來實現(xiàn)數(shù)據(jù)的掉電保存功能。
圖1
具體描述
使用Twido的內(nèi)置Flash來實現(xiàn)數(shù)據(jù)的掉電保存功能需要注意:被保存的數(shù)據(jù)是從%MW0開始的一個長度不超過512的區(qū)間,假定需要對300個數(shù)據(jù)進(jìn)行掉電保存功能,那么要在程序中做合理的規(guī)劃,將要做掉電保存數(shù)據(jù)寄存器集中在%MW0~%MW299區(qū)間內(nèi)。
另外,值得注意的地方是對Flash的寫的操作不太頻繁,如果程序設(shè)計的不合理,可能會對Flash造成永久性損壞。所以,找到合適的將數(shù)據(jù)寫入Flash的條件是非常重要的。
常見的寫數(shù)據(jù)到Flash的條件有很多種,例如當(dāng)數(shù)據(jù)發(fā)生變化時(數(shù)據(jù)變化不頻繁時),或通過人機操作界面的某一個按鍵,或者當(dāng)設(shè)備突然掉電時。在這里,主要介紹一下,當(dāng)設(shè)備突然掉電時將數(shù)據(jù)寫入Flash的方法。
圖2 是一種比較可行的捕捉突然掉電的方法,同樣,對于使用AC220V電源的TWDLCA***DRF的產(chǎn)品也可以使用同樣的方法。
在某些特定的應(yīng)用場合,PLC的電源供給是使用直流24V的蓄電池,如果作為電源供給的蓄電池回路突然中斷,而在這種條件下運行的設(shè)備很可能需要通過蓄電池突然中斷供電的測試,此時圖2中的捕捉電源掉電的方法就無法可靠使用。這時,要實現(xiàn)捕捉電源掉電,需要利用TWIDO的一些內(nèi)部特性,首先來看一下使用DC24V電源的TWDLMDA*****/TWDLCDA**DRF的對供電電源的要求,見圖3。
使用DC24V電源的TWDLMDA*****/TWDLCDA**DRF的允許供電的直流24V電源發(fā)生10ms的中斷,而不會對PLC的運行造成影響,也就是說,在24V電源供給斷開的10ms內(nèi)PLC還可以正常運行,再結(jié)合Twido的外部中斷(I0.2~I0.4,可在1ms內(nèi)檢測到輸入的變化,微型繼電器從線圈斷電到觸點斷開需要4ms,剩余的5ms足夠完成數(shù)據(jù)寫入Flash的程序所需的時間)功能,可以完成電源突然中斷后將數(shù)據(jù)保存的要求。
相應(yīng)的接線及設(shè)置見圖4、圖5及圖6。
圖2
圖3
圖4
圖5
圖6
注意,圖6中要將I0.2的濾波時間設(shè)置為“不使用”,這樣可以使用PLC更快地檢測到微型繼電器的觸點的斷開。
下面是為實現(xiàn)使用DC24V電源的TWDLMDA*****/TWDLCDA**DRF的供電掉電捕捉的Twido的測試程序,程序中使用I0.0、I0.1來改變MW288的數(shù)據(jù),通過Q0.1的輸出來判斷數(shù)據(jù)是否被寫入到Flash。使用這三個輔助點是為了不斷地重復(fù)掉電前數(shù)據(jù)的變化及上電后觀察數(shù)據(jù)是否實現(xiàn)掉電保持功能,實際使用時可去掉這些測試部分內(nèi)容。測試程序中保存MW0到MW299間的300個數(shù)據(jù)寄存器,因數(shù)據(jù)寫入Flash的操作在中斷程序中完成,所以與程序的大小無關(guān),也就是完成保存數(shù)據(jù)的功能與PLC的掃描時間關(guān)系不大。
程序清單:
(* 初始化 *)
LD 1
MPS
AND( %S0
OR %S1
OR %S13
)
ST %S0
ST %M0
MPP
AND %S7
ST %M7
(* 開辟存儲空間 *)
LD 1
[ %MW1000 := 88 ]
STN %M255
(* 初始化后1.5秒,從FLASH中恢復(fù)數(shù)據(jù) *)
BLK %TM127
LDN %M0
IN
OUT_BLK
LD Q
ST %M101
END_BLK
(* 防止頻繁對FLASH寫操作時間限制,時間限制在50MS內(nèi) *)
BLK %TM126
LDN %I0.0.2
IN
END_BLK
(* 恢復(fù)FLASH中的數(shù)據(jù),M101為恢復(fù)條件,開機后1.5秒自動恢復(fù)數(shù)據(jù) *)
(* *)
LDR %M101
[ %SW97 := 300 ]
ST %S95
(* Q0.1為測試指示,I0.1接通%MW288賦值88,Q0.1輸出,斷電后再通電,1.5秒后%Q0.0.1有輸出,說明%MW288保存有效 *)
(* 如檢測數(shù)據(jù)保存有效,接通I0.1,%MW288賦值0,Q0.1無輸出,斷電后再通電,1.5秒后%Q0.0.1無輸出,說明%MW288保存有效 *)
LD 1
MPS
AND %I0.0.0
[ %MW288 := 0 ]
MRD
AND %I0.0.1
[ %MW288 := 88 ]
MPP
AND [ %MW288 = 88 ]
AND %S12
ST %Q0.0.1
(* 主程序結(jié)束 *)
END
(* 數(shù)據(jù)保存子程序,SW97需保存的數(shù)據(jù)區(qū)長度(示范為300,允許范圍1~511) %I0.0.2為保存條件,此處取其下降沿 *)
(* 要保證寫入閃存的條件在正常運行時不能頻繁滿足,否則可能損壞閃存 *)
SR0:
LDN %TM126.Q
[ %SW97 := 300 ]
ANDN %SW96:X10
AND %SW96:X6
ST %SW96:X0
(* 子程序返回 *)
RET
(轉(zhuǎn)載)