施耐德Unity_Pro結(jié)構(gòu)化文本[ST]_第1頁
施耐德Unity_Pro結(jié)構(gòu)化文本[ST]_第2頁
施耐德Unity_Pro結(jié)構(gòu)化文本[ST]_第3頁
施耐德Unity_Pro結(jié)構(gòu)化文本[ST]_第4頁
施耐德Unity_Pro結(jié)構(gòu)化文本[ST]_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、word格式文檔結(jié)構(gòu)化文本(STD目錄結(jié)構(gòu)化文本(ST) 1概述 21 .結(jié)構(gòu)化文本 ST簡介 31 .結(jié)構(gòu)化文本ST簡介 32 .操作數(shù) 53 .操作符 82 .指令151 .指令152 .賦值163 .選擇指令I(lǐng)FTHENEND_IF184 .選擇指令 ELSE195 .選擇指令 ELSE - THEN206 .選擇指令 CASE OFEND_CASE227 .重復(fù)指令 FORTOBYDOEND_FOR238 .重復(fù)指令 WHILE DOEND_WHILE259 .重復(fù)指令 REPEAT UNTIL D_REPEAT2610 .重復(fù)指令2611 . 子程序調(diào)用 2712 . RETURN2

2、813 .空指令2914 .標(biāo)簽和跳轉(zhuǎn)2915 .注釋303 .調(diào)用基本功能、基本功能塊、導(dǎo)出的功能塊和過程 311 .調(diào)用基本功能312 .調(diào)用基本功能塊和導(dǎo)出的功能塊基本功能塊 373 .過程47專業(yè)整理概述本章介紹符合IEC 61131的編程語言結(jié)構(gòu)化文本 ST本章包含了哪些內(nèi)容?本章包含了以下部分: 結(jié)構(gòu)化文本ST簡介 調(diào)用基本功能、基本功能塊、導(dǎo)出的功能塊和過程一.結(jié)構(gòu)化文本 ST簡介概述本節(jié)包含結(jié)構(gòu)化文本ST的概述。本節(jié)包含了哪些內(nèi)容?本節(jié)包含了以下主題: 結(jié)構(gòu)化文本ST簡介 操作數(shù) 操作符1.結(jié)構(gòu)化文本ST簡介簡介使用結(jié)構(gòu)化文本(ST)的編程語言,可以執(zhí)行多種操作,例如調(diào)用功能塊

3、、執(zhí)行功能和賦值、有 條件地執(zhí)行指令和重復(fù)任務(wù)。表達(dá)式ST編程語言使用"表達(dá)式"。表達(dá)式是由操作符和操作數(shù)組成的結(jié)構(gòu),在執(zhí)行表達(dá)式時會返回值。操作符操作符是表示要執(zhí)行的操作的符號。操作數(shù)操作符供操作數(shù)使用。操作數(shù)為變量、數(shù)值、FFB輸入/輸出等。說明指令用于將表達(dá)式返回的值賦給實際參數(shù),并構(gòu)造和控制表達(dá)式。ST段的表示形式word格式文檔ST段的表示形式:操作符 操作數(shù)指令指令D 尸 B*B - 4*A*C ;IFD<0,0THENNROOTS : = 0 ,ELS1FD = CL。THENNROOTS := 1 ;XI :=-B/(2.0+A);表達(dá)式ELSENRO

4、yr江 2 ;XI .kB+56RT(DR/QO*A):X2 k(B£QRT(D)fO&);END IF;段大小指令行的長度不應(yīng)超過300個字符ST段的長度在編程環(huán)境中沒有限制。ST段的長度僅受PLC存儲器大小的限制語法標(biāo)識符和關(guān)鍵字不區(qū)分大小寫例外:不允許使用空格和制表符 關(guān)鍵字 數(shù)值 值 標(biāo)識符 變量和 限制符組合例如用于注釋的(*執(zhí)行順序計算表達(dá)式時將根據(jù)操作符的優(yōu)先級所定義的順序?qū)⒉僮鞣麘?yīng)用于操作數(shù)(請參見操作符表)首先執(zhí)行表達(dá)式中具有最高優(yōu)先級的操作符,接著執(zhí)行具有次優(yōu)先級的操作符,依此類推,直到專業(yè)整理word格式文檔完成整個計算過程。優(yōu)先級相同的操作符將根據(jù)它們

5、在表達(dá)式中的書寫順序從左至右執(zhí)行??墒?用括號更改此順序。例如,如果A、B、C和D的值分別為1、2、3和4,并按以下方式計算:A+B-C*D結(jié)果則為-9。在下面的計算中:(A+B-C)*D結(jié)果則為0o如果操作符包含兩個操作數(shù),則先執(zhí)行左邊的操作數(shù),例如在表達(dá)式SIN(A)*COS(B)中,先計算表達(dá)式 SIN(A),后計算COS(B),然后計算它們的乘積。錯誤行為下面的情況在執(zhí)行表達(dá)式時作為錯誤處理: 嘗試除以00 操作數(shù)包含的數(shù)據(jù)類型不適合對應(yīng)的運算。 數(shù)字運算的結(jié)果超出了其數(shù)據(jù)類型的值范圍。如果執(zhí)行運算的過程中出現(xiàn)錯誤,則會設(shè)置相應(yīng)的系統(tǒng)位(S)(如果使用的PLC支持這一設(shè)置)。IEC遵從

6、性有關(guān)針對ST編程語言的IEC遵從性的描述,請參見IEC遵從性。2 .操作數(shù)簡介操作數(shù)可以是: 地址 數(shù)值 變量 多元素變量 多元素變量的元素 功能調(diào)用 FFB輸出數(shù)據(jù)類型處理操作數(shù)的指令中的數(shù)據(jù)類型必須相同。如果需要處理不同類型的操作數(shù),則必須預(yù)先執(zhí)行類型轉(zhuǎn)換。在下面的示例中,整數(shù)變量i1在添加到實數(shù)變量r4中之前會先轉(zhuǎn)換為實數(shù)變量。r3 := r4 + SIN(INT_TO_REAL(i1);此規(guī)則的例外情況是,數(shù)據(jù)類型為 TIME的變量可乘以或除以數(shù)據(jù)類型為 INT DINT UINT或UDINT的變量。允許的運算: timeVarl := timeVar2 / dintVarl; ti

7、meVar1 := timeVar2 * intVarl; timeVar := 10 * time#10s;此功能由IEC 61131-3作為"不希望”的服務(wù)列出直接使用地址地址可直接使用(無需事先聲明)。在本例中,地址數(shù)據(jù)類型是直接分配的。該數(shù)據(jù)類型的分配通過使用“大前綴”進(jìn)行。下表列出了不同的大前綴:大前綴/#示例數(shù)據(jù)類型無前綴%I10、CH203.MOD、CH203.MOD.ERRBOOLX%MX20BOOLB%QB102.3BYTEW%KW43JNTD%QD100DINTF%MF100REAL使用其他數(shù)據(jù)類型要將其他數(shù)據(jù)類型指定為地址的缺省數(shù)據(jù)類型,必須通過顯式聲明進(jìn)行。使

8、用變量編輯器可方便地完成變量的聲明。地址的數(shù)據(jù)類型不能在ST段中直接聲明(例如,不允許聲明AT %MW1:UINT)。例如,在變量編輯器中聲明以下變量:UnlocVI: ARRAY 1.10 OF INT;LocVI:ARRAY 1.10 OF INT AT %MW100;LocV2:TIME AT %MW100;下面的調(diào)用具有正確的語法:%MW200 := 5;UnlocV12 := LocV1%MW200;LocV2 := t#3s;訪問字段變量訪問字段變量(ARRAY)時,只有數(shù)值和數(shù)據(jù)類型為INT、UINT、DINT以及UDINT的變量才允許用于索引項。如果范圍的閾值下限為負(fù)數(shù),則 A

9、RRAY元素的索引也可為負(fù)數(shù)。示例:使用字段變量var1i := 8 ;var2.otto4 := var3 ;var41+i+j*5 := 4 ;3 .操作符簡介操作符是一種符號,它表示: 要執(zhí)行的算術(shù)運算,或 要執(zhí)行的邏輯運算 功能編輯(調(diào)用)操作符是泛型的,即,它們自動適應(yīng)操作數(shù)的數(shù)據(jù)類型操作符表操作符根據(jù)優(yōu)先級按順序執(zhí)行,另請參見 執(zhí)行順序ST編程語言操作符表:操作符含義優(yōu)先級適用的操作數(shù)描述()使用1 (最高)表iA式括號用于改變操作符的執(zhí)行順序。示例:如果操作數(shù)A、B、C和D的值分別為1、2、3 和 4,A+B-C*D 的結(jié)果則為-9,而(A+B-C)*D的結(jié)果則為0oFUNCNA

10、ME(實際參數(shù)-list)函數(shù)處理(調(diào)用)2表達(dá)式、數(shù)值、變量、地址(所有數(shù)據(jù)類型)函數(shù)處理用于執(zhí)行函數(shù)(請參見調(diào)用基本功能)。-取反3數(shù)據(jù)類型為 INT>DINT 或 REAL 的表達(dá)式、數(shù)值、變量或地址取反(-)時,操作數(shù)值的符號會反轉(zhuǎn)。示例:本示例中,如果IN1為4,則OUT為-4。OUT := - IN1 ;NOT反碼3數(shù)據(jù)類型為BOOL、 BYTE、進(jìn)彳T NOT運算時,操作數(shù)將逐位反轉(zhuǎn)。示例:本示例中,如果 IN1為1100110011 ,則OUT 為 0011001100 。OUT := NOT IN1 ;WORD或DWORD 的表達(dá)式、數(shù)值、變量或地址*幕4數(shù)據(jù)類型為RE

11、AL(底數(shù))和 JNT>DINT、UINT、UDINT 或REAL (指數(shù))的 表達(dá)式、數(shù)值、變量或地址求嘉(*)運算時,將以第一個操作數(shù)為底數(shù),第二個操作數(shù)為指數(shù)進(jìn)行求幕。示例:該示例中,如果IN1為5.0, IN2為4.0,則 OUT 為 625.0。OUT := IN1 * IN2 ;*乘法5數(shù)據(jù)類型為 INT>DINT、UINT、UDINT或 REAL的表達(dá)式、數(shù)值、變量或地址乘法(*)運算時,將用第一個操作數(shù)的值乘以第二個操作數(shù)(指數(shù))的值。示例:該示例中,如果IN1為5.0, IN2為4.0,則 OUT 為 20.0。OUT := IN1 * IN2 ;注:先期庫中的

12、MULTIME函數(shù)可用于涉及數(shù)據(jù)類型Time的乘法。/除法5數(shù)據(jù)類型為 INT>DINT、UINT、UDINT或 REAL的表達(dá)式、數(shù)值、變量或地址除法(/)運算時,將用第一個操作數(shù)的值除以第二個操作數(shù)的值。示例:該示例中,如果IN1為20.0, IN2為5.0,則 OUT 為 4.0。OUT := IN1 / IN2 ;注:先期庫中的DIVTIME函數(shù)可用于涉及數(shù)據(jù)類型Time的除法。MOD模數(shù)5數(shù)據(jù)類型為 JNT>DINT、 UINT 或UDINT的表達(dá)式、數(shù)值、變量或地址執(zhí)行MOD時,將用第一個操作數(shù)的值除以第二個操作數(shù)的值,除法的余數(shù)(模數(shù))顯示為結(jié)果。示例:本示例中 如果

13、IN1為7, IN2為2,則OUT為1。 如果IN1為7, IN2為-2,則OUT為1。 如果IN1為-7, IN2為2,則OUT為-1。 如果 IN1 為-7, IN2 為-2,則 OUT 為-1。OUT := IN1 MOD IN2 ;數(shù)據(jù)類型為更、加法(+)運算時,將用第一個操作數(shù)的值加上第二DINT、UINT、UDINT、個操作數(shù)的值。+加法6REAL 或 TIME 的示例:本示例中表達(dá)式、數(shù)值、變量如果IN1為7, IN2為2,則 OUT為9或地址OUT := IN1 + IN2 ;數(shù)據(jù)類型為 INT>減法(-)運算時,將用第一個操作數(shù)的值減去第二DINT、UINT、UDINT

14、、個操作數(shù)的值。-減法6REAL 或 TIME 的示例:該示例中,如果IN1為10, IN2為4,則表達(dá)式、數(shù)值、變量OUT 為 6?;虻刂稯UT := IN1 - IN2 ;數(shù)據(jù)類型為使用 < 將第一個操作數(shù)的值與第二個操作數(shù)的值BOOL、BYTE INT>進(jìn)行比較。如果第一個操作數(shù)的值小于第二個操作DINT、UINT、UDINT、數(shù)的值,則結(jié)果為布爾值 1。如果第一個操作數(shù)的小于REAL、 TIME、值大于或等于第二個操作數(shù)的值,則結(jié)果為布爾值<7比較WORD、DWORD、00STRING DT> DATE示例:本示例中,如果IN1小于10,則OUT為1,或TOD的

15、表達(dá)式、否則為00數(shù)值、變量或地址OUT := IN1 < 10 ;數(shù)據(jù)類型為使用 > 將第一個操作數(shù)的值與第二個操作數(shù)的值BOOL、BYTE INT、進(jìn)行比較。如果第一個操作數(shù)的值大于第二個操作>7DINT、UINT、UDINT、數(shù)的值,則結(jié)果為布爾值 1。如果第一個操作數(shù)的比較REAL、 TIME、值小于或等于第二個操作數(shù)的值,則結(jié)果為布爾值WORD、DWORD、00STRING DT、DATE或TOD的表達(dá)式、數(shù)值、變量或地址小例:本小例中,如果IN1大于10,則 OUT為1,如果IN1小于10則為00OUT := IN1 > 10 ;數(shù)據(jù)類型為使用 <二將

16、第一個操作數(shù)的值與第二個操作數(shù)的值BOOL、BYTE INT>進(jìn)行比較。如果第一個操作數(shù)的值小于或等于第二小于DINT、UINT、UDINT、個操作數(shù)的值,則結(jié)果為布爾值 1。如果第一個操或等REAL、 TIME、作數(shù)的值大于第二個操作數(shù)的值,則結(jié)果為布爾值<二7于比WORD、DWORD、00較STRING DT> DATE示例:本示例中,如果IN1小于或等于10,則OUT或TOD的表達(dá)式、為1 ,否則為0o數(shù)值、變量或地址OUT := IN1 <= 10 ;數(shù)據(jù)類型為使用 >=將第一個操作數(shù)的值與第二個操作數(shù)的值BOOL、BYTE INT、進(jìn)行比較。如果第一個操

17、作數(shù)的值大于或等于第二DINT、UINT、UDINT、個操作數(shù)的值,則結(jié)果為布爾值 1。如果第一個操或等REAL、 TIME、作數(shù)的值小于第二個操作數(shù)的值,則結(jié)果為布爾值>=7于比WORD、DWORD、00較STRING DT> DATE示例:本示例中,如果IN1大于或等于10,則OUT或TOD的表達(dá)式、為1 ,否則為0o數(shù)值、變量或地址OUT := IN1 >= 10 ;數(shù)據(jù)類型為使用=將第一個操作數(shù)的值與第二個操作數(shù)的值8BOOL、BYTE INT>進(jìn)行比較。如果第一個操作數(shù)的值等于第二個操作寺丁DINT、UINT、UDINT、數(shù)的值,則結(jié)果為布爾值 1。如果第一個

18、操作數(shù)的REAL、 TIME、值/、等于第二個操作數(shù)的值,則結(jié)果為布爾值0。WORD、DWORD、示例:本示例中,如果IN1等于10,則OUT為1,否則為00OUT := IN1 = 10 ;STRING DT DATE或TOD的表達(dá)式、數(shù)值、變量或地址<>不等于8數(shù)據(jù)類型為BOOL、BYTE INT、使用 <> 將第一個操作數(shù)的值與第二個操作數(shù)的值進(jìn)行比較。如果第一個操作數(shù)的值/、等于第二個操作數(shù)的值,則結(jié)果為布爾值1。如果第一個操作數(shù)的值等于第二個操作數(shù)的值,則結(jié)果為布爾值0。示例:本示例中,如果IN1不等于10,則OUT為1 ,否則為00OUT := IN1 &l

19、t;> 10 ;DINT、UINT、UDINT、REAL、 TIME、WORD、DWORD、STRING DT、DATE或TOD的表達(dá)式、數(shù)值、變量或地址&邏輯與9數(shù)據(jù)類型為BOOL、 BYTE、WORD或DWORD 的表達(dá)式、數(shù)值、變量或地址對于&,操作數(shù)之間存在邏輯與美聯(lián)。對于 BYTEWORD和DWORD數(shù)據(jù)類型,此關(guān)聯(lián)是逐位進(jìn)行 的。示例:本示例中,如果IN1、IN2和IN3均為1, 則OUT為1。OUT := IN1 & IN2 & IN3 ;AND邏輯與9數(shù)據(jù)類型為BOOL、 BYTE、WORD或DWORD 的表達(dá)式、數(shù)值、變量或地對于 AND

20、 ,操作數(shù)之間存在邏輯與美聯(lián)。對于BYTE WORD和DWORD 數(shù)據(jù)類型,此關(guān)聯(lián)是逐位進(jìn)行的。示例:本示例中,如果IN1、IN2和IN3均為1,則OUT為1。址OUT k IN1 AND IN2 AND IN3 ;XOR邏輯異或10數(shù)據(jù)類型為BOOL、 BYTE、WORD或?qū)τ赬OR,操作數(shù)之間存在邏輯異或關(guān)聯(lián)。對于BYTE WORD和DWORD 數(shù)據(jù)類型,此關(guān)聯(lián)是逐 位進(jìn)行的。示例:本示例中,如果IN1和IN2不相等,則OUT 為1。如果 A和B的狀態(tài)相同(均為 0或均為 1),則D為0。OUT := IN1 XOR IN2 ;如果將兩個以上的操作數(shù)進(jìn)行關(guān)聯(lián),當(dāng)狀態(tài)為1的操作數(shù)個數(shù)不是偶數(shù)

21、時結(jié)果為 1 ,而當(dāng)狀態(tài)為1的操作數(shù)個數(shù)是偶數(shù)時結(jié)果為 0。示例:本示例中,如果有1個或3個操作數(shù)為1 , 則OUT為1 ,如果有0、2或4個操作數(shù)為1 , 則OUT為00OUT := IN1 XOR IN2 XOR IN3 XOR IN4 ;DWORD 的表達(dá)式、數(shù)值、變量或地址OR邏輯或11 (最低)數(shù)據(jù)類型為BOOL、 BYTE、WORD或DWORD 的表達(dá)式、數(shù)值、變量或地址對于OR ,操作數(shù)之間存在邏輯或美聯(lián)。對于BYTEWORD和DWORD數(shù)據(jù)類型,此關(guān)聯(lián)是逐位進(jìn)行 的。示例:本示例中,如果IN1、IN2或IN3為1 ,則OUT 為 1。OUT := IN1 OR IN2 OR I

22、N3 ;二.指令概述本節(jié)描述結(jié)構(gòu)化文本ST編程語言的指令。本節(jié)包含了哪些內(nèi)容?本節(jié)包含了以下主題: 心 K 選擇指令I(lǐng)FTHENEND IF 選擇指令ELSE 選擇指令ELSIFTHEN 選擇指令 CASE.OFEND CASE 重復(fù)指令 FOR.TOBY.DOEND FOR 重復(fù)指令WHILEDOEND WHILE 重復(fù)指令 REPEATUNTILEND REPEAT 重復(fù)指令EXIT,子程序調(diào)用 RETURN 空指令. 標(biāo)簽和跳轉(zhuǎn) 注釋1 .指令描述指令是ST編程語言的“命令"。指令必須以分號結(jié)尾。一行中可以有多個指令(由分號分隔)單個分號表示空指令。2 .賦值簡介執(zhí)行賦值時,單

23、元素或多元素變量的當(dāng)前值會替換為表達(dá)式的計算結(jié)果。賦值表達(dá)式的結(jié)構(gòu)為:左邊是變量名稱,之后是賦值操作符尸,然后是要求值的表達(dá)式。兩個變量(分別位于賦值操作符的左側(cè)和右側(cè))的數(shù)據(jù)類型必須相同。數(shù)組是個特例。顯式啟用后,也可對長度不同的兩個數(shù)組執(zhí)行賦值操作。將一個變量的值賦給另一個變量賦值用于將一個變量的值賦給另一個變量。例如,指令A(yù) := B ;用于將變量A的值替換為變量B的當(dāng)前值。如果A和B是基本數(shù)據(jù)類型,則B的單個值會傳遞給Ao如果A和B是導(dǎo)出的數(shù)據(jù)類型,則所有 B元素的值都傳遞給 Ao將數(shù)值賦給變量賦值用于將數(shù)值賦給變量。指令C := 25 ;用于將值25賦給變量Co將運算值賦給變量賦值用

24、于將運算結(jié)果賦給變量。例如,指令X := (A+B-C)*D ;用于將(A+B-C)*D的運算結(jié)果賦給變量 X。將FFB的值賦給變量賦值用于將功能或功能塊返回的值賦給變量。例如,指令B := MOD(C,A);用于調(diào)用MOD (模數(shù))功能并將計算結(jié)果賦給變量Bo例如,指令A(yù) := MY_TON.Q ;用于將MY_TON功能塊(TON功能塊的實例)的 Q輸出值賦給變量 A。(這不是功能塊調(diào)用)多重賦值多重賦值是對IEC 61131-3的補充,必須顯式啟用。即使已經(jīng)啟用,下列情況下也不能進(jìn)行多重賦值:在功能塊調(diào)用的參數(shù)列表中在用于初始化結(jié)構(gòu)化變量的元素列表中指令X := Y := Z是允許的指令F

25、B(in1 := 1, In2 := In3 := 2);和strucVar := (compl := 1, comp2 := comp3 := 2);是不允許的。數(shù)組與WORD-/DWORD 變量之間的賦值數(shù)組和WORD-/DWORD 變量之間進(jìn)行賦值時必須先執(zhí)行類型轉(zhuǎn)換,例如:%Q3.0:16 := INT_TO_AR_BOOL(%MW20);提供了下面的轉(zhuǎn)換功能(常規(guī)庫,Array系列):, MOVE_BOOL_AREBOOL MOVE_WORD_ARWORD MOVE_DWORD_ARDWORD MOVE_INT_ARINT MOVE_DINT_ARDINT, MOVE_REAL_AR

26、REAL3.選擇指令 IF:- THEN- END_IF描述IF指令只有確定其相關(guān)布爾表達(dá)式的值為1 (真)時,才會執(zhí)行指令或一組指令。如果條件為0(假),將不會執(zhí)行該指令或指令組。THEN指令標(biāo)識條件的結(jié)尾和指令的開頭。END_IF指令標(biāo)記指令的結(jié)尾。注意:可以嵌套任何數(shù)量的IFTHENEND_IF指令,以生成復(fù)雜的選擇指令。專業(yè)整理word格式文檔示例IFTHENEND_IF該條件可以使用布爾變量表達(dá)。如果FLAG為1,將執(zhí)行指令;如果 FLAG為0,則不會執(zhí)行。IF FLAG THENC:=SIN(A) * COS(B);B:=C - A ;END_IF ;該條件可使用返回布爾結(jié)果的操作

27、表達(dá)。如果A大于B,將會執(zhí)行指令;如果 A小于或等于B,則不會執(zhí)行IF A>B THENC:=SIN(A) * COS(B);B:=C - A ;END_IF ;示例 IF NOTTHENEND_IF該條件可使用NOT反轉(zhuǎn)(為0時執(zhí)行這兩個指令)。IF NOT FLAG THENC:=SIN_REAL(A) * COS_REAL(B);B:=C - A ;END_IF ;另請參見ELSEELSIF描述ELSE指令始終出現(xiàn)在IFTHEN ELSIFTHEN或 CASE指令后面。如果ELSE指令出現(xiàn)在IF或ELSIF指令后面,則僅當(dāng)IF和ELSIF指令的關(guān)聯(lián)布爾表達(dá)式為 0 (假)時,才會執(zhí)

28、行該指令或指令組。如果 IF或ELSIF指令的條件為1 (真),則不會執(zhí)行該指令或指令組。如果ELSE指令出現(xiàn)在CASE后面,則僅當(dāng)所有標(biāo)簽都不包含選擇器的值時,才會執(zhí)行該指令或指令組。如果某個標(biāo)識包含選擇器的值,則不會執(zhí)行該指令或指令組。注意:可以嵌套任何數(shù)量的IFTHENELSEEND_IF指令,以生成復(fù)雜的選擇指令。示例ELSEIF A>B THENC:=SIN(A) * COS(B);B:=C - A ;ELSEC:=A + B ;B:=C * A ;END_IF ;另請參見IFELSIFCASE5 .選擇指令ELSEE- THEN描述ELSE指令始終出現(xiàn)在IFTHEN指令后面。

29、ELSIF指令確定僅當(dāng)IF指令的關(guān)聯(lián)布爾表達(dá)式的值為0 (假)并且ELSIF指令的關(guān)聯(lián)布爾表達(dá)式的值為 1 (真)時,才會執(zhí)行指令或指令組。如果IF指令的條件為1 (真)或者ELSIF指令的條件為0 (假),則不會執(zhí)行該命令或命令組。THEN指令標(biāo)識ELSIF條件的結(jié)尾和指令的開頭。注意:可以嵌套任何數(shù)量的IFTHENELSIFTHENEND_IF指令,以生成復(fù)雜的選擇指令。示例 ELSIF.THENIF A>B THENC:=SIN(A) * COS(B);B:=SUB(C,A);ELSIFA=B THENC:=ADD(A,B);B:=MUL(C,A);END_IF ;例如嵌套指令I(lǐng)F

30、 A>B THENIF B=C THENC:=SIN(A) * COS(B);ELSEB:=SUB(C,A);END_IF ;ELSIFA=B THENC:=ADD(A,B);B:=MUL(C,A);ELSEC:=DIV(A,B);END_IF ;另請參見IFELSE6 .選擇指令 CASE - OF - END_CASE描述CASE指令包含一個INT數(shù)據(jù)類型的表達(dá)式(選擇器)和一個指令組列表。每組都具有一個包含一個或多個整數(shù)(INT、DINT、UINT或UDINT)或整數(shù)值范圍的標(biāo)簽。將執(zhí)行的指令為其標(biāo)簽中包含選擇器計算出的值的第一組指令。否則,將不執(zhí)行任何標(biāo)簽對應(yīng)的指令。OF指令指示

31、標(biāo)簽的開頭。所有標(biāo)簽都不包含選擇器的值時,才會在 CASE指令內(nèi)執(zhí)行ELSE指令。END_CASE指令標(biāo)記指令的結(jié)尾。示例 CASE.OFEND_CASE示例 CASE.OFEND_CASE選擇器 CASE SELECT OF /L5: C:=SIN(A) * CC6(B);標(biāo)筆 £2:B:=C - A ;懷量 6 一 1。: C:=C * A : ELSE8: =C * A ;C:-A / E ; ENELCASE ;另請參見ELSE7 .重復(fù)指令FORTOBYDOEND_FOR描述FOR指令用于在發(fā)生次數(shù)可預(yù)先確定的情況下。否則可使用WHILE或REPEATFOR指令會重復(fù)執(zhí)行指

32、令序列,直到遇到END_FOR指令為止。發(fā)生次數(shù)由起始值、結(jié)束值和控制變量決定??刂谱兞?、起始值和結(jié)束值必須具有相同的數(shù)據(jù)類型( DINT或INT)??刂谱兞?、起始值和結(jié)束值可由重復(fù)指令進(jìn)行更改。這是對 IEC 61131-3的補充。FOR指令以控制變量值為步幅遞增起始值,直到達(dá)到結(jié)束值。增量值的缺省值為1。如果要使用其他值,則可以指定顯式增量值(變量或常量)。每個新的循環(huán)之前都要檢查控制變量值。如 果它位于起始值和結(jié)束值的范圍之外,則將離開循環(huán)。首次運行循環(huán)之前,會進(jìn)行檢查以確定從初始值開始的控制變量遞增是否是朝著結(jié)束值的方向。如果不是(例如,起始值 < 結(jié)束值并且增量為負(fù)值),則不會

33、對循環(huán)進(jìn)行處理??刂谱兞恐挡?是在循環(huán)外定義的。DO指令標(biāo)識重復(fù)定義的結(jié)尾和指令的開頭??梢允褂肊XIT提前終止循環(huán)。END_FOR指令標(biāo)記指令的結(jié)尾。示例:增量為1的FOR增量為1的FOR控制變量起始值 結(jié)束值C:= C * 005(B);END_FOR ;增量不為1的FOR如果要使用的增量不為1,這可由BY定義。增量、初始值、結(jié)束值和控制變量必須具有相同的BY表達(dá)式的符號決定。如果此表達(dá)式數(shù)據(jù)類型(DINT或INT)。處理方向(向前或向后)由為正,則循環(huán)正向進(jìn)行;如果為負(fù),則循環(huán)反向進(jìn)行。示例:步幅為2的正向計數(shù)步幅為2的正向計數(shù)控制變量起始值 結(jié)束值 遞增FCR i:= 1 TO 10

34、BY 2 DO (* BY > 0 : Forwards.loop *) C: = C * 006(E) ; (* Loop is 5 k executed *)END FOR ;示例:反向計數(shù)反向計數(shù)FOR i:= 10 TO 1 BY -1 DO (* BY < 0 : Backwards.loop *)C:= C * COS(B) ; (* Instruction is executed 10 x *)END_FOR ;示例:"唯一"循環(huán)本示例中的循環(huán)正好執(zhí)行一次,原因是初始值 =結(jié)束值。此種情況下,增量為正還是負(fù)沒有關(guān)系。FOR i:= 10 TO 10

35、 DO (* Unique Loop *)C:= C * COS(B);END_FOR ;或FOR i:= 10 TO 10 BY -1 DO (* Unique Loop *)C:= C * COS(B);END_FOR ;示例:臨界循環(huán)如果本示例中增量j > 0,將執(zhí)行指令。如果j < 0,將不會執(zhí)行指令,因為條件初始值< 僅允許結(jié)束值的增量 > 0。如果j = 0,將執(zhí)行指令并且會創(chuàng)建一個無限循環(huán),因為增量為 0時永遠(yuǎn)都不會達(dá)到結(jié)束值。FOR i:= 1 TO 10 BY j DOC:= C * COS(B);END_FOR ;8 .重復(fù)指令 WHILE -DO

36、END_WHILE說明WHILE指令可使一個指令序列重復(fù)執(zhí)行,直到其相關(guān)布爾表達(dá)式為0 (假)。如果從一開始該表達(dá)式就為假,則根本不會執(zhí)行該指令組。DO指令標(biāo)識重復(fù)定義的結(jié)尾和指令的開頭。可以使用EXIT提前終止循環(huán)。END_WHILE指令標(biāo)記指令的結(jié)尾。下列情況下不應(yīng)使用 WHILE,因為它可能導(dǎo)致無限循環(huán),從而造成程序崩潰: WHILE不能用于過程之間的同步,例如,不能用作具有外部定義的結(jié)束條件的“等待循 環(huán)”。 WHILE不能用在算法中,因為無法確保完成循環(huán)結(jié)束條件或執(zhí)行EXIT指令。示例 WHILEDOEND_WHILEx := 1; WHILE x <= 100 DO x :=

37、 x + 4; END_WHILE ;另請參見EXIT9 .重復(fù)指令 REPEAF UNTIL END_REPEAT描述REPEAT指令可使一個指令序列重復(fù)執(zhí)行(至少執(zhí)行一次),直到相關(guān)布爾條件為 1 (真) UNTIL指令標(biāo)記結(jié)束條件??梢允褂肊XIT提前終止循環(huán)。END_REPEAT指令標(biāo)記指令的結(jié)尾。下列情況下不應(yīng)使用 REPEAT,因為它可能導(dǎo)致無限循環(huán),從而造成程序崩潰: REPEAT不能用于進(jìn)程之間的同步,例如,不能用作具有外部定義的結(jié)束條件的“等待循 環(huán)”。 REPEAT不能用在算法中,例如無法確保完成循環(huán)結(jié)束條件或執(zhí)行EXIT指令。示例 REPEATUNTILEND_REPEA

38、Tx := -1;REPEAT x := x + 2;UNTIL x >= 101END_REPEAT;另請參見EXIT10 .重復(fù)指令描述或 REPEAT)EXIT所在的循環(huán))。接下來, 后的第一個指令。EXIT指令用于在滿足結(jié)束條件前終止重復(fù)指令(FOR、WHILE如果EXIT指令位于嵌套的重復(fù)指令內(nèi),則會離開最里面的循環(huán)(將執(zhí)行循環(huán)結(jié)尾(END_FOR、 END_WHILE 或 END_REPEAP示例EXIT如果FLAG的值為0,執(zhí)行指令后SUM將為15。如果FLAG的值為1,執(zhí)行指令后SUM將為6。SUM: = 0;FOR I := 1 TO 3 DOFOR J := 1 TO

39、 2 DOIF FLAG=1 THEN EXIT;END_IF ;SUM := SUM + J ;END_FOR ;SUM := SUM + I ;END_FOR另請參見CASEWHILEREPEAT11 .子程序調(diào)用子程序調(diào)用子程序調(diào)用由子程序段名稱后跟空參數(shù)列表組成。子程序調(diào)用不返回值。待調(diào)用的子程序必須與調(diào)用的 ST段位于同一任務(wù)中。也可以從子程序中調(diào)用子程序。例如:SubroutineName ();子程序調(diào)用是對IEC 61131-3的補充,且必須顯式啟用。在SFC動作段中,僅當(dāng)啟用了多令牌操作時才允許子程序調(diào)用。12 . RETURN描述RETURN指令可用于DFB (導(dǎo)出功能塊)

40、和 SR (子程序)中。RETURN指令不可用于主程序中。在DFB中,RETURN指令強制返回稱為 DFB的程序。不執(zhí)行包含 RETURN指令的剩余DFB段。也不執(zhí)行DFB的下一段。從DFB返回后,將執(zhí)行稱為 DFB的程序如果另一個DFB調(diào)用了此DFB,將在返回后執(zhí)行調(diào)用 DFB在SR中,RETURN指令強制返回稱為SR的程序。不執(zhí)行包含 RETURN指令的剩余SR。從SR返回后,將執(zhí)行稱為 SR的程序。13.空指令描述單個分號;表示空指令。例如:IF x THEN ; ELSE .在此示例中,THEN指令后面就跟著一個空指令。這意味著,只要 IF條件為1,程序就會立即退出IF指令。14 .標(biāo)

41、簽和跳轉(zhuǎn)簡介標(biāo)簽用作跳轉(zhuǎn)的目標(biāo)。ST中的跳轉(zhuǎn)和標(biāo)簽是對IEC 61131-3的補充,且必須顯式啟用。標(biāo)簽屬性標(biāo)簽屬性: 標(biāo)簽必須始終是行中的第一個元素。 標(biāo)簽只能出現(xiàn)在第一級指令前(不能在循環(huán)中)。 其名稱在整個目錄中都必須明確,并且不區(qū)分大小寫。 標(biāo)簽必須符合一般命名約定。 標(biāo)簽用冒號:與后面的指令分隔。跳轉(zhuǎn)屬性跳轉(zhuǎn)屬性 可在程序和DFB段中進(jìn)行跳轉(zhuǎn) 只能在當(dāng)前段中進(jìn)行跳轉(zhuǎn)。示例IF varl THEN JMP START;二START:15 .注釋描述在ST編輯器中,注釋總是以字符串(*開始,以字符用*)結(jié)束。在這兩個字符串之間可以輸 入任何注釋??稍?ST編輯器的任何位置輸入注釋,但不能

42、在關(guān)鍵字、數(shù)值、標(biāo)識符和變量中輸入注釋。IEC 61131-3不允許嵌套注釋。如果已經(jīng)嵌套了注釋,則必須顯式啟用。專業(yè)整理三.調(diào)用基本功能、基本功能塊、導(dǎo)生的功能塊和過程概述使用ST編程語言調(diào)用基本功能、基本功能塊、導(dǎo)出的功能塊和過程。本節(jié)包含了哪些內(nèi)容?本節(jié)包含了以下主題: 調(diào)用基本功能 調(diào)用基本功能塊和導(dǎo)出的功能塊 業(yè)1.調(diào)用基本功能基本功能基本功能以庫的形式提供。功能的邏輯是使用編程語言C創(chuàng)建的,不能在ST編輯器中進(jìn)行修改。功能沒有內(nèi)部狀態(tài)。如果輸入值相同,則每次執(zhí)行該功能后輸出的值都相同。例如,每次執(zhí)行兩個值相加后都能得到相同的結(jié)果。有些基本功能可擴展為具有 2個以上的輸入。基本功能只

43、具有一個返回值(輸出)。參數(shù)將值傳入或傳出功能需要“輸入”和一個“輸出”。這些輸入 /輸出稱為形式參數(shù)。當(dāng)前過程狀態(tài)傳遞給形式參數(shù)。這些參數(shù)稱為實際參數(shù)。以下各項可用作功能輸入的實際參數(shù):*變量地址數(shù)值ST表達(dá)式以下各項可用作功能輸出的實際參數(shù):變量地址實際參數(shù)的數(shù)據(jù)類型必須與形式參數(shù)的數(shù)據(jù)類型匹配。唯一的例外是泛型形式參數(shù),其數(shù)據(jù)類型 由實際參數(shù)決定。處理泛型ANY BIT形式參數(shù)時,可使用數(shù)據(jù)類型為 INT或DINT (不是UINT和UDINT)的實 際參數(shù)。這是對IEC 61131-3的補充,且必須顯式啟用。示例:允許:AND (AnyBitParam := IntVarl, AnyBi

44、tParam2 := IntVar2);不允許:AND_WORD (WordParam1 := IntVar1, WordParam2 := IntVar2);(在這種情況下,必須使用 AND_INT 。)AND_ARRAY_WORD (ArrayInt, .);(在這種情況下,必須使用INT_ARR_TO_WORD_ARR (.);執(zhí)行顯式類型轉(zhuǎn)換。).并非所有形式參數(shù)都必須賦值。必須賦值的形式參數(shù)類型可參見此表:參數(shù)類型EDTSTRINGARRAYANY_ARRAYIODDTSTRUCTFBANYInput-+-+-VAR_IN_OUT+/+Output-/-+需要實際參數(shù)-不需要實際參數(shù)

45、/不適用如果沒有為形式參數(shù)賦值,則會使用初始值執(zhí)行功能塊。如果尚未定義初始值,則使用缺省值(0)編程說明請注意以下信息:所有通用功能都被過載。這意味著調(diào)用功能時是否輸入數(shù)據(jù)類型無關(guān)緊要例如i1 := ADD (i2, 3);等同于i1 := ADD_INT (i2, 3); 功能可以嵌套(另請參見二). 僅當(dāng)輸入EN = 1或未使用EN輸入時,才會執(zhí)行功能(另請參見 EN和ENO). 有兩種調(diào)用功能的方式:形式調(diào)用(使用形式參數(shù)名稱調(diào)用功能)word格式文檔非形式調(diào)用(不使用形式參數(shù)名稱調(diào)用功能)形式調(diào)用對于形式調(diào)用(帶形式參數(shù)名稱的調(diào)用),調(diào)用所使用的指令序列為:實際輸出參數(shù),后跟賦值 指令

46、尸,然后是功能名稱,之后是用括號括起的列表(其中為實際參數(shù)對形式參數(shù)的賦值)。形 式參數(shù)在功能調(diào)用中的列出順序無關(guān)緊要.EN和ENO可用于此類型的調(diào)用。使用形式參數(shù)名稱調(diào)用功能:實際參數(shù)(輸出)花式參數(shù)LIMITMH中時QI班乂使用FBD調(diào)用相同的功能:o vui J +vu 對于形式調(diào)用,沒有必要為所有形式參數(shù)賦值(另請參見gm).out:=LIMIT (MN:=0, IN:=var1);使用FBD調(diào)用相同的功能:lihii6 BinOTIvui DTM3C非形式調(diào)用對于非形式調(diào)用(不帶形式參數(shù)名稱的調(diào)用),調(diào)用所使用的指令序列為:實際輸出參數(shù),后跟 賦值指令符號尸,然后是功能名稱,之后是用

47、括號括起的輸入實際參數(shù)的列表。實際參數(shù)在功能 調(diào)用中的列出順序非常重要.專業(yè)整理word格式文檔EN和ENO不能用于此類型的調(diào)用不使用形式參數(shù)名稱調(diào)用功能:實際參數(shù)(輸出)out :=LIMIT irarl, 5 + var)/ /功能名稱實際參數(shù)(輸入)使用FBD調(diào)用相同的功能:Lnm0 MHuai DJ J +iai MK對于非形式調(diào)用,沒有必要為所有形式參數(shù)賦值(另請參見參數(shù)).這是對IEC 61131-3的補充,且必須顯式啟用??諈?shù)字段用于跳過參數(shù)。帶空參數(shù)字段的調(diào)用:LnmMNout:=LIMIT ( ,var1,5 + var);使用FBD調(diào)用相同的功能:如果忽略位于末尾的形式參

48、數(shù),則無需使用空參數(shù)字段out:=LIMIT (0, varl);使用FBD調(diào)用相同的功能:01MHLHC!qbuul1INMX嵌套功能功能調(diào)用可包含進(jìn)一步的功能調(diào)用。嵌套深度不受限制。嵌套調(diào)用數(shù)組功能:out:=LIMIT (MN:=4, IN:=MUL(IN1:=var1, IN2:=var2), MX:=5);使用FBD調(diào)用相同的功能:返回值為ANY_ARRAY數(shù)據(jù)類型的函數(shù)不能 在功能調(diào)用內(nèi) 使用。專業(yè)整理未授權(quán)嵌套,數(shù)據(jù)類型為ANY_ARRAY:ANY_ ARRAY7out:LIMIT (MN: = 4, IN: =EXAHPINI: =varl, IN2:=var2), HX:=5

49、);ANY_ARRAY允許用作調(diào)用的功能的返回值或嵌套功能的參數(shù)。授權(quán)嵌套,數(shù)據(jù)類型為ANY_ARRAY:ANY_ARRAYANY_ARRAYANY_ARRAY7 77out: =EXAMP (JDJ: =4, IK: =EXAMP (INI; =varl r IN2 : =var2), MX: =var 3)EN 和 ENO所有功能都可以配置一個EN輸入和一個ENO輸出。0”如果調(diào)用功能時EN的值為“ 0”,則不會執(zhí)行該功能所定義的算法,并且ENO設(shè)置為如果調(diào)用功能時EN的值為“ 1”則執(zhí)行該功能所定義的算法。成功執(zhí)行這些算法之后,ENO的值設(shè)置為“1”。如果在執(zhí)行這些算法的過程中出錯,則E

50、NO將設(shè)置為“ 0”。如果EN引腳未賦值,則在調(diào)用 FFB時,會執(zhí)行FFB所定義的算法(與EN等于“ 1”時的情 況相同)。如果ENO設(shè)置為“ 0” (由企N=0或執(zhí)行過程中出錯),則功能的輸出設(shè)置為“0”功能的輸出行為不依賴于調(diào)用功能時是未使用EN/ENO還是EN=1.如果使用了 EN/ENO ,則功能調(diào)用必須是形式調(diào)用。out:=LIMIT (EN:=1, MN:=0, IN:=var1, MX:=5, ENO=>var2);使用FBD調(diào)用相同的功能:2.調(diào)用基本功能塊和導(dǎo)出的功能塊基本功能塊基本功能塊具有內(nèi)部狀態(tài)。即使輸入值不變,每次操作的輸出值也可以不同。例如,計數(shù)器的輸出值是遞

51、增的。功能塊可有多個輸出值(輸出)。導(dǎo)出的功能塊導(dǎo)出的功能塊(DFB)具有與基本功能塊相同的特性。用戶可以采用編程語言FBD、LD、IL和/或ST創(chuàng)建這類功能塊。參數(shù)將值傳入或傳出功能塊需要“輸入和輸出”。這些輸入 /輸出稱為形式參數(shù)。以下各項可用作功能塊輸入的實際參數(shù): 變量 地址 數(shù)值以下各項可用作功能塊輸出的實際參數(shù): 變量 地址實際參數(shù)的數(shù)據(jù)類型必須與形式參數(shù)的數(shù)據(jù)類型匹配。唯一的例外是泛型形式參數(shù),其數(shù)據(jù)類型 由實際參數(shù)決定。處理泛型 ANY BIT形式參數(shù)時,可使用數(shù)據(jù)類型為 INT或DINT (不是UINT和UDINT)的實 際參數(shù)。這是對IEC 61131-3的補充,且必須顯式啟用。示例:允許:AND (AnyBitParam := IntVarl, AnyBitParam2 := IntVar2);不允許:AND_WORD (WordParam1 := IntVar1, WordParam2 := IntVar2

溫馨提示

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

評論

0/150

提交評論