使用SCL語言開發上升沿(下降沿)指令

1。1沿指令概述

沿指令即在程式中用於檢測訊號的上升沿或下降沿的指令。

在SIMATIC S7-1500和S7-1200 PLC中,選擇程式語言為SCL時,可以看到TIA Portal軟體自帶兩個指令分別用於檢測訊號的上升沿和下降沿,如圖1所示:

圖1

在程式中呼叫R_TRIG或F_TRIG時,系統會自動生成1個背景DB塊,用於存放檢測訊號的邊沿儲存位,當程式中有較多訊號需要檢測上升沿或下降沿時,就會產生多個背景DB塊,這樣一來,過多的背景DB塊不僅僅不便於管理,且會過多佔用CPU寶貴的儲存區。

以SIMATIC S7-1200 PLC為例,儲存區分為工作儲存區,裝載儲存區,保持性儲存區,其中工作儲存區和保持性儲存區不可擴充套件,不同的CPU具有不同大小的儲存區,如圖2所示:

圖2

假設選定S7-1211C進行程式設計,如果在程式中應用了很多R_TRIG或F_TRIG指令,則實際程式需要的工作儲存區有可能超過50kB,此時需要更換工作儲存區更大的PLC來加以解決,所以適當最佳化程式,佔用較少的工作儲存區,十分必要。

本文以S7-1200為例,皆在闡釋如何使用SCL語言開發沿指令以減少工作儲存區使用。

1。2開發檢測上升沿指令

為了不產生背景DB塊,我們在FC中使用SCL語言進行開發,並引入第三方變數作為檢測訊號的邊沿儲存位。

新建FC

新建FC並選擇程式語言為SCL,FC塊命名為:RisingEdgeDetection,如圖3所示:

使用SCL語言開發上升沿(下降沿)指令

圖3

定義介面

根據程式設計需要定義介面變數,並寫明註釋,修改Return變數的資料型別為Bool,用於輸出上升沿訊號,持續一個週期,如圖4所示:

使用SCL語言開發上升沿(下降沿)指令

圖4

程式設計

根據上升沿檢測原理進行程式設計,程式設計思想如下:

當 #signal由0變成1時,此時作為邊沿儲存位的 #thirdVariable仍保留 #singal訊號上一週期的狀態,#thirdVariable為False,此時滿足IF語句,RisingEdgeDetection被賦值為True。

當 #signal由0變成1後的下一週期,#thirdVariable上個週期已被 #signal賦值為相同狀態,即 #thirdVariable和 #signal都為True,則不再滿足IF語言,RisingEdgeDetection被賦值為False。

RisingEdgeDetection輸出持續一個週期。

程式程式碼如圖5所示:

使用SCL語言開發上升沿(下降沿)指令

圖5

1。3開發檢測下降沿指令

與開發檢測上升沿指令類似,新建FC並定義介面變數,這裡不再一一贅述。在程式設計上兩者有所不同,其程式設計思想如下:

當#signal由1變成時,此時作為邊沿儲存位的#thirdVariable仍保留#singal訊號上一週期的狀態,#thirdVariable為True,此時滿足IF語句,FallingEdgeDetection被賦值為True。

當#signal由1變成後的下一週期,#thirdVariable上個週期已被#signal賦值為相同狀態,即#thirdVariable和#signal都為False,則不再滿足IF語言,FallingEdgeDetection被賦值為False。

FallingEdgeDetection輸出持續一個週期。

程式程式碼如圖6所示:

使用SCL語言開發上升沿(下降沿)指令

圖6

1。4功能測試

使用開發完成的功能塊,檢測Q0。0的上升沿和下降沿,程式設計程式碼如圖7所示,Trace時序圖如圖8所示。

其中:

Data。thirdVariable1為檢測上升沿指令所用到的第三方變數;

RisingEdgeDetection為輸出上升沿;

Data。thirdVariable2為檢測下降沿指令所用到的第三方變數;

FallingEdgeDetection為輸出下降沿。

使用SCL語言開發上升沿(下降沿)指令

圖7

使用SCL語言開發上升沿(下降沿)指令

圖8

1。5效果比對

為了更好的說明該自行開發沿指令的優勢,我們分別使用R_TRIG指令和RisingEdgeDetection指令編寫相同的工藝功能程式,透過對比兩者所佔用工作儲存區大小的差異,加以說明。

工藝功能要求:

利用S7-1214C,使用SCL程式語言程式設計,在FB1中實現1000個Bool訊號的上升沿檢測。

1。5。1 使用R_TRIG實現相關工藝功能

使用R_TRIG指令實現過程,如圖9所示。

R_TRIG在FB1中以多重背景形式呼叫,方便R_TRIG背景DB塊的管理。

使用SCL語言開發上升沿(下降沿)指令

圖9

編譯完成後,在程式資訊中檢視儲存區使用情況,如圖10所示,工作儲存區已被佔用10%。Test_IDB為FB1的背景DB塊。

使用SCL語言開發上升沿(下降沿)指令

圖10

1。5。2 使用RisingEdgeDetection實現相關工藝功能

使用RisingEdgeDetection指令實現過程,如圖11所示。

使用SCL語言開發上升沿(下降沿)指令

圖11

編譯完成後,在程式資訊中檢視儲存區使用情況,如圖12所示,工作儲存區已被佔用3%。

Test_IDB為FB1的背景DB塊。Data用於儲存第三方變數,變數型別為Array [0…999] of Bool。

使用SCL語言開發上升沿(下降沿)指令

圖12

1。6總結

從上述分析中,我們可以得出自行開發的沿指令RisingEdgeDetection、FallingEdgeDetection比R_TRIG、F_TRIG指令佔用更少的工作儲存區空間,且適用於SIMATIC S7-1200及S7-1500 PLC。

TAG: 儲存指令TRIG所示RisingEdgeDetection