問題1:如何監(jiān)視循環(huán)指令?
正常監(jiān)視如圖1所示,無法監(jiān)控到循環(huán)程序內(nèi)部的執(zhí)行情況。
圖1 監(jiān)視頁面
①點擊監(jiān)視按鈕
②可以看到FOR循環(huán)內(nèi)部沒有任何變量顯示
如果希望監(jiān)視循環(huán)內(nèi)部執(zhí)行情況,可以在監(jiān)視中的SCL程序任意位置,如圖2中操作。
圖2 點擊監(jiān)視循環(huán)
激活監(jiān)視循環(huán)后,跳出窗口如圖3所示,點擊按鈕“是”。
圖3 警告窗口
之后,就可以如圖4所示的,看到循環(huán)內(nèi)的情況,不過這會造成增加CPU循環(huán)時間,并且只能監(jiān)控到第一個循環(huán)。
圖4 監(jiān)視循環(huán)
問題2:CASE指令如何實現(xiàn)順控功能?
通過CASE OF指令,可以比較容易實現(xiàn)類似順控的功能,并且編程方法便捷、可讀性較好??梢允褂妙愃朴谙旅娴木幊谭绞綄崿F(xiàn)類似順控的功能:
CASE 步驟號 OF //Int類型步驟號,一般位于FB的Static
0:
步驟0
邏輯編程 //一般初始步不執(zhí)行具體操作,只是初始化,然后是等待開始
IF 條件 THEN
步驟號:=1;
ELSIF 錯誤 THEN
步驟號:=100;
END_IF;
1:
步驟1
邏輯編程
置位復(fù)雜指令i.REQ
IF 復(fù)雜指令i.DONE THEN
復(fù)位復(fù)雜指令i.REQ
步驟號:=2;
ELSIF 復(fù)雜指令i.ERROR
復(fù)位復(fù)雜指令i.REQ
步驟號:=100;
END_IF;
2:
步驟2
邏輯編程
置位復(fù)雜指令m.REQ
IF 復(fù)雜指令m.DONE THEN
復(fù)位復(fù)雜指令m.REQ
步驟號:=3;
ELSIF 復(fù)雜指令m.ERROR
復(fù)位復(fù)雜指令m.REQ
步驟號:=100;
END_IF;
.
.
.
n:
步驟n
邏輯編程
置位復(fù)雜指令x.REQ
IF 復(fù)雜指令x.DONE THEN
復(fù)位復(fù)雜指令x.REQ
步驟號:=n+1;
ELSIF 復(fù)雜指令x.ERROR
復(fù)位復(fù)雜指令x.REQ
步驟號:=100;
END_IF;
.
.
.
100:
錯誤處理 邏輯編程
步驟號:=0
END_CASE;
復(fù)雜指令0 //復(fù)雜指令調(diào)用
復(fù)雜指令1
.
.
.
復(fù)雜指令n
輸出Busy、Done、Status等
復(fù)雜指令一般包含:通信、運動控制、讀配方、寫數(shù)據(jù)日志、讀寫數(shù)據(jù)記錄、定時器等異步指令,這些指令通常不放在CASE語句的邏輯中,而是在最后統(tǒng)一調(diào)用。
一般通過復(fù)雜指令完成位、錯誤位等作為跳轉(zhuǎn)條件。如果是定時器,也可以通過判斷時間是否到達(dá)作為跳轉(zhuǎn)條件。
例子:使用CASE OF指令編程運動控制,第一步相對運動以200mm/s的速度移動10000mm,第二步速度控制以100mm/s的速度移動15s,第三步停止。
圖5為FB塊的參數(shù)部分,圖6為程序。
圖5 FB參數(shù)
圖6 源程序
問題3:如何導(dǎo)入導(dǎo)出SCL源文件?
可以將SCL編寫的塊,或者全局DB以及UDT導(dǎo)出成源文件,可以導(dǎo)出塊或UDT,也可以導(dǎo)出所關(guān)聯(lián)嵌套的塊或者UDT,如圖7所示。
? | 外層塊 | ||||||
SCL編寫 OB/FC/FB | 全局DB | UDT | 背景DB | 工藝DB | PLC變量 | ||
嵌套 | 無 | 可以導(dǎo)出 | 可以導(dǎo)出 | 可以導(dǎo)出 | 可以導(dǎo)出但沒有變量 | 不可以導(dǎo)出 | 不可以導(dǎo)出 |
UDT | 可以導(dǎo)出 | 可以導(dǎo)出 | 可以導(dǎo)出 | 可以導(dǎo)出但沒有變量 | 不可以導(dǎo)出 | 不可以導(dǎo)出 | |
SCL編寫 FC/FB | 可以導(dǎo)出 | - | - | - | - | - | |
背景DB | - | - | - | 可以導(dǎo)出但沒有變量 | - | - |
?
導(dǎo)出方式參見圖7。
圖7 導(dǎo)出源文件
通過選擇“僅所選塊”導(dǎo)出當(dāng)前塊,即表中綠色底色的部分。通過選擇“包含所有關(guān)聯(lián)塊”,導(dǎo)出嵌套的UDT、程序塊,即表中紅色底色的部分。
導(dǎo)入源文件方式如圖8-9所示。
圖8 導(dǎo)入源文件
圖9 從源生成塊
通過導(dǎo)入的方式可以導(dǎo)入單獨內(nèi)容的源文件,也可以導(dǎo)入包含多個內(nèi)容的源文件。
問題4:如何使用經(jīng)典Step7的接口型式
在TIA PORTAL V15.1之前,SCL塊的接口方式和其他編程語言是一致的。從V15.1開始,SCL塊的接口方式可以修改成和經(jīng)典STEP7相同的方式,操作方式如圖10所示。
圖10 塊接口設(shè)置
①在TIA PORTAL選項中選擇設(shè)置
②左邊選擇“SCL(結(jié)構(gòu)化控制語言)”
③在塊接口選擇“文本視圖”,此設(shè)置默認(rèn)選擇表格視圖。設(shè)置完,再新建的SCL塊即使用所選擇的視圖。之前新建的SCL塊不變。
如圖11所示為文本視圖的SCL。
圖11 文本視圖SCL
問題5:為什么GOTO指令會編譯報錯?
如圖12-13所示,在LAD/FBD中的SCL編寫GOTO指令時會編譯報錯,所以不要在這里編寫GOTO指令。建議在LAD/FBD中的SCL不要使用過于復(fù)雜的編程,如果需要實現(xiàn)較為復(fù)雜的程序,建議單獨把SCL組織成為一個子程序,然后在LAD/FBD中調(diào)用。
圖12 編譯報錯
圖13 語法錯誤
編輯:黃飛
?
評論