西門(mén)子S7-1200PLC編程及應(yīng)用教程 課件 第6、7章 S7-1200 PLC的SCL編程基本概念、S7-1200 PLC基本指令(SCL)_第1頁(yè)
西門(mén)子S7-1200PLC編程及應(yīng)用教程 課件 第6、7章 S7-1200 PLC的SCL編程基本概念、S7-1200 PLC基本指令(SCL)_第2頁(yè)
西門(mén)子S7-1200PLC編程及應(yīng)用教程 課件 第6、7章 S7-1200 PLC的SCL編程基本概念、S7-1200 PLC基本指令(SCL)_第3頁(yè)
西門(mén)子S7-1200PLC編程及應(yīng)用教程 課件 第6、7章 S7-1200 PLC的SCL編程基本概念、S7-1200 PLC基本指令(SCL)_第4頁(yè)
西門(mén)子S7-1200PLC編程及應(yīng)用教程 課件 第6、7章 S7-1200 PLC的SCL編程基本概念、S7-1200 PLC基本指令(SCL)_第5頁(yè)
已閱讀5頁(yè),還剩252頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第六章

S7-1200PLC的SCL編程基本概念第六章S7-1200PLC的SCL編程基本概念

SCL語(yǔ)言1

簡(jiǎn)單程序代碼示例2

表達(dá)式3

語(yǔ)句4-2-

數(shù)組5

指針6

程序塊的調(diào)用(SCL)7實(shí)操案例14多液體混合裝置控制86.1SCL語(yǔ)言SCL是StructuredControlLanguage的簡(jiǎn)稱(chēng),即結(jié)構(gòu)化控制語(yǔ)言,是西門(mén)子為其S7-1200可編程邏輯控制器(PLC)系列提供的一種高級(jí)編程語(yǔ)言,由PASCAL語(yǔ)言演變而來(lái)。SCL語(yǔ)言不僅包含傳統(tǒng)PLC的元素,如輸入、輸出、定時(shí)器等,還包含高級(jí)編程語(yǔ)言的特性,如表達(dá)式、賦值運(yùn)算、運(yùn)算符、循環(huán)、選擇、分支、數(shù)組和高級(jí)函數(shù)等。IEC61131-3標(biāo)準(zhǔn)定義了五種PLC編程語(yǔ)言:1、梯形圖LD(LadderDiagram):形象化編程語(yǔ)言,以圖形符號(hào)方式表示電氣控制功能,類(lèi)似于電氣繼電器圖。梯形圖中主要包括軟繼電器、能流、母線、邏輯解算等要素。6.1SCL語(yǔ)言2、功能塊圖FBD(FunctionBlockDiagram):圖形化編程語(yǔ)言,使用類(lèi)似數(shù)字邏輯門(mén)電路的功能塊來(lái)表示輸入和輸出之間的邏輯。3、結(jié)構(gòu)化文本ST(StruturedText):文本形式編程語(yǔ)言,采用類(lèi)似于Pascal或C語(yǔ)言的描述方式來(lái)描述各變量的運(yùn)算關(guān)系,西門(mén)子也將其稱(chēng)為SCL,適用于編寫(xiě)復(fù)雜的控制邏輯和數(shù)據(jù)處理任務(wù)。4、指令表IL(InstructionList):文本形式編程語(yǔ)言,類(lèi)似于匯編語(yǔ)言,是PLC最基礎(chǔ)的語(yǔ)言,指令表與梯形圖一一對(duì)應(yīng)。5、順序功能圖(SFC):圖形化編程語(yǔ)言,用于順序化操作控制場(chǎng)景的程序設(shè)計(jì),SFC主要由狀態(tài)步、有向連線、轉(zhuǎn)換、轉(zhuǎn)換條件、動(dòng)作等五部分組成。6.1SCL語(yǔ)言1、SCL語(yǔ)言的特點(diǎn)(1)SCL采用文本形式,符合IEC61131-3的國(guó)際編程標(biāo)準(zhǔn),類(lèi)似于傳統(tǒng)的高級(jí)編程語(yǔ)言如C或Pascal。(2)支持復(fù)雜的控制結(jié)構(gòu),如循環(huán)(for,while)、條件判斷(if/else)和嵌套控制。(3)可以高效處理大量數(shù)據(jù)和復(fù)雜的數(shù)據(jù)類(lèi)型,如數(shù)組、結(jié)構(gòu)體等。(4)SCL支持結(jié)構(gòu)化編程,允許工程師定義函數(shù)、過(guò)程和模塊,促進(jìn)代碼復(fù)用和模塊化,簡(jiǎn)化復(fù)雜程序的開(kāi)發(fā)和維護(hù)。6.1SCL語(yǔ)言2、SCL語(yǔ)言的優(yōu)勢(shì)(1)SCL可以方便地處理數(shù)組、結(jié)構(gòu)體和其他復(fù)雜數(shù)據(jù)類(lèi)型,這對(duì)于需要進(jìn)行大量數(shù)據(jù)計(jì)算和處理的任務(wù)更加得心應(yīng)手。(2)SCL的結(jié)構(gòu)化和模塊化特點(diǎn)使得代碼易于閱讀和維護(hù)。隨著工業(yè)自動(dòng)化的需求變得日益復(fù)雜,SCL的使用率也在逐漸增長(zhǎng)。3、SCL指令的規(guī)范(1)在SCL中所有的指令都須在英文狀態(tài)下輸入英文字符;6.1SCL語(yǔ)言(2)語(yǔ)句之間須用英文分號(hào)“;”進(jìn)行分隔,在塊結(jié)束時(shí),也需使用分號(hào);(3)指令可跨行;(4)每一條ENDIF后面需要加英文分號(hào)表示指令的結(jié)束;(5)SCL的變量需先在變量表中定義,然后將變量放在雙引號(hào)內(nèi);(6)關(guān)鍵字一般全大寫(xiě),代表特定的語(yǔ)法結(jié)構(gòu);(7)單行注釋使用//。注釋段可以跨多行,注釋段以“(*”開(kāi)始,以“*)”結(jié)束。(8)變量名可以包含字母、數(shù)字、空格以及下劃線,但是不能使用系統(tǒng)關(guān)鍵字。6.2簡(jiǎn)單程序代碼示例啟動(dòng)按鈕斷開(kāi)時(shí)6.2簡(jiǎn)單程序代碼示例啟動(dòng)按鈕接通時(shí)6.3表達(dá)式表達(dá)式由運(yùn)算符和操作符組成,用來(lái)計(jì)算值或表示某種關(guān)系的公式。通過(guò)運(yùn)算符可以將不同的表達(dá)式連接在一起。操作數(shù)是使用運(yùn)算符運(yùn)算的對(duì)象,包括常量、變量或表達(dá)式。算術(shù)表達(dá)式在SCL中用于執(zhí)行基本的數(shù)學(xué)運(yùn)算。算術(shù)運(yùn)算符可以處理當(dāng)前CPU所支持的各種數(shù)據(jù)類(lèi)型。兩個(gè)或多個(gè)不同數(shù)據(jù)類(lèi)型的數(shù)據(jù)使用算術(shù)運(yùn)算符進(jìn)行運(yùn)算,運(yùn)算結(jié)果取決于最長(zhǎng)數(shù)據(jù)位的數(shù)據(jù)類(lèi)型。例如:2個(gè)長(zhǎng)度不同的有符號(hào)的整數(shù),即INT和DINT做加法運(yùn)算會(huì)產(chǎn)生DINT結(jié)果值。6.3表達(dá)式關(guān)系表達(dá)式對(duì)兩個(gè)操作數(shù)的值進(jìn)行比較,當(dāng)滿足比較條件時(shí),比較結(jié)果為1(TRUE),否則比較結(jié)果為0(FALSE)。關(guān)系表達(dá)式中可使用的數(shù)據(jù)類(lèi)型包括整數(shù)或浮點(diǎn)數(shù)、位字符串、字符串、TIME、日期和時(shí)間等。具體常用的關(guān)系運(yùn)算符見(jià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)算符常見(jiàn)于PLC控制程序中的條件判斷和控制流程中。通常,邏輯表達(dá)式在IF語(yǔ)句、CASE語(yǔ)句、WHILE循環(huán)等結(jié)構(gòu)中使用,以確定執(zhí)行哪部分代碼或控制流程6.3表達(dá)式運(yùn)算符的優(yōu)先級(jí):與高級(jí)語(yǔ)言的運(yùn)算類(lèi)似,SCL中的運(yùn)算符也有不同的優(yōu)先級(jí)。優(yōu)先級(jí)數(shù)字越小,參與運(yùn)算的優(yōu)先級(jí)越高。算術(shù)運(yùn)算符的優(yōu)先級(jí)見(jiàn)表6-2所示。6.3表達(dá)式6.4語(yǔ)句SCL的語(yǔ)句是指在西門(mén)子TIAPortal編程環(huán)境中,用于實(shí)現(xiàn)各種控制邏輯和功能的編程指令。SCL的語(yǔ)句類(lèi)似于高級(jí)編程語(yǔ)言中的語(yǔ)句,具有結(jié)構(gòu)化和模塊化的特點(diǎn)。SCL語(yǔ)句包括IF-THEN、CASE-OF、FOR-TO-DO、WHILE-DO、REPEAT-UNTIL、CONTINUE、EXIT和RETURN等多種類(lèi)型。1、賦值語(yǔ)句賦值語(yǔ)句是SCL中最常見(jiàn)的指令,其作用是將一個(gè)表達(dá)式或者變量的值通過(guò)賦值運(yùn)算符分配給賦值運(yùn)算符左邊的另外一個(gè)變量或結(jié)構(gòu)體等數(shù)據(jù)類(lèi)型。賦值運(yùn)算符的格式是一個(gè)冒號(hào)加等號(hào),均是在英文狀態(tài)下的符號(hào)。賦值表達(dá)式輸入完后再加上分號(hào)就構(gòu)成了賦值語(yǔ)句。6.4語(yǔ)句(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語(yǔ)句(4)結(jié)構(gòu)體的賦值運(yùn)算:如果結(jié)構(gòu)體相同而且結(jié)構(gòu)體中成員的數(shù)據(jù)類(lèi)型和名稱(chēng)也相同,則可以將整個(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.長(zhǎng)度:="數(shù)據(jù)塊_1".Static_2.長(zhǎng)度:="Tag_1";(*把變量Tag_1賦值給結(jié)構(gòu)體Static_1中的長(zhǎng)度變量和結(jié)構(gòu)體Static_2中的長(zhǎng)度變量*)"數(shù)據(jù)塊_1".Static_1.寬度:=1;(*把常數(shù)1賦值給結(jié)構(gòu)體中Static_1的寬度變量*)6.4語(yǔ)句(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語(yǔ)句6.4語(yǔ)句條件語(yǔ)句(IF)(1)IF分支語(yǔ)句語(yǔ)句格式為:IF<條件1>THEN<指令1>;END_IF;如果滿足條件1,則將執(zhí)行THEN后的指令1。如果不滿足條件1,則跳到END_IF后的下一條指令開(kāi)始繼續(xù)執(zhí)行。這種結(jié)構(gòu)下,有可能執(zhí)行指令1,也可能什么都不執(zhí)行。(2)IF和ELSE分支語(yǔ)句格式為:IF<條件1>THEN<指令1>ELSE<指令2>END_IF;如果滿足條件1,則執(zhí)行THEN后的指令1。如果不滿足條件1,則執(zhí)行ELSE后的指令2。任何時(shí)候只選擇指令1和指令2中的其中一條指令執(zhí)行。6.4語(yǔ)句(3)IF、ELSEIF和ELSE分支語(yǔ)句格式為:IF<條件1>THEN<指令1>ELSIF

<條件2>THEN<指令2>ELSE<指令3>END_IF;6.4語(yǔ)句如果滿足條件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語(yǔ)句選擇語(yǔ)句(CASE)CASE語(yǔ)句的具體格式如下:CASE<表達(dá)式或變量>OF<常量1>:<指令1>;<常量2>:<指令2>;……<常量n>:<指令n>;ELSE<指令n+1>END_CASE;6.4語(yǔ)句如果表達(dá)式或變量的值等于常量1,則執(zhí)行<指令1>,然后直接跳轉(zhuǎn)到END_CASE處,該語(yǔ)句結(jié)構(gòu)執(zhí)行結(jié)束,繼續(xù)往下執(zhí)行。如果等于常量2,則執(zhí)行<指令2>,跳轉(zhuǎn)到END_CASE處繼續(xù)往下執(zhí)行;以此類(lèi)推,如果等于常量n,則執(zhí)行<指令n>,然后跳轉(zhuǎn)到END_CASE處繼續(xù)往下執(zhí)行。如果都不等于ELSE前的任何一個(gè)常量,則執(zhí)行ELSE后的<指令n+1>。ELSE是一個(gè)可選的語(yǔ)法部分,可以省略。如果有ELSE,那么在列出的所有n+1個(gè)指令中,必有且僅有一個(gè)指令被執(zhí)行。如果沒(méi)有ELSE,當(dāng)ELSE前面列出的n個(gè)常量全部都不滿足的時(shí)候,將直接跳轉(zhuǎn)到END_CASE結(jié)束該語(yǔ)句,也就是沒(méi)有執(zhí)行任何<指令>。6.4語(yǔ)句循環(huán)語(yǔ)句(1)FOR循環(huán)在SCL中,F(xiàn)OR循環(huán)是一種常用的循環(huán)結(jié)構(gòu),用于迭代執(zhí)行代碼塊。FOR循環(huán)參數(shù)見(jiàn)表6-3所示,F(xiàn)OR循環(huán)語(yǔ)句結(jié)構(gòu)如下:表6-3FOR循環(huán)參數(shù)說(shuō)明參數(shù)說(shuō)明循環(huán)變量必需。整型(Int或Dint),用作循環(huán)計(jì)數(shù)器初始值必需。指定控制變量初始值的簡(jiǎn)單表達(dá)式終值必需。確定控制變量最終值的簡(jiǎn)單表達(dá)式步值可選。每次循環(huán)后<循環(huán)變量>的變化量。布值與循環(huán)變量具有相同的數(shù)據(jù)類(lèi)型。如果未指定步值,則每次循環(huán)之后,運(yùn)行變量的值加1。不能在執(zhí)行FOR語(yǔ)句期間更改步值。6.4語(yǔ)句FOR<循環(huán)變量>:=<初始值>TO<終值>BY<步值>DO<代碼塊>END_FOR;FOR循環(huán)的工作原理如下:①初始化循環(huán)變量為指定的初始值,這兩個(gè)值的數(shù)據(jù)類(lèi)型必須與控制變量的相同。②檢查循環(huán)變量是否小于等于終值。如果是,則繼續(xù)執(zhí)行循環(huán)體;如果不是,則跳出循環(huán)執(zhí)行END_FOR后面的指令。③執(zhí)行循環(huán)體內(nèi)的代碼。④循環(huán)變量按指定的步長(zhǎng)遞增,然后返回步驟2。6.4語(yǔ)句【例6-1】使用FOR循環(huán)計(jì)算從1到50的所有整數(shù)的總和。圖6-3【例6-1】代碼與監(jiān)控6.4語(yǔ)句如圖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加上之前的求和總量,接下來(lái)Number_1的值變?yōu)?1,超出了循環(huán)終值51,因此循環(huán)結(jié)束,求FOR循環(huán)求得和值為1275。6.4語(yǔ)句(2)WHILE循環(huán)使用“滿足條件時(shí)執(zhí)行”指令可以重復(fù)執(zhí)行程序循環(huán),直至不滿足執(zhí)行條件為止。WHILE循環(huán)參數(shù)見(jiàn)表6-4所示,其語(yǔ)句結(jié)構(gòu)如下:WHILE<條件>DO<指令>;END_WHILE;WHILE循環(huán)的工作原理是先判斷,再執(zhí)行,即①先判斷條件;②可以重復(fù)執(zhí)行程序循環(huán);③直至不滿足執(zhí)行條件為止。6.4語(yǔ)句6.4語(yǔ)句表6-4WHILE循環(huán)參數(shù)說(shuō)明參數(shù)說(shuō)明條件必需。值為T(mén)RUE或FALSE的邏輯表達(dá)式。(“null”條件被視為FALSE)指令可選。在條件值不滿足之前執(zhí)行的一條或多條語(yǔ)句?!纠?-2】求整數(shù)1+2+3+...50的和。6.4語(yǔ)句圖6-4【例6-2】代碼與監(jiān)控6.4語(yǔ)句如圖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語(yǔ)句以此類(lèi)推,當(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)開(kāi)始前不知道確切的循環(huán)次數(shù)的情況下。REPEAT指令參數(shù)見(jiàn)參數(shù)見(jiàn)表6-5所示,REPEAT指令格式如下:6.4語(yǔ)句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語(yǔ)句表6-5REPEAT指令參數(shù)說(shuō)明參數(shù)說(shuō)明條件必需。一個(gè)或多個(gè)用以下兩種方式表達(dá)的表達(dá)式:值為T(mén)RUE或FALSE的數(shù)字表達(dá)式或字符串表達(dá)式。“null”條件被視為FALSE。指令可選。在條件值為T(mén)RUE之前執(zhí)行的一條或多條語(yǔ)句。6.4語(yǔ)句【例6-3】求整數(shù)1+2+3+...50的和圖6-5【例6-3】代碼與監(jiān)控6.4語(yǔ)句如圖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)備。以此類(lèi)推,當(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語(yǔ)句(4)CONTINUE語(yǔ)句在SCL中,使用CONTINUE“復(fù)查循環(huán)條件”指令,可以結(jié)束FOR、WHILE或REPEAT循環(huán)的當(dāng)前程序運(yùn)行。執(zhí)行該指令后,將再次計(jì)算繼續(xù)執(zhí)行程序循環(huán)的條件開(kāi)始下一個(gè)循環(huán)。該指令將影響其所在的程序循環(huán)。CONTINUE的語(yǔ)法格式為:CONTINUE;6.4語(yǔ)句CONTINUE語(yǔ)句只有CONTINUE一個(gè)關(guān)鍵詞加英文分號(hào)。CONTINUE指令只能在循環(huán)結(jié)構(gòu)語(yǔ)句中使用,如FOR、WHILE或REPEAT循環(huán)。使用CONTINUE后,循環(huán)體中的所有剩余代碼都將被跳過(guò),因此要確保在跳過(guò)當(dāng)前迭代后不會(huì)引發(fā)未初始化的變量或邏輯錯(cuò)誤。CONTINUE語(yǔ)句的流程圖如右圖所示。6.4語(yǔ)句【例6-4】用CONTINUE語(yǔ)句求自然數(shù)0到100之間所有奇數(shù)之和。圖6-7【例6-4】代碼與監(jiān)控6.4語(yǔ)句如圖6-7所示,在WHILE循環(huán)的循環(huán)體中首先讓Number_1不斷加1,將Number_1除以2的余數(shù)賦值給Number_2,如果余數(shù)是0,說(shuō)明是偶數(shù)則不執(zhí)行循環(huán)體中CONTINUE后面的語(yǔ)句即將數(shù)值累加到Sum_1中,程序會(huì)重新回到WHILE中的條件判斷語(yǔ)句,如果余數(shù)不是0,那么將執(zhí)行CONTINUE后面的累加指令。當(dāng)Number_1的數(shù)值變成99,進(jìn)入循環(huán)體中的加1操作變成100,因?yàn)槭桥紨?shù)所以直接跳到WHILE條件語(yǔ)句處,因?yàn)椴环蠗l件所以直接跳到END_WHILE結(jié)束大循環(huán),Number_1的值也停留在100,求得所有奇數(shù)和值為2500。6.4語(yǔ)句(5)EXIT語(yǔ)句在SCL中,EXIT是立即退出循環(huán)語(yǔ)句。使用“立即退出循環(huán)”指令,可以隨時(shí)取消FOR、WHILE或REPEAT循環(huán)的執(zhí)行,而無(wú)需考慮是否滿足條件。在循環(huán)結(jié)束(END_FOR、END_WHILE或END_REPEAT)后繼續(xù)執(zhí)行程序。該指令將影響其所在的程序循環(huán),如圖6-8所示。立即退出循環(huán)指令格式為:EXIT;6.4語(yǔ)句【例6-5】用EXIT語(yǔ)句求自然數(shù)0到100之間所有偶數(shù)之和。圖6-9【例6-5】代碼與監(jiān)控6.4語(yǔ)句如圖6-9例子中,我們定義了一個(gè)Int變量Sum_1來(lái)存儲(chǔ)偶數(shù)的總和,并將其初始化為0。定義了一個(gè)Int型變量Number_1作為循環(huán)計(jì)數(shù)器,從0開(kāi)始。定義了一個(gè)Int型變量Number_2來(lái)判斷Number_1的奇偶性質(zhì)。使用WHILETRUE創(chuàng)建一個(gè)無(wú)限循環(huán)。在每次循環(huán)迭代中,檢查Number_1是否為偶數(shù),如果是,則將其加Sum_1中。遞增Number_1的值,并在Number_1超過(guò)100時(shí)使用EXIT語(yǔ)句退出循環(huán)。6.4語(yǔ)句跳轉(zhuǎn)語(yǔ)句(GOTO)使用GOTO“跳轉(zhuǎn)”語(yǔ)句允許程序跳轉(zhuǎn)到指定的標(biāo)簽位置,從而改變程序的執(zhí)行流程。GOTO指令類(lèi)似于西門(mén)子S7-200的JMP無(wú)條件跳轉(zhuǎn)指令。使用GOTO指令的注意事項(xiàng)有:①在OB/FB/FC中使用GOTO指令時(shí),必須新建SCL程序塊,特別是在OB中只有新建SCL語(yǔ)言的OB塊才能使用GOTO指令,若以插入SCL程序段的方式將無(wú)法支持使用GOTO指令。②跳轉(zhuǎn)標(biāo)簽和“跳轉(zhuǎn)”指令必須在同一個(gè)塊中。在一個(gè)塊中,跳轉(zhuǎn)標(biāo)簽的名稱(chēng)只能指定一次。每個(gè)跳轉(zhuǎn)標(biāo)簽可以是多個(gè)跳轉(zhuǎn)指令的目標(biāo)。6.4語(yǔ)句③不允許從“外部”跳轉(zhuǎn)到程序循環(huán)內(nèi),但允許從循環(huán)內(nèi)跳轉(zhuǎn)到“外部”。④雖然GOTO和標(biāo)簽提供了編程的靈活性,但代碼中過(guò)多地使用GOTO語(yǔ)句會(huì)導(dǎo)致程序結(jié)構(gòu)混亂,不斷跳轉(zhuǎn)的代碼也不利于程序的理解和維護(hù),因此需謹(jǐn)慎使用GOTO語(yǔ)句。GOTO語(yǔ)句的語(yǔ)法格式為:GOTO<跳轉(zhuǎn)標(biāo)簽>......<跳轉(zhuǎn)標(biāo)簽>:<指令>;...6.4語(yǔ)句【例6-6】用GOTO語(yǔ)句求自然數(shù)0到100之間所有奇數(shù)之和。圖6-10【例6-6】代碼與監(jiān)控6.4語(yǔ)句如圖6-10示例中,首先給Sum_1和Number_1變量賦初值,然后在WHILE循環(huán)的循環(huán)體中編寫(xiě)Label1標(biāo)簽指令讓Number_1不斷加1,接著在IF語(yǔ)句中對(duì)Number_1除以2的余數(shù)進(jìn)行判斷,余數(shù)為0說(shuō)明是偶數(shù)則跳轉(zhuǎn)到Label1標(biāo)簽指令繼續(xù)執(zhí)行Number_1加1操作,如果余數(shù)不為0說(shuō)明是奇數(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條件語(yǔ)句處時(shí),因?yàn)椴环蠗l件所以直接跳到END_WHILE結(jié)束大循環(huán),Number_1的值也停留在99,求得所有奇數(shù)和值為2500。6.4語(yǔ)句退出塊(RETURN)指令使用“退出塊”指令,可以終止當(dāng)前處理塊中的程序執(zhí)行,并在調(diào)用塊中繼續(xù)執(zhí)行。如果該指令出現(xiàn)在塊結(jié)尾處,則可以跳過(guò)。該語(yǔ)句的格式為:RETURN;【例6-7】RETURN語(yǔ)句的用法6.4語(yǔ)句圖6-11【例6-7】代碼6.4語(yǔ)句如圖6-11示例中,使用一個(gè)CASE語(yǔ)句,根據(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塊中編寫(xiě)RETURN程序,在FC塊的接口區(qū),Input_1放在FC塊的input參數(shù)中,OUT_1放在FC塊的output參數(shù)中。在OB塊中調(diào)用該FC塊,打開(kāi)監(jiān)視狀態(tài),修改Input_1的值,觀察輸出的值。如圖6-12所示。6.4語(yǔ)句圖6-12【例6-7】調(diào)試監(jiān)控狀態(tài)6.4語(yǔ)句注釋用于解釋程序,幫助讀者理解程序,不影響程序的運(yùn)行。對(duì)程序進(jìn)行正確地注釋是良好的編程習(xí)慣??赏ㄟ^(guò)以下幾種方式為文本塊接口中的變量添加注釋?zhuān)孩傩凶⑨屝凶⑨屢浴?/”開(kāi)頭,僅延續(xù)到到行尾。行注釋可以不在代碼行首,但是跨行后不連續(xù),若跨行需重新加行注釋符號(hào)“//”?!纠?-8】//這是一個(gè)單行注釋。②注釋段注釋段以“(*”開(kāi)始,以“*)”結(jié)束。該注釋可跨多個(gè)行。括號(hào)內(nèi)“(*...*)”的文本將處理為注釋信息。6.4語(yǔ)句【例6-9】(*這是一個(gè)注釋段:本項(xiàng)目工程使用西門(mén)子S7-1200PLC,CPU型號(hào)1214C/AC/DC/RLY,訂貨號(hào)6ES7214-1BG40-0XB0,固件版本V4.2,軟件版本為T(mén)IAPortalV16。*)③多語(yǔ)言注釋多語(yǔ)言注釋是一個(gè)以“(/*”開(kāi)始,以“*/)”結(jié)束的單元。即,只能對(duì)整個(gè)注釋進(jìn)行標(biāo)記或選擇,而不能選擇其中一部分。多語(yǔ)言注釋不能相互嵌套,但在注釋行和注釋段中使用。所不同的是,在多語(yǔ)言注釋中不能使用注釋行或簡(jiǎn)單的注釋段?!纠?-10】(/*該注釋可翻譯為其它項(xiàng)目語(yǔ)言。*/)6.5數(shù)組1、Array(數(shù)組)是一種數(shù)據(jù)結(jié)構(gòu),是一種由固定數(shù)量、固定編號(hào)、同一種數(shù)據(jù)類(lèi)型的元素組成的集合。數(shù)組中每一個(gè)元素都有一個(gè)編號(hào),這個(gè)編號(hào)也稱(chēng)為索引或下標(biāo)。數(shù)組可以在OB、FC、FB和DB的塊接口編輯器中創(chuàng)建。但是無(wú)法在PLC變量編輯器中創(chuàng)建數(shù)組。在SCL中,目前只能聲明固定元素?cái)?shù)量的數(shù)組。6.5數(shù)組數(shù)組的特點(diǎn)有:1、數(shù)組中全部元素的數(shù)據(jù)類(lèi)型必須是相同的,這里的數(shù)據(jù)類(lèi)型可以是數(shù)組之外的其他任何數(shù)據(jù)類(lèi)型,比如Int型、Real型等。2、數(shù)組的下標(biāo)可以為負(fù),但起始下標(biāo)必須小于或等于結(jié)束下標(biāo)。3、數(shù)組可以是一維到六維數(shù)組,SCL語(yǔ)言支持最多六維數(shù)組。4、用兩個(gè)英文點(diǎn)號(hào)分隔同一維的最小最大值聲明,用英文逗號(hào)隔開(kāi)不同維度。5、不允許使用嵌套數(shù)組或數(shù)組的數(shù)組。6、數(shù)組的存儲(chǔ)器大小=(一個(gè)元素的大小*數(shù)組中的元素的總數(shù))6.5數(shù)組數(shù)組在使用前要先聲明,具體見(jiàn)表6-6所示。聲明一維數(shù)組的語(yǔ)法格式為:Array[min..max]of<type>。其中:min-數(shù)組的起始(最低)下標(biāo)max-數(shù)組的結(jié)束(最高)下標(biāo)type-數(shù)據(jù)類(lèi)型之一,例如BOOL、Char聲明多維數(shù)組的語(yǔ)法格式為:Array[索引1_min..索引1_max,索引N_min..索引N_max]of<type>6.5數(shù)組表6-6數(shù)組的聲明數(shù)組索引有效索引類(lèi)型數(shù)組索引規(guī)則常量或變量USInt,Sint,Uint,Int,UDInt,DInt限值:-32768到+32767有效:常量和變量混合有效:常量表達(dá)式無(wú)效:變量表達(dá)式6.5數(shù)組要在塊接口編輯器中創(chuàng)建一維數(shù)組,命名好數(shù)組名稱(chēng)如數(shù)組_A,數(shù)據(jù)類(lèi)型需選擇“Array[0..1]of”,然后在下拉列表中選擇需要的數(shù)據(jù)類(lèi)型如“Array[0..1]ofBOOL”。點(diǎn)擊數(shù)據(jù)類(lèi)型單元格右側(cè)的下三角圖標(biāo),在“數(shù)組限值”中以英文兩點(diǎn)..隔開(kāi)分別輸入輸入數(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)隔開(kāi)輸入多組起始下標(biāo)和結(jié)束下標(biāo)即可,具體見(jiàn)表6-7所示。表6-7多維數(shù)組聲明示例名稱(chēng)數(shù)據(jù)類(lèi)型數(shù)組維數(shù)說(shuō)明數(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]是對(duì)數(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語(yǔ)言求數(shù)組A_1中所有數(shù)組的和。6.5數(shù)組a)數(shù)組A_1設(shè)定起始值

b)代碼與監(jiān)控圖6-14【例6-11】數(shù)組元素的引用6.6指針在西門(mén)子S7-1200PLC中,使用SCL編程時(shí),指針是一個(gè)重要的概念,它提供了對(duì)數(shù)據(jù)存儲(chǔ)位置的引用,使得程序可以更加靈活和高效地操作數(shù)據(jù)。指針是存儲(chǔ)其他變量地址的變量。在S7-1200SCL中,你可以使用指針來(lái)訪問(wèn)和操作存儲(chǔ)在PLC內(nèi)存中的數(shù)據(jù)。西門(mén)子的指針包括Pointer、Any、Variant三種指針類(lèi)型。S7-300/400/1500支持Pointer和Any類(lèi)型,S7-1200只支持Variant類(lèi)型。6.6指針Variant數(shù)據(jù)類(lèi)型可以指向PLC中不同數(shù)據(jù)類(lèi)型的變量或參數(shù)(包括數(shù)組、結(jié)構(gòu)體、自定義數(shù)據(jù)類(lèi)型)的變量或參數(shù)。比Any功能更強(qiáng)大。Variant指針可以指向結(jié)構(gòu)和單獨(dú)的結(jié)構(gòu)元素。Variant數(shù)據(jù)類(lèi)型的操作數(shù)不會(huì)占用背景數(shù)據(jù)塊或者工作存儲(chǔ)器的任何空間,但是會(huì)占用CPU上的裝載存儲(chǔ)器的存儲(chǔ)空間。Variant數(shù)據(jù)類(lèi)型的參數(shù)是對(duì)已經(jīng)存在的變量的引用,相當(dāng)于被引用變量的別名。只能在FC/FB/OB的形參中聲明某個(gè)參數(shù)的類(lèi)型為Variant,而不能在DB數(shù)據(jù)塊和FB塊的靜態(tài)變量聲明Variant類(lèi)型的元素。6.6指針在對(duì)FC/FB的Variant形參賦實(shí)參時(shí),可以是任何類(lèi)型的變量,調(diào)用該FC和FB時(shí),在傳遞變量值的同時(shí),而且會(huì)傳遞變量的類(lèi)型。具體與Variant有關(guān)的常用指令見(jiàn)表6-8所示:表6-8Variant類(lèi)型指令與說(shuō)明指令功能指令說(shuō)明確定數(shù)據(jù)類(lèi)型TypeOf():檢查VARIANT變量的數(shù)據(jù)類(lèi)型(該指令僅適用于SCL,且只能與IF或CASE指令一起使用。)可使用該指令將VARIANT變量指向的數(shù)據(jù)類(lèi)型與任何其它變量的數(shù)據(jù)類(lèi)型進(jìn)行比較。也可以與PLC數(shù)據(jù)類(lèi)型作比較。讀取VARIANT指向的數(shù)據(jù)VariantGet:讀取VARIANT變量值可使用該指令將單個(gè)變量的值移到另一個(gè)變量中。這兩個(gè)變量的數(shù)據(jù)類(lèi)型必須匹配。將數(shù)據(jù)分配給VARIANT變量VariantPut:寫(xiě)入VARIANT變量值可使用該指令將單個(gè)變量的值移到另一個(gè)變量中。這兩個(gè)變量的數(shù)據(jù)類(lèi)型必須匹配。6.6指針【例6-12】一個(gè)加法FB塊,實(shí)現(xiàn)功能為當(dāng)Input形參是二個(gè)Input類(lèi)型,二數(shù)相減,輸出給OUTPUT_1。如果Input形參是二個(gè)REAL類(lèi)型,二數(shù)相減,輸出給OUTPUT_2。如圖6-15所示。圖6-15【例6-12】Variant類(lèi)型的應(yīng)用6.7程序塊的調(diào)用(SCL)對(duì)于程序塊的調(diào)用,調(diào)用可以項(xiàng)目樹(shù)程序塊中選中FC或FB塊拖拽入程序編輯區(qū)域,也可以在調(diào)用塊中直接輸入被調(diào)用塊的名稱(chēng)進(jìn)行調(diào)用。FC的調(diào)用在SCL中對(duì)FC調(diào)用的格式為:"FC塊名稱(chēng)"(輸入形參:=實(shí)參,輸出形參=>實(shí)參,輸入輸出形參:=實(shí)參...);FC調(diào)用需要確保所有形參都有對(duì)應(yīng)實(shí)參。如果沒(méi)有參數(shù)的FC也需要有括號(hào)。6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。如圖6-16所示第一步,首先刪除默認(rèn)的OB1,新建SCL的OB1塊;圖6-16第一步6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-17第二步如圖6-17所示第二步,點(diǎn)添加新塊,新建FC的SCL程序塊,塊名稱(chēng)修改為起保停,語(yǔ)言選擇SCL6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-18第三步如圖6-18所示第三步:在FC接口區(qū)內(nèi)定義形參;6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。如圖6-19所示第四步:在FC程序區(qū)內(nèi)編寫(xiě)起保停程序;如圖6-20所示第五步:在OB塊內(nèi)調(diào)用FC,以變量表中的變量填充實(shí)參;圖6-19第四步圖6-20第五步6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-21第六步如圖6-21所示第六步:編譯無(wú)誤后,下載到PLC,在OB塊打開(kāi)監(jiān)控進(jìn)行調(diào)試。當(dāng)Button_1按下,電機(jī)Motor_1為T(mén)RUE,當(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為T(mén)RUE,當(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語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-21第六步如圖6-21所示第六步:編譯無(wú)誤后,下載到PLC,在OB塊打開(kāi)監(jiān)控進(jìn)行調(diào)試。當(dāng)Button_1按下,電機(jī)Motor_1為T(mén)RUE,當(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為T(mén)RUE,當(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ù)塊名稱(chēng)"(輸入形參:=實(shí)參,輸出形參=>實(shí)參,輸入輸出形參:=實(shí)參...);一般情況下,F(xiàn)B的簡(jiǎn)單數(shù)據(jù)類(lèi)型形參可以沒(méi)有對(duì)應(yīng)實(shí)參,復(fù)雜數(shù)據(jù)類(lèi)型的輸入、輸出也可以沒(méi)有對(duì)應(yīng)實(shí)參,所以FB可以隱藏或不隱藏不出現(xiàn)的形參。如果沒(méi)有參數(shù)的FB也需要有括號(hào)。當(dāng)FB的參數(shù)全部顯示或只顯示了分配的參數(shù),鼠標(biāo)右鍵單擊被調(diào)用FB的背景數(shù)據(jù)塊,將對(duì)應(yīng)出現(xiàn)"僅顯示分配的參數(shù)"或"顯示所有參數(shù)",從而改變FB參數(shù)的全部顯示或部分顯示狀態(tài)。6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂疲?dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-22第二步第一步,首先刪除默認(rèn)的OB1,新建SCL的OB1塊;(同例6-13)如圖6-22所示第二步:點(diǎn)添加新塊,新建FB的SCL程序塊,塊名稱(chēng)修改為起保停,語(yǔ)言選擇SCL;6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂疲?dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-23第三步如圖6-23所示第三步:在FB接口區(qū)內(nèi)定義形參;6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-24第四步如圖6-24所示第四步:在FB程序區(qū)內(nèi)編輯程序;6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-25第五步如圖6-25所示第五步:在數(shù)據(jù)塊DB中定義兩臺(tái)電機(jī)起保停的實(shí)參,實(shí)參和FB內(nèi)的形參數(shù)據(jù)類(lèi)型匹配6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對(duì)應(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)分配好名稱(chēng)編號(hào)6.7程序塊的調(diào)用(SCL)【例6-14】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-27第七步如圖6-27所示第七步:將數(shù)據(jù)塊中的實(shí)參變量分配到“起保停_DB2”和“起保停_DB3”后面括號(hào)內(nèi)對(duì)應(yīng)的形參;6.7程序塊的調(diào)用(SCL)【例6-13】基于SCL語(yǔ)言使用FC實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停。圖6-21第六步如圖6-21所示第六步:編譯無(wú)誤后,下載到PLC,在OB塊打開(kāi)監(jiān)控進(jìn)行調(diào)試。當(dāng)Button_1按下,電機(jī)Motor_1為T(mén)RUE,當(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為T(mén)RUE,當(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語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保停控制,當(dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-28第八步如圖6-28所示第八步:編譯無(wú)誤后,下載到PLC,在OB塊打開(kāi)監(jiān)控進(jìn)行調(diào)試。當(dāng)Motor_1Start按下,電機(jī)Motor1_KM為T(mén)RUE,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語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的起保??刂?,當(dāng)電機(jī)運(yùn)行時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。圖6-28第八步如圖6-28所示第八步:編譯無(wú)誤后,下載到PLC,在OB塊打開(kāi)監(jiān)控進(jìn)行調(diào)試。當(dāng)Motor_1Start按下,電機(jī)Motor1_KM為T(mén)RUE,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í)器為例說(shuō)明FB的多重實(shí)例的應(yīng)用。6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語(yǔ)言使用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程序塊,塊名稱(chēng)修改為星三角啟動(dòng),語(yǔ)言選擇SCL(同例6-13);如圖6-29所示第三步:在FB接口區(qū)定義形參;6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語(yǔ)言使用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語(yǔ)言使用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ù)類(lèi)型匹配6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三角切換時(shí)間分別為5秒和10秒。圖6-32第六步如圖6-32所示第六步:在OB塊中調(diào)用兩次星三角啟動(dòng)FB塊,直接將FB塊用鼠標(biāo)拖動(dòng)至OB塊內(nèi),為每次FB塊的單個(gè)實(shí)例(背景DB)分配好名稱(chēng)編號(hào)6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三角切換時(shí)間分別為5秒和10秒。如圖6-33所示第七步:將數(shù)據(jù)塊DB中的實(shí)參圖6-33第七步6.7程序塊的調(diào)用(SCL)【例6-15】基于SCL語(yǔ)言使用FB實(shí)現(xiàn)兩臺(tái)電機(jī)的星三角啟動(dòng)控制,兩臺(tái)電機(jī)的星三角切換時(shí)間分別為5秒和10秒。圖6-34第八步如圖6-34所示第八步:編譯無(wú)誤后,下載到PLC,在DB塊打開(kāi)監(jiān)控進(jìn)行調(diào)試。當(dāng)?shù)谝慌_(tái)電機(jī)的Motor1_Srart按下,主接觸器KM_1和星形接觸器KM_2為T(mén)RUE,同時(shí)時(shí)間繼電器開(kāi)始計(jì)時(shí),當(dāng)Motor1_Srart復(fù)位后,KM1和KM2仍為T(mén)RUE實(shí)現(xiàn)自鎖,當(dāng)定時(shí)器計(jì)時(shí)5秒到了后,KM1保持TRUE不變,KM2為FALSE,角形接觸器KM3變?yōu)門(mén)RUE,星三角啟動(dòng)完成。當(dāng)按下第一臺(tái)電機(jī)的停止按鈕Motor1_Stop、KM_1、KM_2和KM_3和定時(shí)時(shí)間當(dāng)前值都復(fù)位。當(dāng)?shù)诙_(tái)電機(jī)的Motor2_Srart按下,主接觸器KM_1和星形接觸器KM_2為T(mén)RUE,同時(shí)時(shí)間繼電器開(kāi)始計(jì)時(shí),當(dāng)Motor2_Srart復(fù)位后,KM1和KM2仍為T(mén)RUE實(shí)現(xiàn)自鎖,當(dāng)定時(shí)器計(jì)時(shí)10秒到了后,KM1保持TRUE不變,KM2為FALSE,角形接觸器KM3變?yōu)門(mén)RUE,星三角啟動(dòng)完成。當(dāng)按下第2臺(tái)電機(jī)的停止按鈕Motor2_Stop、KM_1、KM_2和KM_3和定時(shí)時(shí)間當(dāng)前值都復(fù)位。6.7程序塊的調(diào)用(SCL)在SCL中,和LAD一樣也可以將待使用的塊實(shí)例作為in-out參數(shù)(InOut)傳送到調(diào)用塊中。在SCL中參數(shù)實(shí)例調(diào)用的格式是:#參數(shù)實(shí)例名稱(chēng)(輸入形參:=實(shí)參,輸出形參=>實(shí)參,輸入輸出形參:=實(shí)參...);【例6-16】基于SCL語(yǔ)言使用參數(shù)實(shí)例實(shí)現(xiàn)三盞燈的延時(shí)4秒熄滅控制,當(dāng)按下啟動(dòng)按鈕燈亮,4秒后自動(dòng)熄滅,在4s期間若按下停止按鈕則提前熄滅。【例6-16】具體步驟參見(jiàn)章節(jié)6.7.46.8實(shí)操案例14:多液體混合裝置控制任務(wù):使用S7-1200PLC實(shí)現(xiàn)一個(gè)多液體混合裝置控制。根據(jù)圖4-96所示,控制要求如下:1.當(dāng)用戶按下啟動(dòng)按鈕后,電池閥YV3打開(kāi)10秒,用于放空混合裝置里的液體,時(shí)間到了YV3關(guān)閉閥門(mén),YV1電池閥打開(kāi)放入液體A。2.當(dāng)放入液體A到達(dá)液面?zhèn)鞲衅鱏L2時(shí),電池閥YV1關(guān)閉,電池閥YV2打開(kāi)放入液體B至液面?zhèn)鞲衅鱏L1,關(guān)閉電磁閥YV2。3.當(dāng)關(guān)閉電磁閥YV2后,攪拌電動(dòng)機(jī)啟動(dòng)運(yùn)行:正轉(zhuǎn)控制5秒、反轉(zhuǎn)控制8秒、停3秒,連續(xù)5次。4.當(dāng)攪拌電機(jī)攪拌5次完成后,電磁閥YV3打開(kāi),放出混合液體,流程結(jié)束。5.任何時(shí)候按下停止按鈕設(shè)備立即停止工作,所有電磁閥關(guān)閉。6.8實(shí)操案例14:多液體混合裝置控制步驟:I/O分配表(見(jiàn)章節(jié)4.8.7)2.PLC外部接線圖(見(jiàn)章節(jié)4.8.7)3.編寫(xiě)程序PLC變量定義與全局DB變量定義請(qǐng)查閱章節(jié)4.8.8的圖4-98和圖4-99所示。圖6-42放入液體FC子程序SCL程序6.8實(shí)操案例14:多液體混合裝置控制圖6-43多液體混合裝置控制用GOTO指令編寫(xiě)SCL程序6.8實(shí)操案例14:多液體混合裝置控制圖6-43多液體混合裝置控制用GOTO指令編寫(xiě)SCL程序6.8實(shí)操案例14:多液體混合裝置控制4.調(diào)試與思考我們通過(guò)LAD進(jìn)行一比一的轉(zhuǎn)換,用GOTO代替了JMP,那么我們能否用其它循環(huán)控制指令進(jìn)行LAD的程序演化呢?接下來(lái)用CASE指令進(jìn)行轉(zhuǎn)換一下。圖6-64全局DB塊變量定義6.8實(shí)操案例14:多液體混合裝置控制圖6-65多液位混合裝置控制用CASE指令編寫(xiě)SCL程序6.8實(shí)操案例14:多液體混合裝置控制圖6-65多液位混合裝置控制用CASE指令編寫(xiě)SCL程序6.8實(shí)操案例14:多液體混合裝置控制圖6-65多液位混合裝置控制用CASE指令編寫(xiě)SCL程序起立,下課!第七章

S7-1200PLC基本指令(SCL)第七章S7-1200PLC基本指令(SCL)

位邏輯運(yùn)算1

定時(shí)器操作2

計(jì)數(shù)器操作3

比較操作4-103-

數(shù)學(xué)函數(shù)5

移動(dòng)操作6

轉(zhuǎn)換操作7

字邏輯運(yùn)算8

移位和循環(huán)9理論課程電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制1三相異步電動(dòng)機(jī)Y-△降壓?jiǎn)?dòng)控制2車(chē)庫(kù)出入口閘機(jī)控制3十字路口交通燈控制4數(shù)學(xué)運(yùn)算指令的綜合應(yīng)用5一個(gè)數(shù)碼管顯示9秒的倒計(jì)時(shí)控制6深度測(cè)量傳感器模擬量控制7圓盤(pán)工件箱捷徑傳送控制8八層霓虹燈塔控制9第七章S7-1200PLC基本指令(SCL)實(shí)踐操作7.1位邏輯運(yùn)算R_TRIG經(jīng)常用于啟動(dòng)僅需執(zhí)行一次的操作,例如計(jì)數(shù)器的加一操作、觸發(fā)一個(gè)短暫的動(dòng)作、或者啟動(dòng)一個(gè)只需要在特定條件變化時(shí)觸發(fā)的過(guò)程。1、指令添加步驟(1)將系統(tǒng)默認(rèn)的OB1刪除,新建SCL的OB塊,如圖7-1所示。圖7-1新建SCL的OB塊7.1位邏輯運(yùn)算(2)進(jìn)入OB塊后,在右側(cè)指令欄-基本指令-位邏輯運(yùn)算中找到“R_TRIG”指令,雙擊。(3)在彈出的調(diào)用選項(xiàng)中默認(rèn)單個(gè)實(shí)例,對(duì)其數(shù)據(jù)塊命名和編號(hào),如圖7-2所示。圖7-2配置R_TRIG指令的背景數(shù)據(jù)塊7.1位邏輯運(yùn)算加入完成后,可以在左側(cè)項(xiàng)目工程系統(tǒng)塊中看到自動(dòng)生成的R_TRIG[FB1001]塊和R_TRIG_DB[DB1]塊。程序段中出現(xiàn)了R_TRIG指令的SCL程序。輸入變量的上一個(gè)狀態(tài)即存儲(chǔ)在R_TRIG_DB[DB1]塊中,如圖7-3所示。圖7-3系統(tǒng)生成的R_TRIG和F_TRIG程序塊7.1位邏輯運(yùn)算2、指令參數(shù)說(shuō)明R_TRIG用于檢測(cè)輸入信號(hào)的上升沿,即從0變到1的瞬間,CLK中變量的上一個(gè)狀態(tài)存儲(chǔ)在“R_TRIG_DB”變量中。當(dāng)R_TRIG檢測(cè)到其輸入?yún)?shù)的上升沿時(shí),它會(huì)在一個(gè)掃描周期內(nèi)將其輸出Q設(shè)置為1。在下一個(gè)掃描周期開(kāi)始時(shí),輸出會(huì)自動(dòng)重置為0。在其它任何情況下,該指令輸出的信號(hào)狀態(tài)均為“0”。該指令的參數(shù)表如表7-1所示。表7-1上升沿指令的參數(shù)情況功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"R_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);

CLKBOOLQBOOL7.1位邏輯運(yùn)算CLK(輸入):控制輸入端子,BOOL量,通常連接到I、Q、M、D、L中任一存儲(chǔ)區(qū)變量或硬件輸入。當(dāng)這個(gè)輸入從0變?yōu)?時(shí),上升沿被激活。Q(輸出):輸出信號(hào)端子,BOOL量,通常連接到I、Q、M、D、L中任一存儲(chǔ)區(qū)變量或硬件輸出。當(dāng)檢測(cè)到輸入的上升沿時(shí),在一個(gè)PLC掃描周期中,這個(gè)輸出會(huì)被設(shè)置為1。3、注意事項(xiàng)(1)使用R_TRIG時(shí),需要注意PLC的掃描周期,因?yàn)檩敵鯭只在一個(gè)掃描周期內(nèi)為1。(2)R_TRIG適合用于檢測(cè)短暫事件,因?yàn)樗鼉H在檢測(cè)到上升沿的那個(gè)掃描周期內(nèi)激活輸出。7.1位邏輯運(yùn)算該指令主要用于檢測(cè)一個(gè)信號(hào)的下降沿,即從邏輯“1”(高電平)到邏輯“0”(低電平)的轉(zhuǎn)變。F_TRIG在自動(dòng)化領(lǐng)域內(nèi)廣泛應(yīng)用于各種場(chǎng)景,比如捕捉按鈕的釋放、監(jiān)測(cè)傳感器的狀態(tài)變化等。1、指令添加步驟(1)將系統(tǒng)默認(rèn)的OB1刪除,新建SCL的OB塊;(2)進(jìn)入OB塊后,在右側(cè)指令欄-基本指令-位邏輯運(yùn)算中找到“F_TRIG”指令,雙擊。(3)在彈出的調(diào)用選項(xiàng)中默認(rèn)單個(gè)實(shí)例,對(duì)其數(shù)據(jù)塊命名和編號(hào),如圖7-4所示。7.1位邏輯運(yùn)算加入完成后,可以在左側(cè)項(xiàng)目工程系統(tǒng)塊中看到自動(dòng)生成的F_TRIG[FB1002]塊和F_TRIG_DB[DB1]塊。程序段中出現(xiàn)了F_TRIG指令的SCL程序。輸入變量的上一個(gè)狀態(tài)即存儲(chǔ)F_TRIG_DB[DB1]塊中,如圖7-3所示。圖7-4配置F_TRIG指令背景數(shù)據(jù)塊7.1位邏輯運(yùn)算2、指令參數(shù)說(shuō)明F_TRIG用于檢測(cè)輸入信號(hào)的下降沿,即從1變到0的瞬間,CLK中變量的上一個(gè)狀態(tài)存儲(chǔ)在“F_TRIG_DB”變量中。當(dāng)F_TRIG檢測(cè)到其輸入?yún)?shù)的下降沿時(shí),它會(huì)在一個(gè)掃描周期內(nèi)將其輸出Q設(shè)置為1。在下一個(gè)掃描周期開(kāi)始時(shí),輸出會(huì)自動(dòng)重置為0。在其它任何情況下,該指令輸出的信號(hào)狀態(tài)均為“0”。該指令的參數(shù)表如表7-2所示。表72下降沿指令的參數(shù)情況功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"F_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);

CLKBOOLQBOOL7.1位邏輯運(yùn)算CLK(輸入):控制輸入,BOOL量,通常連接到I、Q、M、D、L中任一存儲(chǔ)區(qū)變量或硬件輸入。當(dāng)這個(gè)輸入從1變?yōu)?時(shí),觸發(fā)器被激活。Q(輸出):輸出信號(hào),BOOL量,通常連接到I、Q、M、D、L中任一存儲(chǔ)區(qū)變量或硬件輸出。當(dāng)檢測(cè)到輸入的下降沿時(shí),在一個(gè)PLC掃描周期中,這個(gè)輸出會(huì)被設(shè)置為1。3、注意事項(xiàng)(1)使用F_TRIG時(shí),需要注意PLC的掃描周期,因?yàn)檩敵鯭只在一個(gè)掃描周期內(nèi)為1。(2)該指令特別適用于需要捕捉設(shè)備狀態(tài)變化的場(chǎng)合,比如按鈕釋放或傳感器從觸發(fā)狀態(tài)到非觸發(fā)狀態(tài)的轉(zhuǎn)變。7.1.3實(shí)操案例15:電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制任務(wù):使用S7-1200PLC實(shí)現(xiàn)電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制??刂埔螅?.按下正向啟動(dòng)按鈕SB1,交流接觸器KM1得電,控制電動(dòng)機(jī)正轉(zhuǎn);按下停止按鈕SB3,電動(dòng)機(jī)停止轉(zhuǎn)動(dòng);按下反向啟動(dòng)按鈕SB2,交流接觸器KM2得電,控制電動(dòng)機(jī)反轉(zhuǎn)。2.若電動(dòng)機(jī)正轉(zhuǎn)運(yùn)行時(shí),按下反轉(zhuǎn)啟動(dòng)按鈕SB2,電動(dòng)機(jī)將變成反轉(zhuǎn)運(yùn)行;若電動(dòng)機(jī)反轉(zhuǎn)運(yùn)行時(shí),按下正轉(zhuǎn)啟動(dòng)按鈕SB1,電動(dòng)機(jī)將變成正轉(zhuǎn)運(yùn)行。注意:電動(dòng)機(jī)任何時(shí)候不能同時(shí)正轉(zhuǎn)和反轉(zhuǎn),否則會(huì)造成短路現(xiàn)象。7.1.3實(shí)操案例15:電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制步驟:1.I/O分配表(見(jiàn)章節(jié)4.1.6)2.PLC外部接線圖(見(jiàn)章節(jié)4.1.6)3.編寫(xiě)程序圖7-5PLC變量7.1.3實(shí)操案例15:電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制圖7-6電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制SCL程序7.1.3實(shí)操案例15:電動(dòng)機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制4.調(diào)試程序單擊程序編輯器工具欄上的按鈕,程序狀態(tài)進(jìn)入監(jiān)視運(yùn)行,該狀態(tài)可以顯示程序中操作數(shù)和網(wǎng)絡(luò)的邏輯運(yùn)行結(jié)果(RLO),同時(shí)可以查看用戶程序中某些變量值的變化。按下正向啟動(dòng)按鈕SB1,觀察電動(dòng)機(jī)是否正轉(zhuǎn),再按下反向啟動(dòng)按鈕SB2,觀察電動(dòng)機(jī)能否反轉(zhuǎn)。同時(shí)按下正反轉(zhuǎn)啟動(dòng)按鈕,看看電動(dòng)機(jī)是否運(yùn)行工作。7.2定時(shí)器操作本節(jié)我們來(lái)學(xué)習(xí)定時(shí)器對(duì)應(yīng)的SCL編程方法,我們不僅要學(xué)習(xí)脈沖定時(shí)器(TP)、接通延時(shí)定時(shí)器(TON)、關(guān)斷延時(shí)定時(shí)器(TOF)、保持型接通延時(shí)定時(shí)器(TONR)四個(gè)指令之外,還要學(xué)習(xí)到復(fù)位定時(shí)器(RESET_TIMER)和加載持續(xù)時(shí)間(PRESET_TIMER)兩個(gè)指令。命名規(guī)則:1.IEC定時(shí)器是一個(gè)IEC_TIMER或TP_TIME數(shù)據(jù)類(lèi)型的結(jié)構(gòu),可如下聲明:聲明為一個(gè)系統(tǒng)數(shù)據(jù)類(lèi)型為IEC_TIMER的背景數(shù)據(jù)塊(例如,“IEC_TIMER_DB”)7.2定時(shí)器操作2.聲明為程序塊的“Static”中數(shù)據(jù)類(lèi)型為T(mén)P_TIME的局部變量(例如,#IEC_TIMER_Instance)3.IEC定時(shí)器作為系統(tǒng)數(shù)據(jù)類(lèi)型為IEC_<定時(shí)器>的背景數(shù)據(jù)塊(共享DB)您可以按如下所示將IEC定時(shí)器聲明為數(shù)據(jù)塊:<IEC_Timer_DB>.TP();4.IEC定時(shí)器作為塊接口的局部變量(多重實(shí)例)您可以按如下所示將IEC定時(shí)器聲明為局部變量:#My_Timer();7.2定時(shí)器操作脈沖定時(shí)器(TP)的指令對(duì)照表和參數(shù)表,見(jiàn)表7-3所示。表7-3脈沖定時(shí)器(TP)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"TP_DB".TP(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");

INBoolQBoolPTTimeETTimea)脈沖定時(shí)器LAD程序7.2定時(shí)器操作脈沖定時(shí)器的應(yīng)用如圖7-7所示。圖7-7a為L(zhǎng)AD程序,圖7-7b為SCL程序,其功能效果是一樣的,同學(xué)們可以通過(guò)第四章的學(xué)習(xí)來(lái)驗(yàn)證SCL的程序運(yùn)行過(guò)程。圖7-7c為SCL監(jiān)控,可以清晰的顯示出IN和Q的狀態(tài)(True為1,F(xiàn)alse為0),ET“Tag_2”的值默認(rèn)顯示十六進(jìn)制,我們可以修改為十進(jìn)制,在十進(jìn)制中它是以ms為單位顯示內(nèi)容。若在SCL程序中刪除第5行代碼,則監(jiān)控區(qū)域里不會(huì)顯示“Tag_2”的監(jiān)控值。b)脈沖定時(shí)器SCL程序 c)脈沖定時(shí)器SCL監(jiān)控圖7-7關(guān)斷延時(shí)定時(shí)器的應(yīng)用7.2定時(shí)器操作接通延時(shí)定時(shí)器(TON)的指令對(duì)照表和參數(shù)表,見(jiàn)表7-4所示。表7-4

接通延時(shí)定時(shí)器(TON)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");

INBoolQBoolPTTimeETTimea)接通延時(shí)定時(shí)器LAD程序7.2定時(shí)器操作接通延時(shí)定時(shí)器的應(yīng)用如圖7-8所示。圖7-8a為L(zhǎng)AD程序,圖7-8b為SCL程序,其功能效果是一樣的,圖7-8c為SCL監(jiān)控。b)脈沖定時(shí)器SCL程序 c)脈沖定時(shí)器SCL監(jiān)控圖7-8接通延時(shí)定時(shí)器的應(yīng)用7.2定時(shí)器操作【例7-1】?jī)膳_(tái)電機(jī)的控制,當(dāng)工作人員按下I0.0啟動(dòng)按鈕,M1電機(jī)啟動(dòng)運(yùn)行8秒后M2電機(jī)再自動(dòng)運(yùn)行,當(dāng)按下I0.1兩臺(tái)電機(jī)同時(shí)停止工作。LAD程序請(qǐng)查閱【例4-2】,SCL程序如圖7-9所示。圖7-9【例7-1】SCL程序使用脈沖定時(shí)器7.2定時(shí)器操作關(guān)斷延時(shí)定時(shí)器(TOF)的指令對(duì)照表和參數(shù)表,見(jiàn)表7-5所示。表7-5

關(guān)斷延時(shí)定時(shí)器(TOF)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"TOF_DB".TOF(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");INBoolQBoolPTTimeETTimea)關(guān)斷延時(shí)定時(shí)器LAD程序7.2定時(shí)器操作關(guān)斷延時(shí)定時(shí)器的應(yīng)用如圖7-10所示。圖7-10a為L(zhǎng)AD程序,圖7-10b為SCL程序,其功能效果是一樣的,圖7-10c為SCL監(jiān)控。b)關(guān)斷延時(shí)定時(shí)器SCL程序 c)關(guān)斷延時(shí)定時(shí)器SCL監(jiān)控圖7-10關(guān)斷延時(shí)定時(shí)器的應(yīng)用b)

7.2定時(shí)器操作【例7-2】設(shè)備風(fēng)扇電機(jī)延時(shí)控制,當(dāng)工作人員按下I0.0啟動(dòng)按鈕,M1主電機(jī)和M2風(fēng)扇電機(jī)同時(shí)啟動(dòng)運(yùn)行,當(dāng)按下I0.1停止按鈕后,主軸電機(jī)停止工作,風(fēng)扇電機(jī)1分鐘后停止工作。LAD程序請(qǐng)查閱【例4-3】,SCL程序如圖7-11所示。圖7-11【例7-2】SCL程序使用脈沖定時(shí)器7.2定時(shí)器操作累加型定時(shí)器(TONR)的指令對(duì)照表和參數(shù)表,見(jiàn)表7-6所示。表7-6累加型定時(shí)器(TONR)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"TONR_DB".TONR(IN:="Tag_Start",R:="Tag_Reset",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_Time");INBoolQBoolRBoolPTTimeETTimea)累加型定時(shí)器LAD程序7.2定時(shí)器操作關(guān)斷延時(shí)定時(shí)器的應(yīng)用如圖7-10所示。圖7-10a為L(zhǎng)AD程序,圖7-10b為SCL程序,其功能效果是一樣的,圖7-10c為SCL監(jiān)控。b)累加型定時(shí)器SCL程序 c)累加型定時(shí)器器SCL監(jiān)控圖7-12累加型定時(shí)器的應(yīng)用

7.2定時(shí)器操作使用RESET_TIMER“復(fù)位定時(shí)器”指令,可將IEC定時(shí)器復(fù)位為“0”。將指定數(shù)據(jù)塊中定時(shí)器的結(jié)構(gòu)組件復(fù)位為“0”。該指令不會(huì)影響RLO。在TIMER參數(shù)中,將“復(fù)位定時(shí)器”指令分配給程序中所聲明的IEC定時(shí)器。該指令必須在IF指令中編程。示例:IF#Started=FalseTHEN"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");#Started:=True;END_IF;IF"TON_DB".ET<T#25sTHENRESET_TIMER(TIMER:="TON_DB");#Started:=False;END_IF;7.2定時(shí)器操作【例7-3】游樂(lè)場(chǎng)設(shè)備,當(dāng)工作人員按下I0.0啟動(dòng)按鈕,設(shè)備Q0.0運(yùn)行8分鐘后自動(dòng)停止工作。若中途有游客感到不適,工作人員可按下I0.1停止按鈕讓其停止工作。LAD程序請(qǐng)查閱【例4-1】,SCL程序如圖7-13所示。圖7-13【例7-3】SCL程序7.2定時(shí)器操作可以使用PRESET_TIMER“加載持續(xù)時(shí)間”指令為IEC定時(shí)器設(shè)置時(shí)間。如果該指令輸入邏輯運(yùn)算結(jié)果(RLO)的信號(hào)狀態(tài)為“1”,則每個(gè)周期都執(zhí)行該指令??梢詫⒃诔绦蛑新暶鞯腎EC定時(shí)器賦給“加載持續(xù)時(shí)間”指令。該指令將指定時(shí)間寫(xiě)入指定IEC定時(shí)器的結(jié)構(gòu)中。該指令不會(huì)影響RLO。如果在指令執(zhí)行時(shí)指定IEC定時(shí)器正在計(jì)時(shí),指令將覆蓋該指定IEC定時(shí)器的當(dāng)前值。這將更改IEC定時(shí)器的定時(shí)器狀態(tài)。示例:7.2定時(shí)器操作IF#Started=FalseTHEN"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");#Started:=True;#Preset=TrueEND_IF;IF"TON_DB".ET<T#10sAND#Preset=TrueTHENPRESET_TIMER(PT:=T#25s,TIMER:="TON_DB");#Preset:=False;END_IF;7.2.7實(shí)操案例16:三相異步電動(dòng)機(jī)Y-△降壓?jiǎn)?dòng)控制任務(wù):使用S7-1200PLC實(shí)現(xiàn)機(jī)床主軸降壓?jiǎn)?dòng)控制,降壓運(yùn)行5秒后轉(zhuǎn)至全壓運(yùn)行。為了保護(hù)機(jī)床加工車(chē)削,主軸電機(jī)啟動(dòng)的同時(shí)冷卻液電機(jī)一同工作,主軸電機(jī)停止后,冷卻液電機(jī)繼續(xù)工作6秒后自動(dòng)停止工作。步驟:1.I/O分配表(見(jiàn)章節(jié)4.2.5)2.PLC外部接線圖(見(jiàn)章節(jié)4.2.5)3.編寫(xiě)程序7.2.7實(shí)操案例16:三相異步電動(dòng)機(jī)Y-△降壓?jiǎn)?dòng)控制圖7-15PLC變量圖7-16IEC_TIMER_DB全局變量7.2.7實(shí)操案例16:三相異步電動(dòng)機(jī)Y-△降壓?jiǎn)?dòng)控制圖7-17三相異步電動(dòng)機(jī)Y-△降壓?jiǎn)?dòng)控制SCL程序7.3計(jì)數(shù)器操作本節(jié)我們來(lái)學(xué)習(xí)定計(jì)數(shù)器對(duì)應(yīng)的SCL編程方法,我們將分別學(xué)習(xí)加計(jì)數(shù)器(CTU)、減計(jì)數(shù)器(CTD)、加減計(jì)數(shù)器(CTUD)三個(gè)SCL指令。

CTU:加計(jì)數(shù)器的指令對(duì)照表和參數(shù)表,見(jiàn)表7-7所示。表7-7加計(jì)數(shù)器(CTU)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"IEC_Counter_0_DB".CTU(CU:=_bool_in_,R:=_bool_in_,PV:=_int_in_,Q=>_bool_out_,CV=>_int_out_);CUBOOLRBOOLPV整數(shù)QBOOLCV整數(shù)、CHAR、WCHAR、DATE7.3計(jì)數(shù)器操作b)加計(jì)數(shù)器SCL監(jiān)控a)加計(jì)數(shù)器SCL程序圖7-18SCL加計(jì)數(shù)器指令7.3計(jì)數(shù)器操作SCL的加計(jì)數(shù)器指令如圖7-18所示。圖7-18a為SCL程序,圖7-18b為SCL監(jiān)控。數(shù)據(jù)塊_1中的Button_1變量由0變1,CU端會(huì)產(chǎn)生一個(gè)上身沿,計(jì)數(shù)器Number_1計(jì)數(shù)1次,直到最大值32767;PV值設(shè)置為5,計(jì)數(shù)器計(jì)數(shù)到大于等于5時(shí),計(jì)數(shù)器輸出Q信號(hào)為“1”,數(shù)據(jù)塊_1中的Out_1變?yōu)?;當(dāng)Reset_1為1時(shí),計(jì)數(shù)器數(shù)值復(fù)位,清零。計(jì)數(shù)器復(fù)位Q端子,Out_1變量值變?yōu)?。7.3計(jì)數(shù)器操作減計(jì)數(shù)器(CTD)的指令對(duì)照表和參數(shù)表,見(jiàn)表7-8所示表7-8減計(jì)數(shù)器(CTD)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"IEC_Counter_0_DB".CTD(CD:=_bool_in_,LD:=_bool_in_,PV:=_int_in_,Q=>_bool_out_,CV=>_int_out_);CDBOOLLDBOOLPV整數(shù)QBOOLCV整數(shù)、CHAR、WCHAR、DATE7.3計(jì)數(shù)器操作b)減計(jì)數(shù)器SCL監(jiān)控a)減計(jì)數(shù)器SCL程序圖7-20SCL減計(jì)數(shù)器指令7.3計(jì)數(shù)器操作SCL減計(jì)數(shù)器如圖7-20所示。圖7-20a為SCL程序,圖7-20b為SCL監(jiān)控。當(dāng)變量Load_1的信號(hào)狀態(tài)變?yōu)椤?”時(shí),參數(shù)CV的值會(huì)設(shè)置為參數(shù)PV的值。只要變量Load_1的信號(hào)狀態(tài)為“1”,變量Button_1的信號(hào)狀態(tài)就不會(huì)影響該指令。讓數(shù)據(jù)塊中的load_1變?yōu)?,且每一次Button_1由0變1,CD端會(huì)產(chǎn)生一個(gè)上升沿,計(jì)數(shù)器減1。當(dāng)計(jì)數(shù)器減至0時(shí),計(jì)數(shù)停止,計(jì)數(shù)器輸出Q信號(hào)為“1”,Out_1輸出1。7.3計(jì)數(shù)器操作加減計(jì)數(shù)器(CTUD)的指令對(duì)照表和參數(shù)表,見(jiàn)表7-9所示。表7-9加減計(jì)數(shù)器(CTUD)指令對(duì)照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類(lèi)型"IEC_Counter_0_DB".CTUD(CU:=_bool_in_,CD:=_bool_in_,R:=_bool_in_LD:=_bool_in_,PV:=_int_in_,QU=>_bool_out_,QD=>_bool_out_,CV=>_int_out_);CUBOOLCDBOOLRBOOLLDBOOLPVINTQUBOOL7.3計(jì)數(shù)器操作b)加減計(jì)數(shù)器SCL監(jiān)控a)加減計(jì)數(shù)器SCL程序圖7-20SCL加減計(jì)數(shù)器指令7.3計(jì)數(shù)器操作b)加減計(jì)數(shù)器SCL監(jiān)控7.3計(jì)數(shù)器操作b)加減計(jì)數(shù)器SCL監(jiān)控b)加減計(jì)數(shù)器SCL監(jiān)控7.3計(jì)數(shù)器操作SCL加減計(jì)數(shù)器指令如圖7-21所示。圖7-21a為SCL程序,圖7-21b為SCL監(jiān)控。UpButton_1變量每由0變1一次,CU端會(huì)產(chǎn)生一個(gè)上升沿,計(jì)數(shù)器計(jì)數(shù)1次,直到最大值32767;Down_1變量每由0變1一次,CD端會(huì)產(chǎn)生一個(gè)上升沿,計(jì)數(shù)器減數(shù)1次,直到-32768;Load_1變?yōu)?后,PV值設(shè)置為5,計(jì)數(shù)器計(jì)數(shù)到大于等于5時(shí),計(jì)數(shù)器輸出QU信號(hào)為“1”,Up_Out輸出1;4)Reset_1置1后,計(jì)數(shù)器數(shù)值復(fù)位,清零。計(jì)數(shù)器復(fù)位Up_Out,Down_out置1。7.3.4實(shí)操案例17:車(chē)庫(kù)出入口閘機(jī)控制任務(wù):使用S7-1200PLC實(shí)現(xiàn)地下車(chē)庫(kù)車(chē)位數(shù)量的顯示??刂埔笕缦拢?.要求分別用紅、綠、黃燈表示地下車(chē)庫(kù)車(chē)位數(shù)的顯示,本車(chē)庫(kù)共有20個(gè)車(chē)位。2.系統(tǒng)工作時(shí),若空余車(chē)位大于10個(gè)亮綠燈,空余車(chē)位在1~10個(gè)亮黃燈,無(wú)空余車(chē)位亮紅燈。3.車(chē)庫(kù)有閘機(jī)入口攝像頭控制閘機(jī)入口電機(jī)和閘機(jī)出口攝像頭控制閘機(jī)出口電機(jī)的車(chē)輛進(jìn)出。當(dāng)綠燈和黃燈亮?xí)r,汽車(chē)進(jìn)入閘機(jī)可開(kāi)啟,當(dāng)紅燈亮起時(shí)入口閘機(jī)禁止抬起。(這里攝像頭控制閥門(mén)我們模擬用I0.0和I0.1來(lái)代替)7.3.4實(shí)操案例17:車(chē)庫(kù)出入口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論