/1/ 概述
SCL(結(jié)構(gòu)化控制語言)是一種基于PASCAL的高級編程語言。隨著S7-1200/1500的普及,以及PLC編程中大量引入IT編程思想和編程理念,SCL在西門子PLC中使用的比重越來越大。
SCL 在復雜編程、數(shù)學運算、間接尋址等方面相對傳統(tǒng)的梯形圖(LAD)有著絕對的優(yōu)勢,即使是位邏輯控制也有其自身的特點。
下面介紹幾個SCL非常有用但又不太為人所知的技巧供大家參考。
/2/ 如何改變塊接口參數(shù)顯示模式?
經(jīng)常有客戶問,在TIA Portal 的SCL編輯器中,如何展示出像經(jīng)典STEP 7里面SCL源文件那樣的文本式塊接口參數(shù),如圖1所示。這種方式編輯起來更加靈活,也可以像文本一樣復制粘貼。
圖 1. 文本式塊接口參數(shù)
其實,您會發(fā)現(xiàn)圖1中輸入?yún)?shù)數(shù)據(jù)類型Array[*]不是 S7-300/400 能支持的數(shù)據(jù)類型,也就是說其實上面圖1是在TIA Portal中編輯的,那這是如何實現(xiàn)呢?答案非常簡單,只要使用TIA Poral V15.1及其以上的版本,然后進行如圖2所示的設(shè)置就可以實現(xiàn)。
圖 2. 設(shè)置塊接口形式
設(shè)置過后,新建的SCL塊的接口形式就是文本式的了。那怎么修改已有SCL塊的接口形式呢?我們可以通過將塊導出源文件然后再導入源文件的方式來進行改變。有了這個設(shè)置,就可以根據(jù)需要自由選擇塊接口參數(shù)顯示形式了。
/3/ 如何進行循環(huán)程序的調(diào)試?
SCL的一大特色就是非常適合循環(huán)程序編寫,如果再配合上間接尋址那就更是如虎添翼。
但是隨之而來的是調(diào)試問題,很少有人能一次性寫出完全沒有錯誤的程序,總會有各式各樣的問題,而通過監(jiān)視功能,只能像如圖3所示的那樣,最多監(jiān)視1次循環(huán)。
圖3. 監(jiān)視循環(huán)
如何解決這個問題呢?
有高級語言開發(fā)經(jīng)驗的人知道,此時應(yīng)該使用斷點調(diào)試功能來解決。是的,S7-1500從TIA Portal V15,固件版本V2.5開始支持SCL的斷點調(diào)試。有了這個功能,就可以非常方便地調(diào)試循環(huán)內(nèi)的程序執(zhí)行情況。具體步驟:
1.首先,在需要監(jiān)視的循環(huán)語句那行最左邊灰色區(qū)域位置左鍵單擊,此時會出現(xiàn)一個小圓點,這就是斷點,如圖4所示。
圖4. 監(jiān)視程序及斷點
2.然后監(jiān)視程序,并激活監(jiān)視菜單中“監(jiān)視循環(huán)”。如圖3所示。
3.在右邊測試側(cè)邊欄中的“斷點”里面,左鍵選中指定斷點,然后點擊“啟用/禁用斷點”并確認。如圖5所示。
圖5. 啟用斷點
4. 這時,在側(cè)邊欄中的“斷點”里面,每次點擊圖6紅色方框中的運行按鈕,就可以看到監(jiān)視值的變化,如圖7所示。
圖6. 點擊運行
圖7. 監(jiān)視值變化
過程就是這樣簡單。有了這個方法,再復雜的程序調(diào)試起來也是易如反掌,并且這種方法對循環(huán)外的程序也是一樣好用。
/4/順序控制能否用 SCL 來編寫?
對于復雜的順序控制,西門子推薦使用Graph編程語言。這個專用于順控控制的語言功能強大,使用直觀,還便于和HMI互動。而對于一些簡單的順序控制,可以通過LAD/FBD去搭建邏輯,通過斷開使能、置位復位相關(guān)變量也可以實現(xiàn)。那可不可以使用SCL來實現(xiàn)該功能呢?
答案是可以的。不僅可以,而且現(xiàn)在西門子官方有越來越多庫的順序控制部分都是通過SCL來實現(xiàn)的。并且結(jié)構(gòu)清晰,易于修改,還相對Graph使用更少的程序資源。
那是如何實現(xiàn)的呢?
答案很簡單,通過CASE OF指令就可以實現(xiàn)。有些小伙伴就會納悶了,CASE OF不就是判斷某個變量為幾的時候,執(zhí)行某些動作嗎?感覺和順控沒有任何聯(lián)系。
不不不,聯(lián)系很大,判斷某個變量為幾,可以當做判斷目前到了哪一步,執(zhí)行某些動作,我們可以當做執(zhí)行該步驟時執(zhí)行的動作。除此以外,還可以在步驟中加上判斷是否滿足跳轉(zhuǎn)條件,然后修改步驟號。這樣一個簡單的順控邏輯框架就搭建起來了。
當然了,一個完整的順控還需要考慮順控如何開始,如何斷電保持,如何報警以及復位,如何控制輸出等功能,這些可以通過相關(guān)邏輯或設(shè)置進行實現(xiàn)。
話不多說,可以看一下基于這個方法編的Modbus TCP輪詢功能,如圖8和9所示,是不是比自己之前LAD編的更加清晰直觀???是不是在這之前,根本沒覺得順控和通信輪詢有聯(lián)系?
圖8. 接口參數(shù)
圖9-1. 程序示例
圖9-2. 程序示例
怎么樣?是不是有種豁然開朗的感覺?是不是有種沖動,想趕緊看看自己的項目有沒有可以改造成順控的程序,然后使用SCL重新編寫。那就趕緊行動吧。
/5/如何把SCL程序分段
現(xiàn)在的生產(chǎn)工藝越來越復雜,甲方提的要求也是越來越多,于是程序代碼是越來越長,即使是用SCL來寫,也是占滿了程序編輯器的。和LAD這種自帶網(wǎng)絡(luò)段的編程語言不同,SCL作為文本語言,本身就是不分段的,正常只能通過空行或者加注釋行分隔,但是程序結(jié)構(gòu)依然不是很清晰。
不過不要緊,我們現(xiàn)在鄭重向您推薦一個分段神器,它使用簡單,效果顯著,功能強大,那就是—REGION指令。
從 TIA Portal V14開始,支持通過REGION指令來實現(xiàn)分區(qū)分段功能。并且可以實現(xiàn)區(qū)域命名,區(qū)域折疊,區(qū)域定位,區(qū)域嵌套等多個功能。V16以后甚至可以做到區(qū)域名稱多語言的功能。如圖10所示,展示了不同區(qū)域功能的使用。
圖10. 區(qū)域功能使用
有了這個功能,就可以輕松地把復雜的程序劃分成若干個區(qū)域,在編輯器左側(cè)自由地管理分區(qū)。輕松地定位到需要的位置,折疊暫時不需要顯示的區(qū)域。程序架構(gòu)也是一目了然,程序也更加易讀。