小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

TIA protal與SCL從入門到精通(1)——SCL編程入門

 閬苑仙境rqb 2020-07-31

SCL語言是由Pascal而生的結(jié)構(gòu)化程序語言,與梯形圖相(LAD)比,SCL語言的靈活程度更高,易于編寫控制算法。

本教程雖然使用的是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á)式作為條件。

具體示例如下

WHILE
"Tag_Value1" <> "Tag_Value2"
DO "Tag_Result"
:= "Tag_Input";
END_WHILE; //只要“Tag_Value1”和“Tag_Value2”操作數(shù)的值不匹配,“Tag_Input”操作數(shù)的
值就會(huì)分配給“Tag_Result”操作數(shù)。123456

REPEAT:不滿足條件時(shí)執(zhí)行
使用“不滿足條件時(shí)執(zhí)行”指令可以重復(fù)執(zhí)行程序循環(huán),直至不滿足執(zhí)行條件為止。該條件是結(jié)果為布爾值(TRUE 或 FALSE)的表達(dá)式??梢詫⑦壿嫳磉_(dá)式或比較表達(dá)式作為條件。

示例如下:

 REPEAT
"Tag_Result":= "Tag_Value";
UNTIL "Tag_Error"123

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多