西門(mén)子SCL編程入門(mén)教程連載(4)- 語(yǔ)句與結(jié)構(gòu)
前面的文章我們介紹了西門(mén)子SCL編程的變量和表達(dá)式,今天這篇文章,我們來(lái)介紹下SCL的語(yǔ)句與結(jié)構(gòu)。

語(yǔ)句在計(jì)算機(jī)科學(xué)中被稱(chēng)為"Satement"。它是一條能被執(zhí)行的代碼,其作用是向計(jì)算機(jī)/PLC系統(tǒng)發(fā)出操作指令,要求執(zhí)行相應(yīng)的操作。語(yǔ)句經(jīng)過(guò)編譯后會(huì)產(chǎn)生若干條機(jī)器指令。
在很多高級(jí)語(yǔ)言中,代碼必須提供某種符號(hào)來(lái)表示一條語(yǔ)句,以便編譯器能能識(shí)別并編譯。比如,C語(yǔ)言的每一條語(yǔ)句末尾都要加英文分號(hào)(;),而VB則以回車(chē)換行符來(lái)表示一條語(yǔ)句;西門(mén)子SCL的語(yǔ)法源自PASCAL,其每條語(yǔ)句的末尾也要加英文分號(hào)(;)。
語(yǔ)句有簡(jiǎn)單與復(fù)雜之分。
1-簡(jiǎn)單語(yǔ)句
簡(jiǎn)單語(yǔ)句用來(lái)組成順序結(jié)構(gòu),即自上而下的順序代碼。
賦值語(yǔ)句屬于簡(jiǎn)單語(yǔ)句。
例如下面的代碼,將形參E_START和E_STOP賦值給臨時(shí)變量。

圖片中的":="符號(hào)表示賦值;
賦值語(yǔ)句的右邊也可以是表達(dá)式,例如下面的代碼:

第一條語(yǔ)句將TMP_A乘以3,然后賦值給TMP_B;
第二條語(yǔ)句將TMP_A與TMP_B相加,然后賦值給TMP_C;
2-復(fù)雜語(yǔ)句
復(fù)雜語(yǔ)句可以構(gòu)成選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)。
1、選擇結(jié)構(gòu)
選擇結(jié)構(gòu)用來(lái)根據(jù)某些條件來(lái)選擇性的執(zhí)行代碼。
選擇結(jié)構(gòu)包括IF語(yǔ)句和CASE語(yǔ)句。
1.1 IF語(yǔ)句
IF語(yǔ)句用來(lái)判斷某種條件是否滿(mǎn)足。如果滿(mǎn)足的話(huà),則執(zhí)行其內(nèi)部的代碼。
比如下面的圖片代碼:

如果E_CODE的值為1,則將TMP_A賦值為1;TMP_B賦值為2;
上述代碼中,如果E_CODE的值不等于1,則不執(zhí)行其內(nèi)部的語(yǔ)句;程序會(huì)跳轉(zhuǎn)到END_IF之后的語(yǔ)句繼續(xù)執(zhí)行;
如果希望在E_CODE的值不等于1的情況下,執(zhí)行某些語(yǔ)句,可以使用ELSE關(guān)鍵詞,如下圖:

上圖中,如果E_CODE的值等于1,則將TMP_A賦值為1,TMP_B賦值為2;否則的話(huà),將TMP_A賦值為100,TMP_B賦值為200;
IF語(yǔ)句的內(nèi)部還可以嵌套IF語(yǔ)句,比如下面的代碼:

如果E_CODE的值等于1,則將TMP_A賦值為1,TMP_B賦值為2;在這個(gè)條件下,如果E_CONDTION的值等于100,則將TMP_C賦值為100;
如果要判斷的分枝比較多,比如,E_CODE的值等于1、2、3、4等要執(zhí)行不同的代碼,則可以使用CASE語(yǔ)句;
1.2 CASE語(yǔ)句
CASE語(yǔ)句用來(lái)完成多分枝的選擇判斷,比如下面的代碼:

當(dāng)E_CODE的值等于1時(shí),將TMP_A賦值為1,TMP_B賦值為2;
當(dāng)E_CODE的值等于2或者3或者4時(shí),將TMP_A賦值為10,TMP_B賦值為20;
當(dāng)E_CODE的值等于5時(shí),將TMP_A賦值為100,TMP_B賦值為200;
其它情況下,將TMP_A賦值為30,TMP_B賦值為40;
2、循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以在某種條件下反復(fù)執(zhí)行某段代碼,包括FOR語(yǔ)句、WHILE語(yǔ)句和REPEAT語(yǔ)句。
2.1 FOR語(yǔ)句
FOR語(yǔ)句用于以次數(shù)確定的方式來(lái)執(zhí)行某段代碼。比如下面的圖片:

該代碼使用TMP_COUNTER作為計(jì)數(shù)變量,其起始值被賦值為1,每執(zhí)行一次語(yǔ)句TMP_C:=TMP_C+1,TMP_COUNTER的值自動(dòng)加1,直到其值大于1000跳出循環(huán);
在FOR語(yǔ)句中,可以通過(guò)關(guān)鍵詞BY修改計(jì)數(shù)器的步值,即計(jì)數(shù)器每次自動(dòng)增加多少。
例如下面的代碼:

該代碼將TMP_COUNTER的起始值賦值為1,每執(zhí)行一次語(yǔ)句TMP_C:=TMP_C+1,TMP_COUNTER的值自動(dòng)加2,直到其值大于1000跳出循環(huán);
步值可以為負(fù)數(shù),表示每執(zhí)行一次循環(huán),循環(huán)計(jì)數(shù)器減去相應(yīng)的數(shù)值。
例如下面的代碼:

循環(huán)計(jì)數(shù)器TMP_COUNTER的值從1000開(kāi)始,每執(zhí)行一次循環(huán),其值減2;直到小于1跳出循環(huán)。
2.2 WHILE語(yǔ)句
WHILE語(yǔ)句適用于次數(shù)不確定的循環(huán)。
比如下面的代碼:

只要E_CONDITON的值等于1,將無(wú)限次循環(huán)執(zhí)行句:TMP_C:=TMP_C+1;
如果我們真的將這段代碼下載到CPU中執(zhí)行,可能會(huì)產(chǎn)生很糟糕的結(jié)果。
因?yàn)橐坏〦_CONDITON=1的條件始終都被滿(mǎn)足,CPU將陷入死循環(huán)。
為了避免進(jìn)入死循環(huán),要確保E_CONDITON在某些情況下不會(huì)等于1。
另外,為了在某種情況下能退出循環(huán),可以使用EXIT語(yǔ)句;
EXIT語(yǔ)句可以立即退出當(dāng)前的循環(huán),比如下面的代碼:

當(dāng)TMP_C達(dá)到最大值32767時(shí),退出WHILE循環(huán)。
2.3 REPEAT語(yǔ)句
REPEAT 語(yǔ)句用來(lái)重復(fù)執(zhí)行某段代碼直到滿(mǎn)足某種條件退出循環(huán)。
例如下面的代碼:

重復(fù)執(zhí)行TMP_C:=TMP_C+1直到TMP_C的值等于3000.
同樣可以使用EXIT語(yǔ)句退出REPEAT循環(huán)。
循環(huán)語(yǔ)句的內(nèi)部也可以再嵌套循環(huán)語(yǔ)句,限于篇幅就不展開(kāi)描述了。
好了,西門(mén)子SCL語(yǔ)言的語(yǔ)句與結(jié)構(gòu)就先介紹到這里。
-
神器:5秒鐘搞定贗電容k1擬合、繪圖、計(jì)算電容貢獻(xiàn)率 2020-06-25
-
化工設(shè)計(jì)之工程圖紙(這篇文章給你講全了) 2020-07-03
-
工具:贗電容k1Tool-v2.6解決擬合交叉問(wèn)題 2020-06-25
-
斷續(xù)焊焊接符號(hào) 2021-10-14
-
板式塔設(shè)計(jì)核心:負(fù)荷性能圖(水力學(xué)圖) 2020-07-03
-
PDMS12.1sp4安裝教程 2020-07-03
-
話(huà)說(shuō)LED燈的利用系數(shù) 2020-07-04
-
一張圖講清楚斷路器的工作原理 2020-07-10
-
引起管道振動(dòng)的主要原因及消振措施 2020-12-06
