1.1沿指令概述
在SIMATIC S7-1500和S7-1200 PLC中,選擇編程語言為SCL時,可以看到TIA Portal軟件自帶兩個指令分別用于檢測信號的上升沿和下降沿,如圖1所示:
圖1
在程序中調(diào)用R_TRIG或F_TRIG時,系統(tǒng)會自動生成1個背景DB塊,用于存放檢測信號的邊沿存儲位,當(dāng)程序中有較多信號需要檢測上升沿或下降沿時,就會產(chǎn)生多個背景DB塊,這樣一來,過多的背景DB塊不僅僅不便于管理,且會過多占用CPU寶貴的存儲區(qū)。
以SIMATIC S7-1200 PLC為例,存儲區(qū)分為工作存儲區(qū),裝載存儲區(qū),保持性存儲區(qū),其中工作存儲區(qū)和保持性存儲區(qū)不可擴展,不同的CPU具有不同大小的存儲區(qū),如圖2所示:
圖2
假設(shè)選定S7-1211C進行編程,如果在程序中應(yīng)用了很多R_TRIG或F_TRIG指令,則實際程序需要的工作存儲區(qū)有可能超過50kB,此時需要更換工作存儲區(qū)更大的PLC來加以解決,所以適當(dāng)優(yōu)化程序,占用較少的工作存儲區(qū),十分必要。
本文以S7-1200為例,皆在闡釋如何使用SCL語言開發(fā)沿指令以減少工作存儲區(qū)使用。
1.2開發(fā)檢測上升沿指令
為了不產(chǎn)生背景DB塊,我們在FC中使用SCL語言進行開發(fā),并引入第三方變量作為檢測信號的邊沿存儲位。
新建FC
新建FC并選擇編程語言為SCL,F(xiàn)C塊命名為:RisingEdgeDetection,如圖3所示:
圖3
定義接口
根據(jù)編程需要定義接口變量,并寫明注釋,修改Return變量的數(shù)據(jù)類型為Bool,用于輸出上升沿信號,持續(xù)一個周期,如圖4所示:
圖4
編程
根據(jù)上升沿檢測原理進行編程,編程思想如下:
當(dāng) #signal由0變成1時,此時作為邊沿存儲位的 #thirdVariable仍保留 #singal信號上一周期的狀態(tài),#thirdVariable為False,此時滿足IF語句,RisingEdgeDetection被賦值為True。
當(dāng) #signal由0變成1后的下一周期,#thirdVariable上個周期已被 #signal賦值為相同狀態(tài),即 #thirdVariable和 #signal都為True,則不再滿足IF語言,RisingEdgeDetection被賦值為False。
RisingEdgeDetection輸出持續(xù)一個周期。
程序代碼如圖5所示:
圖5
1.3開發(fā)檢測下降沿指令
與開發(fā)檢測上升沿指令類似,新建FC并定義接口變量,這里不再一一贅述。在編程上兩者有所不同,其編程思想如下:
當(dāng)#signal由1變成0時,此時作為邊沿存儲位的#thirdVariable仍保留#singal信號上一周期的狀態(tài),#thirdVariable為True,此時滿足IF語句,F(xiàn)allingEdgeDetection被賦值為True。
當(dāng)#signal由1變成0后的下一周期,#thirdVariable上個周期已被#signal賦值為相同狀態(tài),即#thirdVariable和#signal都為False,則不再滿足IF語言,F(xiàn)allingEdgeDetection被賦值為False。
FallingEdgeDetection輸出持續(xù)一個周期。
程序代碼如圖6所示:
圖6
1.4功能測試
使用開發(fā)完成的功能塊,檢測Q0.0的上升沿和下降沿,編程代碼如圖7所示,Trace時序圖如圖8所示。
其中:
Data.thirdVariable1為檢測上升沿指令所用到的第三方變量;
RisingEdgeDetection為輸出上升沿;
Data.thirdVariable2為檢測下降沿指令所用到的第三方變量;
FallingEdgeDetection為輸出下降沿。
圖7
圖8
1.5效果比對
為了更好的說明該自行開發(fā)沿指令的優(yōu)勢,我們分別使用R_TRIG指令和RisingEdgeDetection指令編寫相同的工藝功能程序,通過對比兩者所占用工作存儲區(qū)大小的差異,加以說明。
工藝功能要求:
利用S7-1214C,使用SCL編程語言編程,在FB1中實現(xiàn)1000個Bool信號的上升沿檢測。
1.5.1使用R_TRIG實現(xiàn)相關(guān)工藝功能
使用R_TRIG指令實現(xiàn)過程,如圖9所示。
R_TRIG在FB1中以多重背景形式調(diào)用,方便R_TRIG背景DB塊的管理。
圖9
編譯完成后,在程序信息中查看存儲區(qū)使用情況,如圖10所示,工作存儲區(qū)已被占用10%。Test_IDB為FB1的背景DB塊。
圖10
1.5.2使用RisingEdgeDetection實現(xiàn)相關(guān)工藝功能
使用RisingEdgeDetection指令實現(xiàn)過程,如圖11所示。
圖11
編譯完成后,在程序信息中查看存儲區(qū)使用情況,如圖12所示,工作存儲區(qū)已被占用3%。
Test_IDB為FB1的背景DB塊。Data用于存儲第三方變量,變量類型為Array [0…999] of Bool。
圖12
1.6總結(jié)
從上述分析中,我們可以得出自行開發(fā)的沿指令RisingEdgeDetection、FallingEdgeDetection比R_TRIG、F_TRIG指令占用更少的工作存儲區(qū)空間,且適用于SIMATIC S7-1200及S7-1500 PLC。
審核編輯:湯梓紅
-
plc
+關(guān)注
關(guān)注
5008文章
13151瀏覽量
462088 -
指令
+關(guān)注
關(guān)注
1文章
607瀏覽量
35651 -
SIMATIC
+關(guān)注
關(guān)注
1文章
231瀏覽量
15716 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
17038 -
S7-1500
+關(guān)注
關(guān)注
3文章
300瀏覽量
6344
原文標(biāo)題:1.1
文章出處:【微信號:中泰PLC自動化教學(xué),微信公眾號:中泰PLC自動化教學(xué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論