本教程雖然使用的是S7-1500系列的PLC,但實(shí)際上是面向S7-1200的用戶,在1500系列的PLC中,筆者更希望使用STL來對(duì)應(yīng)他優(yōu)越的計(jì)算處理能力。
本教程基于的平臺(tái)如下
軟件:TIA 15.1
CPU 1516
(1)直接創(chuàng)建純SCL的程序塊兒;
(2)在LAD/FBD中在插入SCL程序段。
在程序段中直接右擊插入即可,但是插入的程序段并不能完全使用SCL語法,GOTO等跳轉(zhuǎn)指令就不能使用。在SCL中一般不能使用絕對(duì)地址進(jìn)行變量地址的訪問,變量表中的變量一般使用變量名稱進(jìn)行訪問。
創(chuàng)建的SCL塊兒可以在觀測(cè)欄中顯示變量的地址,如下,為示例程序:
在SCL中,:= 表示賦值。
二、常量,變量及相關(guān)指令
(1)常量及變量的聲明
在博圖中,可以在代碼區(qū)進(jìn)行變量的聲明,也可以在程序塊內(nèi)部進(jìn)行變量聲明。具體如下圖:
變量聲明區(qū)有如下區(qū)別:
無論是FC還是FB塊,都是函數(shù)塊
類型 | 具體功能 |
---|---|
Input | 函數(shù)塊的形參,外部傳入函數(shù)的變量 |
Output | 組件返回 函數(shù)的返回值 |
Inout | 從外部讀入量然后經(jīng)過程序再輸出到外部 |
Static | 僅在FB塊中使用,例如計(jì)時(shí)器等函數(shù)塊可以使用此類型函數(shù)進(jìn)行定義 |
Temp | 臨時(shí)變量,局部變量,僅在當(dāng)前周期中存在 |
其中,Constant為常量,應(yīng)用較為簡(jiǎn)單不再敘述
Input,Output以及Inout都是作為函數(shù)參數(shù)使用,盡管Static在程序塊中會(huì)為其劃分存儲(chǔ)空間,但是其仍舊是作為局部變量的存在使用。
此外,SCL還允許用戶自行定義自己的類,這點(diǎn)會(huì)在后面的文章進(jìn)行闡述。同時(shí)TIA15.1還允許用戶定義變量聲明形式。
菜單:選項(xiàng)/設(shè)置 如下圖
如果切換為文本視圖,在其中就可以進(jìn)行變量的自定義。
筆者覺得這是博圖一個(gè)極為重要的改進(jìn)。
(2)基本運(yùn)算符以及基本程序控制指令
通過如下的基本運(yùn)算符就可以看出西門子的PLC已經(jīng)不單單是一個(gè)傳統(tǒng)的可編程控制器。筆者曾用1200做了一個(gè)簡(jiǎn)單網(wǎng)關(guān),可見現(xiàn)在的PLC功能有多強(qiáng)大。后期會(huì)把教程一并導(dǎo)入。
基本控制函數(shù)主要為三類:
條件語句
循環(huán)語句
選擇語句
然后上述三類中又包含了四個(gè)常用指令:
Goto、Exit、Return、Continue
在介紹上述指令之前,先介紹代碼區(qū)間
REGION
END_REGION
是一對(duì)配對(duì)的區(qū)間函數(shù),可以對(duì)代碼進(jìn)行整理,也可以對(duì)其劃分的一個(gè)區(qū)間的代碼進(jìn)行剪切,粘貼,復(fù)制,刪除插入等操作
具體樣例如下圖:
條件語句
IF語句
使用“條件執(zhí)行”指令,可以根據(jù)條件控制程序流的分支。該條件是結(jié)果為布爾值(TRUE 或 FALSE)的表達(dá)式??梢詫⑦壿嫳磉_(dá)式或比較表達(dá)式作為條件。
執(zhí)行該指令時(shí),將對(duì)指定的表達(dá)式進(jìn)行運(yùn)算。如果表達(dá)式的值為 TRUE,則表示滿足該條件;如果其值為 FALSE,則表示不滿足該條件。
根據(jù)分支的類型,可以對(duì)以下形式的指令進(jìn)行編程:
IF 分支:
如果滿足該條件,則將執(zhí)行 THEN 后編寫的指令。如果不滿足該條件,則程序?qū)?END_IF 后的下一條指令開始繼續(xù)執(zhí)行。
IF 和 ELSE 分支:
如果滿足該條件,則將執(zhí)行 THEN 后編寫的指令。如果不滿足該條件,則將執(zhí)行 ELSE 后編寫的指令。程序?qū)?END_IF 后的下一條指令開始繼續(xù)執(zhí)行。
IF、ELSIF 和 ELSE 分支:
如果滿足第一個(gè)條件(<條件 1>),則將執(zhí)行 THEN 后的指令(<指令 1>)。執(zhí)行這些指令后,程序?qū)?END_IF 后繼續(xù)執(zhí)行。
如果不滿足第一個(gè)條件,則將檢查第二個(gè)條件(<條件 2>)。如果滿足第二個(gè)條件(<條件 2>),則將執(zhí)行 THEN 后的指令(<指令 2>)。執(zhí)行這些指令后,程序?qū)?END_IF 后繼續(xù)執(zhí)行。
如果不滿足任何條件,則先執(zhí)行 ELSE 后的指令(<指令 0>),再執(zhí)行 END_IF 后的程序部分。
在 IF 指令內(nèi)可以嵌套任意多個(gè) ELSIF 和 THEN 組合??梢赃x擇對(duì) ELSE 分支進(jìn)行編程。
IF 指令的語法如下所示:
循環(huán)語句
WHILE:滿足條件時(shí)執(zhí)行
使用“滿足條件時(shí)執(zhí)行”指令可以重復(fù)執(zhí)行程序循環(huán),直至不滿足執(zhí)行條件為止。該條件是結(jié)果為布爾值(TRUE 或 FALSE)的表達(dá)式??梢詫⑦壿嫳磉_(dá)式或比較表達(dá)式作為條件。
具體示例如下
REPEAT:不滿足條件時(shí)執(zhí)行
使用“不滿足條件時(shí)執(zhí)行”指令可以重復(fù)執(zhí)行程序循環(huán),直至不滿足執(zhí)行條件為止。該條件是結(jié)果為布爾值(TRUE 或 FALSE)的表達(dá)式??梢詫⑦壿嫳磉_(dá)式或比較表達(dá)式作為條件。
示例如下:
END_REPEAT;//“Tag_Error”操作數(shù)值的信號(hào)狀態(tài)為“0”,就會(huì)將“Tag_Value”操作數(shù)的值分配給“Tag_Result”操作數(shù)。
選擇語句
CASE:創(chuàng)建多路分支
使用“創(chuàng)建多路分支”指令,可以根據(jù)數(shù)字表達(dá)式的值執(zhí)行多個(gè)指令序列中的一個(gè)。
具體示例如下:
循環(huán)語句(FOR語句)
其他程序指令
CONTINUE:復(fù)查循環(huán)條件
使用“復(fù)查循環(huán)條件”指令,可以結(jié)束 FOR、WHILE 或 REPEAT 循環(huán)的當(dāng)前程序運(yùn)行。執(zhí)行該指令后,將再次計(jì)算繼續(xù)執(zhí)行程序循環(huán)的條件。該指令將影響其所在的程序循環(huán)。
如果滿足條件 i < 5,則不執(zhí)行后續(xù)值分配 (“DB10”.Test[i] := 1)。運(yùn)行變量 (i) 以增量“2”遞增,然后檢查其當(dāng)前值是否在設(shè)定的取值范圍內(nèi)。如果執(zhí)行變量在取值范圍內(nèi),則將再次計(jì)算 IF 的條件。
如果不滿足條件 i < 5,則將執(zhí)行后續(xù)值分配 (“DB10”.Test[i] := 1) 并開始一個(gè)新循環(huán)。在這種情況下,執(zhí)行變量也會(huì)以增量“2”進(jìn)行遞增并接受檢查。
EXIT:立即退出循環(huán)
使用“立即退出循環(huán)”指令,可以隨時(shí)取消 FOR、WHILE 或 REPEAT 循環(huán)的執(zhí)行,而無需考慮是否滿足條件。在循環(huán)結(jié)束(END_FOR、END_WHILE 或 END_REPEAT)后繼續(xù)執(zhí)行程序。該指令將影響其所在的程序循環(huán)。
GOTO:跳轉(zhuǎn)
使用“跳轉(zhuǎn)”指令,可以從標(biāo)注為跳轉(zhuǎn)標(biāo)簽的指定點(diǎn)開始繼續(xù)執(zhí)行程序。跳轉(zhuǎn)標(biāo)簽和“跳轉(zhuǎn)”指令必須在同一個(gè)塊中。在一個(gè)塊中,跳轉(zhuǎn)標(biāo)簽的名稱只能指定一次。每個(gè)跳轉(zhuǎn)標(biāo)簽可以是多個(gè)跳轉(zhuǎn)指令的目標(biāo)。
不允許從“外部”跳轉(zhuǎn)到程序循環(huán)內(nèi),但允許從循環(huán)內(nèi)跳轉(zhuǎn)到“外部”。
根據(jù)“Tag_Value”操作數(shù)的值,程序?qū)膶?duì)應(yīng)的跳轉(zhuǎn)標(biāo)簽標(biāo)識(shí)點(diǎn)開始繼續(xù)執(zhí)行。例如,如果“Tag_Value”操作數(shù)的值為 2,則程序?qū)奶D(zhuǎn)標(biāo)簽“MyLABEL2”開始繼續(xù)執(zhí)行。在這種情況下,將跳過“MyLABEL1”跳轉(zhuǎn)標(biāo)簽所標(biāo)識(shí)的程序行。
RETURN:退出塊
使用“退出塊”指令,可以終止當(dāng)前處理塊中的程序執(zhí)行,并在調(diào)用塊中繼續(xù)執(zhí)行。如果該指令出現(xiàn)在塊結(jié)尾處,則可以跳過。
原文鏈接:https://blog.csdn.net/anhongning123/article/details/105696632