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