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