




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六章
S7-1200PLC的SCL編程基本概念第六章S7-1200PLC的SCL編程基本概念
SCL語言1
簡單程序代碼示例2
表達(dá)式3
語句4-2-
數(shù)組5
指針6
程序塊的調(diào)用(SCL)7實(shí)操案例14多液體混合裝置控制86.1SCL語言SCL是StructuredControlLanguage的簡稱,即結(jié)構(gòu)化控制語言,是西門子為其S7-1200可編程邏輯控制器(PLC)系列提供的一種高級(jí)編程語言,由PASCAL語言演變而來。SCL語言不僅包含傳統(tǒng)PLC的元素,如輸入、輸出、定時(shí)器等,還包含高級(jí)編程語言的特性,如表達(dá)式、賦值運(yùn)算、運(yùn)算符、循環(huán)、選擇、分支、數(shù)組和高級(jí)函數(shù)等。IEC61131-3標(biāo)準(zhǔn)定義了五種PLC編程語言:1、梯形圖LD(LadderDiagram):形象化編程語言,以圖形符號(hào)方式表示電氣控制功能,類似于電氣繼電器圖。梯形圖中主要包括軟繼電器、能流、母線、邏輯解算等要素。6.1SCL語言2、功能塊圖FBD(FunctionBlockDiagram):圖形化編程語言,使用類似數(shù)字邏輯門電路的功能塊來表示輸入和輸出之間的邏輯。3、結(jié)構(gòu)化文本ST(StruturedText):文本形式編程語言,采用類似于Pascal或C語言的描述方式來描述各變量的運(yùn)算關(guān)系,西門子也將其稱為SCL,適用于編寫復(fù)雜的控制邏輯和數(shù)據(jù)處理任務(wù)。4、指令表IL(InstructionList):文本形式編程語言,類似于匯編語言,是PLC最基礎(chǔ)的語言,指令表與梯形圖一一對應(yīng)。5、順序功能圖(SFC):圖形化編程語言,用于順序化操作控制場景的程序設(shè)計(jì),SFC主要由狀態(tài)步、有向連線、轉(zhuǎn)換、轉(zhuǎn)換條件、動(dòng)作等五部分組成。6.1SCL語言1、SCL語言的特點(diǎn)(1)SCL采用文本形式,符合IEC61131-3的國際編程標(biāo)準(zhǔn),類似于傳統(tǒng)的高級(jí)編程語言如C或Pascal。(2)支持復(fù)雜的控制結(jié)構(gòu),如循環(huán)(for,while)、條件判斷(if/else)和嵌套控制。(3)可以高效處理大量數(shù)據(jù)和復(fù)雜的數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)體等。(4)SCL支持結(jié)構(gòu)化編程,允許工程師定義函數(shù)、過程和模塊,促進(jìn)代碼復(fù)用和模塊化,簡化復(fù)雜程序的開發(fā)和維護(hù)。6.1SCL語言2、SCL語言的優(yōu)勢(1)SCL可以方便地處理數(shù)組、結(jié)構(gòu)體和其他復(fù)雜數(shù)據(jù)類型,這對于需要進(jìn)行大量數(shù)據(jù)計(jì)算和處理的任務(wù)更加得心應(yīng)手。(2)SCL的結(jié)構(gòu)化和模塊化特點(diǎn)使得代碼易于閱讀和維護(hù)。隨著工業(yè)自動(dòng)化的需求變得日益復(fù)雜,SCL的使用率也在逐漸增長。3、SCL指令的規(guī)范(1)在SCL中所有的指令都須在英文狀態(tài)下輸入英文字符;6.1SCL語言(2)語句之間須用英文分號(hào)“;”進(jìn)行分隔,在塊結(jié)束時(shí),也需使用分號(hào);(3)指令可跨行;(4)每一條ENDIF后面需要加英文分號(hào)表示指令的結(jié)束;(5)SCL的變量需先在變量表中定義,然后將變量放在雙引號(hào)內(nèi);(6)關(guān)鍵字一般全大寫,代表特定的語法結(jié)構(gòu);(7)單行注釋使用//。注釋段可以跨多行,注釋段以“(*”開始,以“*)”結(jié)束。(8)變量名可以包含字母、數(shù)字、空格以及下劃線,但是不能使用系統(tǒng)關(guān)鍵字。6.2簡單程序代碼示例啟動(dòng)按鈕斷開時(shí)6.2簡單程序代碼示例啟動(dòng)按鈕接通時(shí)6.3表達(dá)式表達(dá)式由運(yùn)算符和操作符組成,用來計(jì)算值或表示某種關(guān)系的公式。通過運(yùn)算符可以將不同的表達(dá)式連接在一起。操作數(shù)是使用運(yùn)算符運(yùn)算的對象,包括常量、變量或表達(dá)式。算術(shù)表達(dá)式在SCL中用于執(zhí)行基本的數(shù)學(xué)運(yùn)算。算術(shù)運(yùn)算符可以處理當(dāng)前CPU所支持的各種數(shù)據(jù)類型。兩個(gè)或多個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)使用算術(shù)運(yùn)算符進(jìn)行運(yùn)算,運(yùn)算結(jié)果取決于最長數(shù)據(jù)位的數(shù)據(jù)類型。例如:2個(gè)長度不同的有符號(hào)的整數(shù),即INT和DINT做加法運(yùn)算會(huì)產(chǎn)生DINT結(jié)果值。6.3表達(dá)式關(guān)系表達(dá)式對兩個(gè)操作數(shù)的值進(jìn)行比較,當(dāng)滿足比較條件時(shí),比較結(jié)果為1(TRUE),否則比較結(jié)果為0(FALSE)。關(guān)系表達(dá)式中可使用的數(shù)據(jù)類型包括整數(shù)或浮點(diǎn)數(shù)、位字符串、字符串、TIME、日期和時(shí)間等。具體常用的關(guān)系運(yùn)算符見表6-1所示
運(yùn)算符含義=等于<>不等于<小于>大于<=小于等于>=大于等于6.3表達(dá)式邏輯表達(dá)式用于處理布爾值和實(shí)現(xiàn)邏輯運(yùn)算。常用的邏輯運(yùn)算符包括:AND:與運(yùn)算。僅當(dāng)兩個(gè)操作數(shù)都為真時(shí)結(jié)果為真。OR:或運(yùn)算。當(dāng)任意一個(gè)操作數(shù)為真時(shí)結(jié)果為真。NOT:非運(yùn)算。將布爾值取反時(shí)結(jié)果為真。XOR:異或運(yùn)算。當(dāng)且僅當(dāng)兩個(gè)操作數(shù)中有一個(gè)為真結(jié)果為真。
這些邏輯運(yùn)算符常見于PLC控制程序中的條件判斷和控制流程中。通常,邏輯表達(dá)式在IF語句、CASE語句、WHILE循環(huán)等結(jié)構(gòu)中使用,以確定執(zhí)行哪部分代碼或控制流程6.3表達(dá)式運(yùn)算符的優(yōu)先級(jí):與高級(jí)語言的運(yùn)算類似,SCL中的運(yùn)算符也有不同的優(yōu)先級(jí)。優(yōu)先級(jí)數(shù)字越小,參與運(yùn)算的優(yōu)先級(jí)越高。算術(shù)運(yùn)算符的優(yōu)先級(jí)見表6-2所示。6.3表達(dá)式6.4語句SCL的語句是指在西門子TIAPortal編程環(huán)境中,用于實(shí)現(xiàn)各種控制邏輯和功能的編程指令。SCL的語句類似于高級(jí)編程語言中的語句,具有結(jié)構(gòu)化和模塊化的特點(diǎn)。SCL語句包括IF-THEN、CASE-OF、FOR-TO-DO、WHILE-DO、REPEAT-UNTIL、CONTINUE、EXIT和RETURN等多種類型。1、賦值語句賦值語句是SCL中最常見的指令,其作用是將一個(gè)表達(dá)式或者變量的值通過賦值運(yùn)算符分配給賦值運(yùn)算符左邊的另外一個(gè)變量或結(jié)構(gòu)體等數(shù)據(jù)類型。賦值運(yùn)算符的格式是一個(gè)冒號(hào)加等號(hào),均是在英文狀態(tài)下的符號(hào)。賦值表達(dá)式輸入完后再加上分號(hào)就構(gòu)成了賦值語句。6.4語句(1)單賦值運(yùn)算:將一個(gè)表達(dá)式或變量或常量賦值給單個(gè)變量,如:"Tag_1":=1;//將數(shù)值1賦值給變量Tag_1"Tag_2":="Tag_3";//將變量Tag_3的值賦給變量Tag_2"Tag_4":="Tag_5"/123;//將變量Tag_5的值除以123后賦給Tag_4(2)多賦值運(yùn)算:執(zhí)行多賦值運(yùn)算時(shí),一個(gè)指令中可執(zhí)行多個(gè)賦值運(yùn)算,如:"Tag_1":="Tag_2":="Tag_3"=66;//此時(shí)Tag_1、Tag_2、Tag_3都被賦值為66,實(shí)現(xiàn)了多個(gè)變量同時(shí)被賦值(3)組合賦值運(yùn)算:執(zhí)行組合賦值運(yùn)算時(shí),可在賦值運(yùn)算中組合使用操作符“+”、“-”、“*”和“/”。"Tag_1"+="Tag_2";//執(zhí)行"Tag_1":="Tag_1"+"Tag_2";也可多次組合賦值運(yùn)算。示例:"Tag_1"+="Tag_2"+="Tag_3"/="Tag_4";//此時(shí),將按以下順序執(zhí)行賦值運(yùn)算://先執(zhí)行"Tag_3":="Tag_3"/"Tag_4";//接著執(zhí)行"Tag_2":="Tag_2"+"Tag_3";//最后執(zhí)行"Tag_1":="Tag_1"+"Tag_2";6.4語句(4)結(jié)構(gòu)體的賦值運(yùn)算:如果結(jié)構(gòu)體相同而且結(jié)構(gòu)體中成員的數(shù)據(jù)類型和名稱也相同,則可以將整個(gè)結(jié)構(gòu)體分配給另一個(gè)結(jié)構(gòu)體?;蛘甙岩粋€(gè)變量或常數(shù)賦值給結(jié)構(gòu)體中的變量。"數(shù)據(jù)塊_1".Static_1:="數(shù)據(jù)塊_1".Static_2;//把整個(gè)結(jié)構(gòu)體Static_1賦值給另外一整個(gè)結(jié)構(gòu)體Static_2"數(shù)據(jù)塊_1".Static_1.長度:="數(shù)據(jù)塊_1".Static_2.長度:="Tag_1";(*把變量Tag_1賦值給結(jié)構(gòu)體Static_1中的長度變量和結(jié)構(gòu)體Static_2中的長度變量*)"數(shù)據(jù)塊_1".Static_1.寬度:=1;(*把常數(shù)1賦值給結(jié)構(gòu)體中Static_1的寬度變量*)6.4語句(5)數(shù)組的賦值運(yùn)算"數(shù)據(jù)塊_1".數(shù)組A[2,2]:="數(shù)據(jù)塊_1".數(shù)組A[2,4]:=99;//把一個(gè)常數(shù)賦值給兩個(gè)二維數(shù)組變量"數(shù)據(jù)塊_1".數(shù)組A[2,2]:="數(shù)據(jù)塊_1".數(shù)組A[2,4]:="Tag_3";//把一個(gè)變量賦值給兩個(gè)二維數(shù)組變量"數(shù)據(jù)塊_1".數(shù)組A[1,5]:=55;//把常數(shù)賦值給一個(gè)數(shù)組變量6.4語句6.4語句條件語句(IF)(1)IF分支語句語句格式為:IF<條件1>THEN<指令1>;END_IF;如果滿足條件1,則將執(zhí)行THEN后的指令1。如果不滿足條件1,則跳到END_IF后的下一條指令開始繼續(xù)執(zhí)行。這種結(jié)構(gòu)下,有可能執(zhí)行指令1,也可能什么都不執(zhí)行。(2)IF和ELSE分支語句格式為:IF<條件1>THEN<指令1>ELSE<指令2>END_IF;如果滿足條件1,則執(zhí)行THEN后的指令1。如果不滿足條件1,則執(zhí)行ELSE后的指令2。任何時(shí)候只選擇指令1和指令2中的其中一條指令執(zhí)行。6.4語句(3)IF、ELSEIF和ELSE分支語句格式為:IF<條件1>THEN<指令1>ELSIF
<條件2>THEN<指令2>ELSE<指令3>END_IF;6.4語句如果滿足條件1,則執(zhí)行THEN后的指令1。執(zhí)行完指令1后,程序?qū)腅ND_IF后繼續(xù)執(zhí)行。如果不滿足條件1,則判斷條件2是否成立。如果條件2成立,則執(zhí)行THEN后的指令2。執(zhí)行完指令2后,程序?qū)腅ND_IF后繼續(xù)執(zhí)行。如果條件1和條件2都不滿足,則執(zhí)行ELSE后的指令3,再執(zhí)行END_IF后的程序部分。每次運(yùn)行時(shí)只會(huì)選擇<指令1><指令2><指令3>中的其中一個(gè)執(zhí)行。6.4語句選擇語句(CASE)CASE語句的具體格式如下:CASE<表達(dá)式或變量>OF<常量1>:<指令1>;<常量2>:<指令2>;……<常量n>:<指令n>;ELSE<指令n+1>END_CASE;6.4語句如果表達(dá)式或變量的值等于常量1,則執(zhí)行<指令1>,然后直接跳轉(zhuǎn)到END_CASE處,該語句結(jié)構(gòu)執(zhí)行結(jié)束,繼續(xù)往下執(zhí)行。如果等于常量2,則執(zhí)行<指令2>,跳轉(zhuǎn)到END_CASE處繼續(xù)往下執(zhí)行;以此類推,如果等于常量n,則執(zhí)行<指令n>,然后跳轉(zhuǎn)到END_CASE處繼續(xù)往下執(zhí)行。如果都不等于ELSE前的任何一個(gè)常量,則執(zhí)行ELSE后的<指令n+1>。ELSE是一個(gè)可選的語法部分,可以省略。如果有ELSE,那么在列出的所有n+1個(gè)指令中,必有且僅有一個(gè)指令被執(zhí)行。如果沒有ELSE,當(dāng)ELSE前面列出的n個(gè)常量全部都不滿足的時(shí)候,將直接跳轉(zhuǎn)到END_CASE結(jié)束該語句,也就是沒有執(zhí)行任何<指令>。6.4語句循環(huán)語句(1)FOR循環(huán)在SCL中,F(xiàn)OR循環(huán)是一種常用的循環(huán)結(jié)構(gòu),用于迭代執(zhí)行代碼塊。FOR循環(huán)參數(shù)見表6-3所示,F(xiàn)OR循環(huán)語句結(jié)構(gòu)如下:表6-3FOR循環(huán)參數(shù)說明參數(shù)說明循環(huán)變量必需。整型(Int或Dint),用作循環(huán)計(jì)數(shù)器初始值必需。指定控制變量初始值的簡單表達(dá)式終值必需。確定控制變量最終值的簡單表達(dá)式步值可選。每次循環(huán)后<循環(huán)變量>的變化量。布值與循環(huán)變量具有相同的數(shù)據(jù)類型。如果未指定步值,則每次循環(huán)之后,運(yùn)行變量的值加1。不能在執(zhí)行FOR語句期間更改步值。6.4語句FOR<循環(huán)變量>:=<初始值>TO<終值>BY<步值>DO<代碼塊>END_FOR;FOR循環(huán)的工作原理如下:①初始化循環(huán)變量為指定的初始值,這兩個(gè)值的數(shù)據(jù)類型必須與控制變量的相同。②檢查循環(huán)變量是否小于等于終值。如果是,則繼續(xù)執(zhí)行循環(huán)體;如果不是,則跳出循環(huán)執(zhí)行END_FOR后面的指令。③執(zhí)行循環(huán)體內(nèi)的代碼。④循環(huán)變量按指定的步長遞增,然后返回步驟2。6.4語句【例6-1】使用FOR循環(huán)計(jì)算從1到50的所有整數(shù)的總和。圖6-3【例6-1】代碼與監(jiān)控6.4語句如圖6-3所示,Sum_1變量的初值為0,第一次循環(huán)時(shí)循環(huán)變量Number_1的值為1,執(zhí)行代碼將Sum_1的值由0變?yōu)?,關(guān)鍵字BY給出步數(shù)為1。第2次循環(huán)時(shí)循環(huán)變量Number_1按步數(shù)加1,Number_1變?yōu)?,執(zhí)行循環(huán)代碼1+2將3賦給Sum_1,第三次循環(huán)時(shí)Number_1按步數(shù)加1變?yōu)?,執(zhí)行循環(huán)代碼3+3賦給Sum_1。如此循環(huán),直至Number_1的值變?yōu)?0,此時(shí)依然滿足循環(huán)條件,因此執(zhí)行代碼將50加上之前的求和總量,接下來Number_1的值變?yōu)?1,超出了循環(huán)終值51,因此循環(huán)結(jié)束,求FOR循環(huán)求得和值為1275。6.4語句(2)WHILE循環(huán)使用“滿足條件時(shí)執(zhí)行”指令可以重復(fù)執(zhí)行程序循環(huán),直至不滿足執(zhí)行條件為止。WHILE循環(huán)參數(shù)見表6-4所示,其語句結(jié)構(gòu)如下:WHILE<條件>DO<指令>;END_WHILE;WHILE循環(huán)的工作原理是先判斷,再執(zhí)行,即①先判斷條件;②可以重復(fù)執(zhí)行程序循環(huán);③直至不滿足執(zhí)行條件為止。6.4語句6.4語句表6-4WHILE循環(huán)參數(shù)說明參數(shù)說明條件必需。值為TRUE或FALSE的邏輯表達(dá)式。(“null”條件被視為FALSE)指令可選。在條件值不滿足之前執(zhí)行的一條或多條語句。【例6-2】求整數(shù)1+2+3+...50的和。6.4語句圖6-4【例6-2】代碼與監(jiān)控6.4語句如圖6-4所示,先給Sum_1變量賦初值0,Number_1變量賦初值1。第一次WHILE循環(huán)時(shí)先判斷WHILE循環(huán)條件,Number_1的值滿足<=50,接著執(zhí)行執(zhí)行Sum_1+Number_1,即Sum_1+1,將和值賦值給Sum_1,然后Number_1的值加1變?yōu)?。第二次循環(huán)時(shí)候在WHILE條件處滿足循環(huán)條件,接著執(zhí)行Sum_1+Number_1即Sum_1+2,將和值賦值給Sum_1,然后Number_1的值加1變?yōu)?。第三次循環(huán)時(shí)候在WHILE條件處滿足循環(huán)條件,接著執(zhí)行Sum_1+Number_1即Sum_1+3賦值給Sum_1,然后Number_1的值加1變?yōu)?,為下一次執(zhí)行Sum_1+4做好準(zhǔn)備。6.4語句以此類推,當(dāng)執(zhí)行第50次循環(huán)的時(shí)候,Sum_1的值變?yōu)镾um_1+50,Number_1的值變?yōu)?0+1=51,不滿足下一次的循環(huán)條件,因此退出循環(huán)。用WHILE循環(huán)求得和值為1275。(3)REPEAT指令在SCL中,REPEAT指令也是一種用于循環(huán)執(zhí)行代碼塊的控制結(jié)構(gòu),它提供了一個(gè)基于條件的循環(huán),直到滿足特定條件才停止。REPEAT指令通常用于在循環(huán)開始前不知道確切的循環(huán)次數(shù)的情況下。REPEAT指令參數(shù)見參數(shù)見表6-5所示,REPEAT指令格式如下:6.4語句REPEAT<指令>;UNTIL<條件>END_REPEAT;REPEAT指令的工作原理是先執(zhí)行,后判斷。REPEAT后面的指令為循環(huán)體,UNTIL后面的條件為循環(huán)結(jié)束的條件。循環(huán)指令至少執(zhí)行一次,然后在每次循環(huán)迭代結(jié)束后檢查UNTIL條件。如果條件滿足,循環(huán)終止;如果條件不滿足,繼續(xù)執(zhí)行循環(huán)體。6.4語句表6-5REPEAT指令參數(shù)說明參數(shù)說明條件必需。一個(gè)或多個(gè)用以下兩種方式表達(dá)的表達(dá)式:值為TRUE或FALSE的數(shù)字表達(dá)式或字符串表達(dá)式。“null”條件被視為FALSE。指令可選。在條件值為TRUE之前執(zhí)行的一條或多條語句。6.4語句【例6-3】求整數(shù)1+2+3+...50的和圖6-5【例6-3】代碼與監(jiān)控6.4語句如圖6-5所示,先給Sum_1變量賦初值0,Number_1變量賦初值1。第一次REPEAT循環(huán)時(shí)先執(zhí)行REPEAT循環(huán)體,即Sum_1+1,將和值賦值給Sum_1,然后Number_1的值加1變?yōu)?,最后判斷Number_1的值是否滿足>50,不滿足因此繼續(xù)第二次循環(huán)。第二次循環(huán)時(shí)候先執(zhí)行Sum_1+Number_1即Sum_1+2,將和值賦值給Sum_1,然后Number_1的值加1變?yōu)?。第三次循環(huán)時(shí)候先執(zhí)行Sum_1+Number_1即Sum_1+3賦值給Sum_1,然后Number_1的值加1變?yōu)?,為下一次執(zhí)行Sum_1+4做好準(zhǔn)備。以此類推,當(dāng)執(zhí)行第50次循環(huán)的時(shí)候,Sum_1的值變?yōu)镾um_1+50,Number_1的值變?yōu)?0+1=51,此時(shí)滿足REPEAT的循環(huán)條件,因此退出循環(huán)。用WHILE循環(huán)求得和值為1275。6.4語句(4)CONTINUE語句在SCL中,使用CONTINUE“復(fù)查循環(huán)條件”指令,可以結(jié)束FOR、WHILE或REPEAT循環(huán)的當(dāng)前程序運(yùn)行。執(zhí)行該指令后,將再次計(jì)算繼續(xù)執(zhí)行程序循環(huán)的條件開始下一個(gè)循環(huán)。該指令將影響其所在的程序循環(huán)。CONTINUE的語法格式為:CONTINUE;6.4語句CONTINUE語句只有CONTINUE一個(gè)關(guān)鍵詞加英文分號(hào)。CONTINUE指令只能在循環(huán)結(jié)構(gòu)語句中使用,如FOR、WHILE或REPEAT循環(huán)。使用CONTINUE后,循環(huán)體中的所有剩余代碼都將被跳過,因此要確保在跳過當(dāng)前迭代后不會(huì)引發(fā)未初始化的變量或邏輯錯(cuò)誤。CONTINUE語句的流程圖如右圖所示。6.4語句【例6-4】用CONTINUE語句求自然數(shù)0到100之間所有奇數(shù)之和。圖6-7【例6-4】代碼與監(jiān)控6.4語句如圖6-7所示,在WHILE循環(huán)的循環(huán)體中首先讓Number_1不斷加1,將Number_1除以2的余數(shù)賦值給Number_2,如果余數(shù)是0,說明是偶數(shù)則不執(zhí)行循環(huán)體中CONTINUE后面的語句即將數(shù)值累加到Sum_1中,程序會(huì)重新回到WHILE中的條件判斷語句,如果余數(shù)不是0,那么將執(zhí)行CONTINUE后面的累加指令。當(dāng)Number_1的數(shù)值變成99,進(jìn)入循環(huán)體中的加1操作變成100,因?yàn)槭桥紨?shù)所以直接跳到WHILE條件語句處,因?yàn)椴环蠗l件所以直接跳到END_WHILE結(jié)束大循環(huán),Number_1的值也停留在100,求得所有奇數(shù)和值為2500。6.4語句(5)EXIT語句在SCL中,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),如圖6-8所示。立即退出循環(huán)指令格式為:EXIT;6.4語句【例6-5】用EXIT語句求自然數(shù)0到100之間所有偶數(shù)之和。圖6-9【例6-5】代碼與監(jiān)控6.4語句如圖6-9例子中,我們定義了一個(gè)Int變量Sum_1來存儲(chǔ)偶數(shù)的總和,并將其初始化為0。定義了一個(gè)Int型變量Number_1作為循環(huán)計(jì)數(shù)器,從0開始。定義了一個(gè)Int型變量Number_2來判斷Number_1的奇偶性質(zhì)。使用WHILETRUE創(chuàng)建一個(gè)無限循環(huán)。在每次循環(huán)迭代中,檢查Number_1是否為偶數(shù),如果是,則將其加Sum_1中。遞增Number_1的值,并在Number_1超過100時(shí)使用EXIT語句退出循環(huán)。6.4語句跳轉(zhuǎn)語句(GOTO)使用GOTO“跳轉(zhuǎn)”語句允許程序跳轉(zhuǎn)到指定的標(biāo)簽位置,從而改變程序的執(zhí)行流程。GOTO指令類似于西門子S7-200的JMP無條件跳轉(zhuǎn)指令。使用GOTO指令的注意事項(xiàng)有:①在OB/FB/FC中使用GOTO指令時(shí),必須新建SCL程序塊,特別是在OB中只有新建SCL語言的OB塊才能使用GOTO指令,若以插入SCL程序段的方式將無法支持使用GOTO指令。②跳轉(zhuǎn)標(biāo)簽和“跳轉(zhuǎn)”指令必須在同一個(gè)塊中。在一個(gè)塊中,跳轉(zhuǎn)標(biāo)簽的名稱只能指定一次。每個(gè)跳轉(zhuǎn)標(biāo)簽可以是多個(gè)跳轉(zhuǎn)指令的目標(biāo)。6.4語句③不允許從“外部”跳轉(zhuǎn)到程序循環(huán)內(nèi),但允許從循環(huán)內(nèi)跳轉(zhuǎn)到“外部”。④雖然GOTO和標(biāo)簽提供了編程的靈活性,但代碼中過多地使用GOTO語句會(huì)導(dǎo)致程序結(jié)構(gòu)混亂,不斷跳轉(zhuǎn)的代碼也不利于程序的理解和維護(hù),因此需謹(jǐn)慎使用GOTO語句。GOTO語句的語法格式為:GOTO<跳轉(zhuǎn)標(biāo)簽>......<跳轉(zhuǎn)標(biāo)簽>:<指令>;...6.4語句【例6-6】用GOTO語句求自然數(shù)0到100之間所有奇數(shù)之和。圖6-10【例6-6】代碼與監(jiān)控6.4語句如圖6-10示例中,首先給Sum_1和Number_1變量賦初值,然后在WHILE循環(huán)的循環(huán)體中編寫Label1標(biāo)簽指令讓Number_1不斷加1,接著在IF語句中對Number_1除以2的余數(shù)進(jìn)行判斷,余數(shù)為0說明是偶數(shù)則跳轉(zhuǎn)到Label1標(biāo)簽指令繼續(xù)執(zhí)行Number_1加1操作,如果余數(shù)不為0說明是奇數(shù)那么將執(zhí)行ELSE后面的累加指令。當(dāng)Number_1的數(shù)值變成98,進(jìn)入循環(huán)體中的Label1加1操作變成99,因?yàn)槭瞧鏀?shù)所以進(jìn)行累加,當(dāng)下一次循環(huán)返回WHILE條件語句處時(shí),因?yàn)椴环蠗l件所以直接跳到END_WHILE結(jié)束大循環(huán),Number_1的值也停留在99,求得所有奇數(shù)和值為2500。6.4語句退出塊(RETURN)指令使用“退出塊”指令,可以終止當(dāng)前處理塊中的程序執(zhí)行,并在調(diào)用塊中繼續(xù)執(zhí)行。如果該指令出現(xiàn)在塊結(jié)尾處,則可以跳過。該語句的格式為:RETURN;【例6-7】RETURN語句的用法6.4語句圖6-11【例6-7】代碼6.4語句如圖6-11示例中,使用一個(gè)CASE語句,根據(jù)Number_1值的不同,跳轉(zhuǎn)到不同的標(biāo)簽,當(dāng)Number_1等于1時(shí)跳轉(zhuǎn)到label_1標(biāo)簽,Sum_1=1,然后RETURN結(jié)束程序塊;當(dāng)Number_1等于2時(shí)跳轉(zhuǎn)到label_2標(biāo)簽,Sum_1=2,然后RETURN結(jié)束程序塊;當(dāng)Number_1等于3時(shí)跳轉(zhuǎn)到label_3標(biāo)簽,Sum_1=3,然后RETURN結(jié)束程序塊;當(dāng)Number_1等于4時(shí)跳轉(zhuǎn)到label_4標(biāo)簽,Sum_1=4,然后RETURN結(jié)束程序塊;在FC塊中編寫RETURN程序,在FC塊的接口區(qū),Input_1放在FC塊的input參數(shù)中,OUT_1放在FC塊的output參數(shù)中。在OB塊中調(diào)用該FC塊,打開監(jiān)視狀態(tài),修改Input_1的值,觀察輸出的值。如圖6-12所示。6.4語句圖6-12【例6-7】調(diào)試監(jiān)控狀態(tài)6.4語句注釋用于解釋程序,幫助讀者理解程序,不影響程序的運(yùn)行。對程序進(jìn)行正確地注釋是良好的編程習(xí)慣??赏ㄟ^以下幾種方式為文本塊接口中的變量添加注釋:①行注釋行注釋以“//”開頭,僅延續(xù)到到行尾。行注釋可以不在代碼行首,但是跨行后不連續(xù),若跨行需重新加行注釋符號(hào)“//”?!纠?-8】//這是一個(gè)單行注釋。②注釋段注釋段以“(*”開始,以“*)”結(jié)束。該注釋可跨多個(gè)行。括號(hào)內(nèi)“(*...*)”的文本將處理為注釋信息。6.4語句【例6-9】(*這是一個(gè)注釋段:本項(xiàng)目工程使用西門子S7-1200PLC,CPU型號(hào)1214C/AC/DC/RLY,訂貨號(hào)6ES7214-1BG40-0XB0,固件版本V4.2,軟件版本為TIAPortalV16。*)③多語言注釋多語言注釋是一個(gè)以“(/*”開始,以“*/)”結(jié)束的單元。即,只能對整個(gè)注釋進(jìn)行標(biāo)記或選擇,而不能選擇其中一部分。多語言注釋不能相互嵌套,但在注釋行和注釋段中使用。所不同的是,在多語言注釋中不能使用注釋行或簡單的注釋段。【例6-10】(/*該注釋可翻譯為其它項(xiàng)目語言。*/)6.5數(shù)組1、Array(數(shù)組)是一種數(shù)據(jù)結(jié)構(gòu),是一種由固定數(shù)量、固定編號(hào)、同一種數(shù)據(jù)類型的元素組成的集合。數(shù)組中每一個(gè)元素都有一個(gè)編號(hào),這個(gè)編號(hào)也稱為索引或下標(biāo)。數(shù)組可以在OB、FC、FB和DB的塊接口編輯器中創(chuàng)建。但是無法在PLC變量編輯器中創(chuàng)建數(shù)組。在SCL中,目前只能聲明固定元素?cái)?shù)量的數(shù)組。6.5數(shù)組數(shù)組的特點(diǎn)有:1、數(shù)組中全部元素的數(shù)據(jù)類型必須是相同的,這里的數(shù)據(jù)類型可以是數(shù)組之外的其他任何數(shù)據(jù)類型,比如Int型、Real型等。2、數(shù)組的下標(biāo)可以為負(fù),但起始下標(biāo)必須小于或等于結(jié)束下標(biāo)。3、數(shù)組可以是一維到六維數(shù)組,SCL語言支持最多六維數(shù)組。4、用兩個(gè)英文點(diǎn)號(hào)分隔同一維的最小最大值聲明,用英文逗號(hào)隔開不同維度。5、不允許使用嵌套數(shù)組或數(shù)組的數(shù)組。6、數(shù)組的存儲(chǔ)器大小=(一個(gè)元素的大小*數(shù)組中的元素的總數(shù))6.5數(shù)組數(shù)組在使用前要先聲明,具體見表6-6所示。聲明一維數(shù)組的語法格式為:Array[min..max]of<type>。其中:min-數(shù)組的起始(最低)下標(biāo)max-數(shù)組的結(jié)束(最高)下標(biāo)type-數(shù)據(jù)類型之一,例如BOOL、Char聲明多維數(shù)組的語法格式為:Array[索引1_min..索引1_max,索引N_min..索引N_max]of<type>6.5數(shù)組表6-6數(shù)組的聲明數(shù)組索引有效索引類型數(shù)組索引規(guī)則常量或變量USInt,Sint,Uint,Int,UDInt,DInt限值:-32768到+32767有效:常量和變量混合有效:常量表達(dá)式無效:變量表達(dá)式6.5數(shù)組要在塊接口編輯器中創(chuàng)建一維數(shù)組,命名好數(shù)組名稱如數(shù)組_A,數(shù)據(jù)類型需選擇“Array[0..1]of”,然后在下拉列表中選擇需要的數(shù)據(jù)類型如“Array[0..1]ofBOOL”。點(diǎn)擊數(shù)據(jù)類型單元格右側(cè)的下三角圖標(biāo),在“數(shù)組限值”中以英文兩點(diǎn)..隔開分別輸入輸入數(shù)組的起始下標(biāo)和結(jié)束下標(biāo),即完成了一維數(shù)組的創(chuàng)建。此時(shí)數(shù)組_A包含數(shù)組_A[0]和數(shù)組_A[1]兩個(gè)一維BOOL變量,如圖6-13所示。圖6-13數(shù)組聲明組態(tài)6.5數(shù)組如果要?jiǎng)?chuàng)建多維數(shù)組,則在“數(shù)組限值”中在一維數(shù)組的基礎(chǔ)上以英文逗號(hào)隔開輸入多組起始下標(biāo)和結(jié)束下標(biāo)即可,具體見表6-7所示。表6-7多維數(shù)組聲明示例名稱數(shù)據(jù)類型數(shù)組維數(shù)說明數(shù)組_AARRAY[2..3]ofChar一維數(shù)組數(shù)組_A[2]、數(shù)組_A[3]2個(gè)Char元素?cái)?shù)組_BARRAY[-3..-2]ofReal一維數(shù)組數(shù)組_B[-3]、數(shù)_B[-2]2個(gè)Real元素?cái)?shù)組_CARRAY[5..6,-4..-3]ofBool二維數(shù)組數(shù)組_C[5,-4]、數(shù)組_C[5,-3]、數(shù)組_C[6,-4]、數(shù)組_C[6,-3]4個(gè)Bool元素?cái)?shù)組_DARRAY[0..1,2..3,4..5]ofByte三維數(shù)組數(shù)組_D[0,2,4]、數(shù)組_D[0,2,5]、數(shù)組_D[0,3,4]、數(shù)組_D[0,3,5]、數(shù)組_D[1,2,4]、數(shù)組_D[1,2,5]、數(shù)組_D[1,3,4]、數(shù)組_D[1,3,5]8個(gè)Byte元素6.5數(shù)組數(shù)組的引用格式為:數(shù)組名+方括號(hào)+索引。如:數(shù)組_A[3]是對數(shù)組_A數(shù)組索引號(hào)為3的元素的引用。"數(shù)據(jù)塊_1".數(shù)組_A[2,2]:=99;//把一個(gè)常數(shù)賦值給一個(gè)二維數(shù)組變量“Tag_1”:="數(shù)據(jù)塊_1".數(shù)組A[1,5];//把索引號(hào)為[1,5]的二維數(shù)組變量賦值給Tag_1變量【例6-11】根據(jù)圖6-14所示,用SCL語言求數(shù)組A_1中所有數(shù)組的和。6.5數(shù)組a)數(shù)組A_1設(shè)定起始值
b)代碼與監(jiān)控圖6-14【例6-11】數(shù)組元素的引用6.6指針在西門子S7-1200PLC中,使用SCL編程時(shí),指針是一個(gè)重要的概念,它提供了對數(shù)據(jù)存儲(chǔ)位置的引用,使得程序可以更加靈活和高效地操作數(shù)據(jù)。指針是存儲(chǔ)其他變量地址的變量。在S7-1200SCL中,你可以使用指針來訪問和操作存儲(chǔ)在PLC內(nèi)存中的數(shù)據(jù)。西門子的指針包括Pointer、Any、Variant三種指針類型。S7-300/400/1500支持Pointer和Any類型,S7-1200只支持Variant類型。6.6指針Variant數(shù)據(jù)類型可以指向PLC中不同數(shù)據(jù)類型的變量或參數(shù)(包括數(shù)組、結(jié)構(gòu)體、自定義數(shù)據(jù)類型)的變量或參數(shù)。比Any功能更強(qiáng)大。Variant指針可以指向結(jié)構(gòu)和單獨(dú)的結(jié)構(gòu)元素。Variant數(shù)據(jù)類型的操作數(shù)不會(huì)占用背景數(shù)據(jù)塊或者工作存儲(chǔ)器的任何空間,但是會(huì)占用CPU上的裝載存儲(chǔ)器的存儲(chǔ)空間。Variant數(shù)據(jù)類型的參數(shù)是對已經(jīng)存在的變量的引用,相當(dāng)于被引用變量的別名。只能在FC/FB/OB的形參中聲明某個(gè)參數(shù)的類型為Variant,而不能在DB數(shù)據(jù)塊和FB塊的靜態(tài)變量聲明Variant類型的元素。6.6指針在對FC/FB的Variant形參賦實(shí)參時(shí),可以是任何類型的變量,調(diào)用該FC和FB時(shí),在傳遞變量值的同時(shí),而且會(huì)傳遞變量的類型。具體與Variant有關(guān)的常用指令見表6-8所示:表6-8Variant類型指令與說明指令功能指令說明確定數(shù)據(jù)類型TypeOf():檢查VARIANT變量的數(shù)據(jù)類型(該指令僅適用于SCL,且只能與IF或CASE指令一起使用。)可使用該指令將VARIANT變量指向的數(shù)據(jù)類型與任何其它變量的數(shù)據(jù)類型進(jìn)行比較。也可以與PLC數(shù)據(jù)類型作比較。讀取VARIANT指向的數(shù)據(jù)VariantGet:讀取VARIANT變量值可使用該指令將單個(gè)變量的值移到另一個(gè)變量中。這兩個(gè)變量的數(shù)據(jù)類型必須匹配。將數(shù)據(jù)分配給VARIANT變量VariantPut:寫入VARIANT變量值可使用該指令將單個(gè)變量的值移到另一個(gè)變量中。這兩個(gè)變量的數(shù)據(jù)類型必須匹配。6.6指針【例6-12】一個(gè)加法FB塊,實(shí)現(xiàn)功能為當(dāng)Input形參是二個(gè)Input類型,二數(shù)相減,輸出給OUTPUT_1。如果Input形參是二個(gè)REAL類型,二數(shù)相減,輸出給OUTPUT_2。如圖6-15所示。圖6-15【例6-12】Variant類型的應(yīng)用6.7程序塊的調(diào)用(SCL)對于程序塊的調(diào)用,調(diào)用可以項(xiàng)目樹程序塊中選中FC或FB塊拖拽入程序編輯區(qū)域,也可以在調(diào)用塊中直接輸入被調(diào)用塊的名稱進(jìn)行調(diào)用。FC的調(diào)用在SCL中對FC調(diào)用的格式為:"FC塊名稱"(輸入形參:=實(shí)參,輸出形參=>實(shí)參,輸入輸出形參:=實(shí)參...);FC調(diào)用需要確保所有形參都有對應(yīng)實(shí)參。如果沒有參數(shù)的FC也需要有括號(hào)。6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。如圖6-16所示第一步,首先刪除默認(rèn)的OB1,新建SCL的OB1塊;圖6-16第一步6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-17第二步如圖6-17所示第二步,點(diǎn)添加新塊,新建FC的SCL程序塊,塊名稱修改為起保停,語言選擇SCL6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-18第三步如圖6-18所示第三步:在FC接口區(qū)內(nèi)定義形參;6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。如圖6-19所示第四步:在FC程序區(qū)內(nèi)編寫起保停程序;如圖6-20所示第五步:在OB塊內(nèi)調(diào)用FC,以變量表中的變量填充實(shí)參;圖6-19第四步圖6-20第五步6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-21第六步如圖6-21所示第六步:編譯無誤后,下載到PLC,在OB塊打開監(jiān)控進(jìn)行調(diào)試。當(dāng)Button_1按下,電機(jī)Motor_1為TRUE,當(dāng)Button_1復(fù)位后電機(jī)Motor_1仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Button_2,電機(jī)Motor_1恢復(fù)FALSE狀態(tài)。當(dāng)Button_3按下,電機(jī)Motor_2為TRUE,當(dāng)Button_3復(fù)位后電機(jī)Motor_2仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Button_4,電機(jī)Motor_2恢復(fù)FALSE狀態(tài)。6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-21第六步如圖6-21所示第六步:編譯無誤后,下載到PLC,在OB塊打開監(jiān)控進(jìn)行調(diào)試。當(dāng)Button_1按下,電機(jī)Motor_1為TRUE,當(dāng)Button_1復(fù)位后電機(jī)Motor_1仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Button_2,電機(jī)Motor_1恢復(fù)FALSE狀態(tài)。當(dāng)Button_3按下,電機(jī)Motor_2為TRUE,當(dāng)Button_3復(fù)位后電機(jī)Motor_2仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Button_4,電機(jī)Motor_2恢復(fù)FALSE狀態(tài)。6.7程序塊的調(diào)用(SCL)在SCL中FB單個(gè)實(shí)例調(diào)用的格式為:"背景數(shù)據(jù)塊名稱"(輸入形參:=實(shí)參,輸出形參=>實(shí)參,輸入輸出形參:=實(shí)參...);一般情況下,F(xiàn)B的簡單數(shù)據(jù)類型形參可以沒有對應(yīng)實(shí)參,復(fù)雜數(shù)據(jù)類型的輸入、輸出也可以沒有對應(yīng)實(shí)參,所以FB可以隱藏或不隱藏不出現(xiàn)的形參。如果沒有參數(shù)的FB也需要有括號(hào)。當(dāng)FB的參數(shù)全部顯示或只顯示了分配的參數(shù),鼠標(biāo)右鍵單擊被調(diào)用FB的背景數(shù)據(jù)塊,將對應(yīng)出現(xiàn)"僅顯示分配的參數(shù)"或"顯示所有參數(shù)",從而改變FB參數(shù)的全部顯示或部分顯示狀態(tài)。6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停控制,當(dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-22第二步第一步,首先刪除默認(rèn)的OB1,新建SCL的OB1塊;(同例6-13)如圖6-22所示第二步:點(diǎn)添加新塊,新建FB的SCL程序塊,塊名稱修改為起保停,語言選擇SCL;6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-23第三步如圖6-23所示第三步:在FB接口區(qū)內(nèi)定義形參;6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-24第四步如圖6-24所示第四步:在FB程序區(qū)內(nèi)編輯程序;6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-25第五步如圖6-25所示第五步:在數(shù)據(jù)塊DB中定義兩臺(tái)電機(jī)起保停的實(shí)參,實(shí)參和FB內(nèi)的形參數(shù)據(jù)類型匹配6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂疲?dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-26第六步如圖6-26所示第六步:在OB塊中調(diào)用兩次星三角啟動(dòng)FB塊,直接將FB塊用鼠標(biāo)拖動(dòng)至OB塊內(nèi),為每次FB塊的單個(gè)實(shí)例(背景DB)分配好名稱編號(hào)6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-27第七步如圖6-27所示第七步:將數(shù)據(jù)塊中的實(shí)參變量分配到“起保停_DB2”和“起保停_DB3”后面括號(hào)內(nèi)對應(yīng)的形參;6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-21第六步如圖6-21所示第六步:編譯無誤后,下載到PLC,在OB塊打開監(jiān)控進(jìn)行調(diào)試。當(dāng)Button_1按下,電機(jī)Motor_1為TRUE,當(dāng)Button_1復(fù)位后電機(jī)Motor_1仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Button_2,電機(jī)Motor_1恢復(fù)FALSE狀態(tài)。當(dāng)Button_3按下,電機(jī)Motor_2為TRUE,當(dāng)Button_3復(fù)位后電機(jī)Motor_2仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Button_4,電機(jī)Motor_2恢復(fù)FALSE狀態(tài)。6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂疲?dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-28第八步如圖6-28所示第八步:編譯無誤后,下載到PLC,在OB塊打開監(jiān)控進(jìn)行調(diào)試。當(dāng)Motor_1Start按下,電機(jī)Motor1_KM為TRUE,Motor1_LED點(diǎn)亮,當(dāng)Motor_1Stop復(fù)位后電機(jī)1Motor_KM和Motor1_LED仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Motor1_Stop,Motor1_KM和Motor1_LED恢復(fù)FALSE狀態(tài)。電機(jī)2同理。6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停控制,當(dāng)電機(jī)運(yùn)行時(shí)對應(yīng)的LED燈點(diǎn)亮。圖6-28第八步如圖6-28所示第八步:編譯無誤后,下載到PLC,在OB塊打開監(jiān)控進(jìn)行調(diào)試。當(dāng)Motor_1Start按下,電機(jī)Motor1_KM為TRUE,Motor1_LED點(diǎn)亮,當(dāng)Motor_1Stop復(fù)位后電機(jī)1Motor_KM和Motor1_LED仍能保持TRUE,實(shí)現(xiàn)自鎖。當(dāng)按下停止按鈕Motor1_Stop,Motor1_KM和Motor1_LED恢復(fù)FALSE狀態(tài)。電機(jī)2同理。6.7程序塊的調(diào)用(SCL)在SCL中,和LAD一樣,多重實(shí)例調(diào)用只存在于FB調(diào)用FB的情況中。多重背景調(diào)用的格式是:#多重背景(輸入形參:=實(shí)參,輸出形參=>實(shí)參,輸入輸出形參:=實(shí)參...);定時(shí)器做為一種特殊的FB塊具有背景數(shù)據(jù)塊,因此我們以FB調(diào)用定時(shí)器為例說明FB的多重實(shí)例的應(yīng)用。6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三角切換時(shí)間分別為5秒和10秒。圖6-29第三步第一步,首先刪除默認(rèn)的OB1,新建SCL的OB1塊;(同例6-13)第二步:點(diǎn)添加新塊,新建FB的SCL程序塊,塊名稱修改為星三角啟動(dòng),語言選擇SCL(同例6-13);如圖6-29所示第三步:在FB接口區(qū)定義形參;6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三角切換時(shí)間分別為5秒和10秒。圖6-30第四步如圖6-30所示第四步:在FB程序區(qū)編輯星三角啟動(dòng)SCL程序,在FB塊中調(diào)用定時(shí)器T1時(shí),選中右側(cè)基本指令欄中的TON直接拖拽到程序中,在彈出的調(diào)用選項(xiàng)中選擇以多重實(shí)例的方式調(diào)用定時(shí)器,此時(shí)#T1后面出現(xiàn)包含形參的括號(hào)。6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三角切換時(shí)間分別為5秒和10秒。圖6-31第五步如圖6-31所示第五步:在數(shù)據(jù)塊DB中定義兩臺(tái)電機(jī)星三角啟動(dòng)的實(shí)參,實(shí)參和FB內(nèi)的形參數(shù)據(jù)類型匹配6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025倉庫主管工作總結(jié)
- 2025屆廣西桂林、百色、梧州、崇左、北海五市高三下學(xué)期第六次檢測化學(xué)試卷含解析
- 2025年生物質(zhì)壓縮成型設(shè)備項(xiàng)目發(fā)展計(jì)劃
- 四年級(jí)數(shù)學(xué)(簡便運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 2025年輸油泵熱力機(jī)械項(xiàng)目發(fā)展計(jì)劃
- 壓瘡相關(guān)護(hù)理因素分析
- 心衰患者營養(yǎng)護(hù)理
- 陜西財(cái)經(jīng)職業(yè)技術(shù)學(xué)院《海洋有機(jī)化學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西青年職業(yè)學(xué)院《工業(yè)通風(fēng)與除塵》2023-2024學(xué)年第二學(xué)期期末試卷
- 隨州職業(yè)技術(shù)學(xué)院《鐵路貨運(yùn)組織與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 人工授精合同范例
- 企業(yè)培訓(xùn)班主任的職責(zé)與課程設(shè)計(jì)
- 8.3 印度(第1課時(shí)) 課件- 2024-2025學(xué)年地理人教版七年級(jí)下冊
- 2025年陜西省西安市高新唐南中學(xué)中考數(shù)學(xué)二模試卷(原卷版+解析版)
- 2025年鄭州鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫必考題
- 2024上海閔行區(qū)中小學(xué)教師招聘考試試題及答案
- 2024年新人教版九年級(jí)上冊化學(xué)教學(xué)課件 6.3 二氧化碳的實(shí)驗(yàn)室制取
- 2025年常州信息職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試題庫必考題
- 龍巖市2025年高中畢業(yè)班三月教學(xué)質(zhì)量檢測 地理試卷(含答案詳解)
- 哪吒主題課件模板文檔
- 2025年寧波職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫及答案(歷年真題)
評(píng)論
0/150
提交評(píng)論