本文是CSDN上看到的一篇質(zhì)量比較高的文章,自己仔細(xì)讀了幾遍收獲很大,值得一起學(xué)習(xí)。我在作者的基礎(chǔ)上重新排版添加了一些備注和修改了一些錯(cuò)誤的地方。由于字?jǐn)?shù)比較多,因此分成了上下篇。
一、前言
本文將會(huì)講解高度抽象的設(shè)計(jì)模式,設(shè)計(jì)模式與案例無(wú)關(guān),并不以案例講題。反正學(xué)校按這種方式教了那么久也沒(méi)人聽(tīng)得懂。我將主要以理論為主,避免與具體案例綁定,以防止讀者先入為主,以為某一設(shè)計(jì)模式只能適用于某案例,或某一設(shè)計(jì)模式只能單獨(dú)使用,不能結(jié)合其它設(shè)計(jì)模式,又或者某一案例只適合某一設(shè)計(jì)模式。
快捷鍵:
- Shift + Alt + F4 轉(zhuǎn)換和編譯所有程序
- Alt + O + W PLC寫入
簡(jiǎn)單程序
Y0 := TRUE;
K1Y1 := HF;//指從Y1開始的4個(gè)連續(xù)端口設(shè)置為二進(jìn)制1111,也就是四路導(dǎo)通。
為什么要用K開頭呢? K在PLC符號(hào)中代表后面的文本將作為十進(jìn)制數(shù)字使用,然而數(shù)字不能用于標(biāo)識(shí)符的第一個(gè)字母,這是所有編程語(yǔ)言的通例。 K1是指4個(gè)連續(xù)端口。為什么是4個(gè)? 1位16進(jìn)制數(shù)代表4個(gè)端口。這個(gè)K1是指“1位16進(jìn)制數(shù)”的意思,也就是4個(gè)開關(guān)量。如果改為K2,就是“2位16進(jìn)制數(shù)”,代表8個(gè)開關(guān)量。Y1表示從Y1端口開始計(jì)數(shù),實(shí)際上就是C語(yǔ)言里的起始指針,數(shù)組指針之類的含義。
三菱ST編程相對(duì)西門子更簡(jiǎn)單,因?yàn)樗梢灾苯邮褂肵、Y、M、D這幾個(gè)系統(tǒng)標(biāo)識(shí),而西門子變量和端口全部都要聲明,然后定義到指定地址才能使用。
二、結(jié)構(gòu)化文本入門
PLC的經(jīng)典用法就是串并聯(lián)邏輯電路,ST語(yǔ)言的串聯(lián)用AND操作符,并聯(lián)用OR操作符,動(dòng)斷觸點(diǎn)(常閉)用NOT操作符,此外還支持奇校驗(yàn)XOR操作符。
2.1 單按鈕
M1 := X0 AND NOT M0;(* 上升沿檢測(cè),如果X0是通,M0是斷,則M1是通 *)
Y0 := Y0 XOR M1;(* 上升沿的時(shí)候轉(zhuǎn)換狀態(tài),如果Y0和M1中通的個(gè)數(shù)為單數(shù),則Y0為通,否則為斷 *)
M0 := X0;(* 記憶X0的上一個(gè)狀態(tài) *)
2.2 起保停
X0為通時(shí)Y0設(shè)置為通,X1為通時(shí)Y0設(shè)置為斷,自鎖電路。
Y0 := NOT X1 AND (X0 OR Y0);
在梯形圖中,有一種專業(yè)的自鎖電路的替代方法,就是SET和RST指令。它們?cè)赟T中被封裝成系統(tǒng)宏函數(shù)。
SET(X0, Y0);(* 按下X0時(shí),Y0置位 *)
RST(X1, Y0);(* 按下X1時(shí),Y0復(fù)位 *)
這是推薦使用的方法,簡(jiǎn)單易懂。ST宏函數(shù)和系統(tǒng)功能塊非常多,我們能夠記住一些指令就很不容易了,何況它們還有不同的參數(shù)。GX Wo(hù)rk2提供了一個(gè)快捷鍵,Ctrl + F1,把插入點(diǎn)定位在寫好的函數(shù)名上,按Ctrl + F1,IDE會(huì)自動(dòng)插入?yún)?shù)提示。如果連函數(shù)名也不記得了,可以在右邊的窗口雙擊插入函數(shù)名或功能塊名。西門子Portal則是從左邊的自定義程序和右邊的系統(tǒng)程序中拖拽到工作區(qū)。系統(tǒng)函數(shù)的第一個(gè)形參都是使能標(biāo)志,相當(dāng)于每一個(gè)系統(tǒng)函數(shù)內(nèi)置了一個(gè)條件表達(dá)式,只有當(dāng)?shù)谝粋€(gè)形參傳入TRUE(通)的時(shí)候,才執(zhí)行指令的功能。
2.3 XOR高電平奇校驗(yàn)
Y0 := X0 XOR X1 XOR X2;//做一個(gè)三聯(lián)開關(guān),X0,X1,X2的狀態(tài)變化都會(huì)引起Y0翻轉(zhuǎn)。
這個(gè)程序在X0,X1,X2之中任意一個(gè)改變狀態(tài)時(shí),都會(huì)使Y0狀態(tài)變化,也就是任意一個(gè)開關(guān)都可以自由地操作燈的亮滅。這個(gè)表達(dá)式如果要用標(biāo)準(zhǔn)的串并聯(lián)梯形圖來(lái)做,會(huì)非常麻煩。
- 連續(xù)XOR表達(dá)式也叫“ 高電平奇校驗(yàn) ”就是輸入點(diǎn)中TRUE的個(gè)數(shù)為單數(shù)的時(shí)候,結(jié)果為TRUE,雙數(shù)的時(shí)候結(jié)果為FALSE。
- 連續(xù)WOR表達(dá)式( 低電平奇校驗(yàn) )的效果是輸入點(diǎn)中的FALSE個(gè)數(shù)為單數(shù)時(shí),結(jié)果為FALSE,雙數(shù)的時(shí)候結(jié)果為TRUE。
我們做邏輯運(yùn)算多用的是高電平奇校驗(yàn)公式,很少用到低電平奇校驗(yàn)公式。當(dāng)奇校驗(yàn)公式中有奇數(shù)個(gè)常量目標(biāo)電平時(shí),根據(jù)奇校驗(yàn)的算法,可以證明它等價(jià)于偶校驗(yàn),其實(shí)也等于在中間的某個(gè)位置加入一個(gè)NOT運(yùn)算符或?qū)ψ罱K結(jié)果取反。
了解了奇校驗(yàn)的特點(diǎn)后,我們也可以用一個(gè)計(jì)數(shù)器來(lái)代替奇校驗(yàn)公式。
2.4 上升沿和下降沿
ST中的上升沿檢測(cè)使用LDP,下降沿使用LDF。升級(jí)版的單按鈕控制:
Y0 := Y0 XOR LDP(TRUE, X0);
LDP的第一個(gè)形參還是使能的意思,幾乎所有的指令都有很大概率在第一個(gè)形參寫TRUE,因?yàn)槿釶LC所有的指令都需要使能,而多數(shù)情況下,這些指令是需要永久使能的。LDP的第二個(gè)形參是上升沿檢測(cè)的變量,這里檢測(cè)的是X0的上升沿。實(shí)際上對(duì)應(yīng)單片機(jī)內(nèi)部電路,X0的引腳可能是收到了下降沿,這個(gè)LDP是指的從斷到通的狀態(tài),與單片機(jī)電平方向無(wú)關(guān)。當(dāng)收到上升沿的時(shí)候,LDP返回一個(gè)掃描周期的TRUE,TRUE與XOR組合,就等價(jià)于一個(gè)NOT,就將Y0翻轉(zhuǎn)了,而LDP只返回一個(gè)掃描周期的TRUE,所以也只有這一個(gè)掃描周期的XOR等價(jià)于NOT,其余掃描周期則為XOR FALSE,也就是不起作用。這樣就實(shí)現(xiàn)了X0在從斷到通時(shí)Y0會(huì)發(fā)生狀態(tài)翻轉(zhuǎn),也就是記憶按鈕的效果。
2.5 定時(shí)器和計(jì)數(shù)器
定時(shí)器
輸出自變量,ENO:執(zhí)行結(jié)果:位。定時(shí)器觸點(diǎn):TS普通,STS累計(jì)。定時(shí)器線圈:TC普通,STC累計(jì)。定時(shí)器當(dāng)前值:TN普通,STN累計(jì)。
計(jì)數(shù)器
輸出自變量,ENO:執(zhí)行結(jié)果:位。計(jì)數(shù)器觸點(diǎn):CS。計(jì)數(shù)器線圈:CC。計(jì)數(shù)器當(dāng)前值:CN
擴(kuò)展AB相編碼器的ST寫法
擴(kuò)展閱讀https://blog.csdn.net/rediculous/article/details/102656817 注意: ST語(yǔ)言不能直接寫C251
- C和T元件的線圈加第二個(gè)字符C,如CC0, TC1等,C就是
Coin
線圈。 - 觸點(diǎn)加S,如C0的觸點(diǎn)就是CS0,S就是
Switch
開關(guān)的意思。 - 數(shù)值加N,如C0的數(shù)值就是CN0,N是
Number
數(shù)字的意思。
ST編寫AB相編碼器
OUT_C_32(TRUE,CC251,0);
第一個(gè)參數(shù)是使能C251,當(dāng)它為TRUE時(shí),X0和X1被指定用于C251,這是PLC內(nèi)部系統(tǒng)的設(shè)計(jì),無(wú)法更改。第二個(gè)參數(shù)如果是CC251,表示使用C251,如果是CC252就使用C252。
C252比C251多使用一個(gè)X2作為復(fù)位。C254比C252多一個(gè)X6做外部使能。C253和C252功能一樣,但綁定的是X3,X4,X5。C255和C254功能一樣,但綁定的是X3,X4,X5,X7。
第三個(gè)參數(shù)是CS251的閥值。即CS251 := CN251 >= [第三個(gè)參數(shù)]
。與普通計(jì)數(shù)器不同,第三個(gè)參數(shù)不會(huì)限制計(jì)數(shù)器的增長(zhǎng)。如果不需要使用CS251,則第三個(gè)參數(shù)可以隨便寫。計(jì)數(shù)器復(fù)位當(dāng)然,C251也可以使用RST(X2, CN251);來(lái)復(fù)位,C252也可以用OUT_C_32(X6, CC252, 0);RST(X2, CN252);達(dá)到與C254一樣的效果。但指令表的響應(yīng)時(shí)間為0.3ms,比直接使用內(nèi)置的功能慢。
梯形圖剩下的功能就只有定時(shí)器和計(jì)數(shù)器了。下面演示一下定時(shí)器和計(jì)數(shù)器的用法。這個(gè)程序功能為按下X0兩次后,Y0輸出1秒的通,然后變回?cái)唷?/p>
OUT_C(X0, CC0, 2);(* 對(duì)X0計(jì)數(shù),它是邊沿有效的,計(jì)數(shù)器C0,CC0是C0的線圈,第2個(gè)C代表"Coin" *)
SET(CS0, M0);(* 達(dá)到2的時(shí)候,CS0變?yōu)門RUE,對(duì)M0置位,將M0也變?yōu)門RUE,CS0是C0的觸點(diǎn),第2個(gè)S代表"Switch"開關(guān)的意思 *)
RST(M0, CN0);(* M0為TRUE時(shí),復(fù)位計(jì)數(shù)器C0,M0為TRUE時(shí),按X0不會(huì)計(jì)數(shù),因?yàn)樗恢北粡?fù)位,CN0是C0的數(shù)值,第2個(gè)N是"Number"數(shù)字的意思 *)
OUT_T(M0, TC0, 10);(* M0為TRUE時(shí),定時(shí)器T0開始計(jì)時(shí),三菱FX3U定時(shí)器單位是100ms,第3個(gè)參數(shù)10表示1秒 *)
RST(TS0, M0);(* 時(shí)間到的時(shí)候TS0為TRUE,這一步就會(huì)復(fù)位M0,將系統(tǒng)狀態(tài)變回起始值 *)
Y0 := M0;(* 將M0的值從Y0輸出 *)
三、語(yǔ)句
3.1 條件分支IF-THEN…ELSE_IF-THEN…ELSE…END_IF;
我們?cè)賮?lái)試試自鎖電路的一種標(biāo)準(zhǔn)化寫法,它同樣具有很好的可讀性。
IF X0 THEN
Y0 := TRUE;
ELSE_IF X1 THEN
Y0 := FALSE;
END_IF;(* 注意:這個(gè)END_IF是要加分號(hào)結(jié)尾的,ST語(yǔ)言坑死人,多少新手被坑在這里好久才發(fā)現(xiàn)突然需要一個(gè)分號(hào) *)
比起SET和RST,使用了條件分支使程序看起來(lái)更像是說(shuō)明文檔。它的大意是:“如果X0通了,則讓Y0也通,如果X0沒(méi)通,但是X1通了,就讓Y0斷開,如果以上條件都不滿足,就什么也不做,保持之前的狀態(tài)?!?再來(lái)一個(gè)自鎖(X0,X1)+強(qiáng)制點(diǎn)動(dòng)(X2)+翻轉(zhuǎn)(X3)的綜合型開關(guān)電路,動(dòng)力輸出設(shè)計(jì)為Y4,并且每當(dāng)按下按鈕時(shí),會(huì)有對(duì)應(yīng)的指示燈亮起,指示燈設(shè)計(jì)Yn對(duì)應(yīng)Xn:
K1Y0 := K1X0;(* 4路指示燈直接賦值 *)
IF X0 THEN
Y4 := TRUE;(* 啟動(dòng) *)
ELSE_IF X1 THEN
Y4 := FALSE;(* 停止 *)
ELSE_IF LDP(TRUE, X3) THEN
Y4 := NOT Y4;(* 翻轉(zhuǎn) *)
ELSE_IF LDP(TRUE, X2) OR LDF(TRUE, X2) THEN
Y4 := X2;(* X2動(dòng)作時(shí),取消記憶,強(qiáng)制變?yōu)槭謩?dòng) *)
END_IF;(* 再次強(qiáng)調(diào):這個(gè)END_IF是要加分號(hào)結(jié)尾的,ST語(yǔ)言坑死人,多少新手被坑在這里好久才發(fā)現(xiàn)突然需要一個(gè)分號(hào) *)
讀者可以自己試試用梯形圖串并聯(lián)方式實(shí)現(xiàn)這個(gè)電路,一個(gè)簡(jiǎn)單的功能做成梯形圖也會(huì)非常復(fù)雜。條件分支的完整模板為:
IF conditions THEN
tasks;(* 語(yǔ)法上IF語(yǔ)句任何一段分支的tasks都可以是空的。如果是空的,分號(hào)也可以不要 *)
ELSE_IF conditions THEN (* 如果沒(méi)有其它條件,ELSE_IF必須省略,如果有多個(gè),ELSE_IF應(yīng)當(dāng)有很多,語(yǔ)法上沒(méi)有上限,可以寫到程序存儲(chǔ)器不夠了為止 *)
tasks;
ELSE_IF conditions THEN
tasks;
...
ELSE (* 如果沒(méi)有默認(rèn)操作,ELSE可以省略,也可以不省略 *)
tasks;
END_IF;(* 這個(gè)地方破天荒地有一個(gè)分號(hào) *)
3.2 狀態(tài)分支CASE-OF 1: … 2: … 3: … n: … ELSE … END_CASE;
這種分支結(jié)構(gòu)是專門用于狀態(tài)變量的,需要使用數(shù)字作為狀態(tài)變量,但代碼中不一定要按大小順序排版,也不一定要連續(xù)。未顯式定義的數(shù)字會(huì)轉(zhuǎn)接到ELSE段中。做一個(gè)演示用的紅綠燈,有紅亮(Y0)、黃亮(Y1)、綠亮(Y2)三種狀態(tài),用一個(gè)按鈕X0來(lái)控制。這個(gè)程序并不十分適合這一場(chǎng)景,只是做為介紹語(yǔ)法之用,具體工程中只需要5~6行代碼就搞定了。
IF LDP(TRUE, X0) THEN
D0 := D0 + 1;(* 狀態(tài)變量如果無(wú)止境地加上去會(huì)怎么樣?事實(shí)上不會(huì),因?yàn)樵贑ASE里有做限制 *)
END_IF;
CASE D0 OF
0:(* 狀態(tài)0的時(shí)候Y0通。不一定要換行,只是為了寫注釋方便我在冒號(hào)后面直接換行了*)
Y0 := TRUE;
Y1 := FALSE;
Y2 := FALSE;
1:(* 狀態(tài)1時(shí)Y1通 *)
Y0 := FALSE;
Y1 := TRUE;
Y2 := FALSE;
2:(* 狀態(tài)2時(shí)Y2通*)
Y0 := FALSE;
Y1 := FALSE;
Y2 := TRUE;
ELSE(* 其它狀態(tài)時(shí),跳到狀態(tài)0 *)
D0 := 0;
END_CASE;
與C語(yǔ)言家族不同,結(jié)構(gòu)化文本不需要break,它不會(huì)從一個(gè)狀態(tài)直接就執(zhí)行到下一個(gè)狀態(tài)。case語(yǔ)句的結(jié)構(gòu)很簡(jiǎn)單,開頭CASE和OF中間只能寫一個(gè)數(shù)值變量,后面是常量標(biāo)簽加個(gè)冒號(hào),一個(gè)ELSE代表未定義的數(shù)值,最后以END_CASE;結(jié)尾,注意那個(gè)分號(hào)。簡(jiǎn)化的寫法,通過(guò)條件判斷來(lái)賦值:
IF LDP(TRUE, X0) THEN
D0 := (D0 + 1) MOD 3;
END_IF;
Y0 := D0 = 0;
Y1 := D0 = 1;
Y2 := D0 = 2;
還有依次傳遞狀態(tài) (不推薦)
IF LDP(TRUE, X0) THEN
Y2 := Y1;
Y1 := Y0;
END_IF;
Y0 := NOT (Y1 OR Y2);
個(gè)人比較推薦6行寫法,比較正規(guī),5行寫法太作了,可讀性不好。目前看來(lái)CASE語(yǔ)句好像沒(méi)什么用。事實(shí)上CASE語(yǔ)句是IF語(yǔ)句的定制化版本,適合范圍更窄,但能少寫一些代碼。接下來(lái)的設(shè)計(jì)模式中如果條件允許,用CASE會(huì)有更好的可讀性,因?yàn)椴恢匾牟糠郑?biāo)簽數(shù)字)不會(huì)太顯眼。
3.3 循環(huán)
FOR temp := 起始值 TO 完成值 BY 增量 DO
業(yè)務(wù)代碼
END_FOR;
while x0 then
y0 := 1;
end_while;
REPEAT
D0 := D0 + 1;
UNTIL D0 == 0 END_REPEAT;
3.4 跳轉(zhuǎn)指令
- EXIT
提前終止當(dāng)前循環(huán),進(jìn)入尾部的代碼,相當(dāng)于C的 break。
- CONTINUE
提前跳過(guò)本次循環(huán),進(jìn)入首部的代碼,與C的continue類似。但三菱GX Works2中沒(méi)有這個(gè)關(guān)鍵字。
- RETURN
返回,相當(dāng)于X86匯編的RET指令,RETURN是無(wú)操作數(shù)指令。ST的函數(shù)返回值直接函數(shù)名接受值。三菱FX3U的函數(shù)是一次性的,建議不要將自定義函數(shù)用于FX3U。造成三菱FX3U函數(shù)為一次性的原因是FX3U沒(méi)有動(dòng)態(tài)棧。能夠函數(shù)復(fù)用的X86軟件的編譯器會(huì)給每一個(gè)CALL指令前面加上硬件壓棧指令PUSH,在RET之后會(huì)加上硬件彈棧指令POP。硬件棧是由CPU直接操作的連續(xù)內(nèi)存空間,不是軟件模擬的數(shù)據(jù)結(jié)構(gòu)。它需要CPU內(nèi)置有棧指針寄存器。而FX3U的PLC程序是虛擬的處理器,沒(méi)有設(shè)計(jì)棧指針的功能。雖然可以用軟件棧代替,但他們也沒(méi)有這么做。這就導(dǎo)致了所有CALL命令都綁定在一塊固定的寄存器上,無(wú)法嵌套。而且寄存器綁定函數(shù)后就會(huì)導(dǎo)致數(shù)據(jù)耦合,產(chǎn)生難以預(yù)料的后果。
三菱FX3U的功能塊可以產(chǎn)生多個(gè)實(shí)例,每一個(gè)實(shí)例綁定獨(dú)立的寄存器,就可以安全地做到代碼復(fù)用。對(duì)于純計(jì)算,即沒(méi)有狀態(tài)存儲(chǔ)功能的函數(shù)和功能塊,可以放心地復(fù)用,對(duì)于有狀態(tài)存儲(chǔ)功能的功能塊需要?jiǎng)?chuàng)建多個(gè)實(shí)例。所有支持梯形圖的PLC都難以實(shí)現(xiàn)動(dòng)態(tài)棧,因?yàn)閯?dòng)態(tài)棧和梯形圖的程序理念是相背離的,動(dòng)態(tài)棧希望程序盡可能使用動(dòng)態(tài)變量,而梯形圖依賴于靜態(tài)變量。動(dòng)與靜的矛盾之下,PLC設(shè)計(jì)者必須進(jìn)行取舍。FX3U的內(nèi)存量是足夠動(dòng)靜共存的,問(wèn)題在于動(dòng)態(tài)棧很難兼容梯形圖,而梯形圖才是PLC的主要賣點(diǎn)。
- JMP
跳轉(zhuǎn)到指定標(biāo)簽位置,和X86指令同名,可以用于代碼混淆,不建議手寫。但三菱GX Works2中沒(méi)有這個(gè)關(guān)鍵字。不確定是不是我的資料的問(wèn)題。三菱Q系列有JMP指令(比FX系列可以節(jié)省一個(gè)LD M8000,其實(shí)沒(méi)什么很大的意義),但不能作為ST的函數(shù)或關(guān)鍵字。
-
plc
+關(guān)注
關(guān)注
5017文章
13394瀏覽量
465663 -
設(shè)計(jì)模式
+關(guān)注
關(guān)注
0文章
53瀏覽量
8655 -
csdn
+關(guān)注
關(guān)注
2文章
17瀏覽量
6868
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
結(jié)構(gòu)化布線系統(tǒng)有哪些難題
TrustZone結(jié)構(gòu)化消息是什么?
Codesys之結(jié)構(gòu)化文本概述 相關(guān)資料分享
結(jié)構(gòu)化設(shè)計(jì)分為哪幾部分?結(jié)構(gòu)化設(shè)計(jì)的要求有哪些
什么叫結(jié)構(gòu)化的算法_算法和結(jié)構(gòu)化數(shù)據(jù)初識(shí)
![什么叫<b class='flag-5'>結(jié)構(gòu)化</b>的<b class='flag-5'>算法</b>_<b class='flag-5'>算法</b>和<b class='flag-5'>結(jié)構(gòu)化</b>數(shù)據(jù)初識(shí)](https://file1.elecfans.com//web2/M00/A7/21/wKgZomUMQo2AOLejAAAatbG2Cug854.png)
西門子PLC教程之結(jié)構(gòu)化編程的詳細(xì)資料說(shuō)明
![西門子<b class='flag-5'>PLC</b>教程之<b class='flag-5'>結(jié)構(gòu)化</b>編程的詳細(xì)資料說(shuō)明](https://file.elecfans.com/web1/M00/B9/06/pIYBAF57GFWAHmjCAADfx6sQ7ig874.png)
結(jié)構(gòu)化文本語(yǔ)言ST編程的學(xué)習(xí)課件
![<b class='flag-5'>結(jié)構(gòu)化</b><b class='flag-5'>文本</b>語(yǔ)言ST編程的學(xué)習(xí)課件](https://file.elecfans.com/web1/M00/D7/66/o4YBAF_pVaCAfMGTAAFXk8ZqMYk657.png)
結(jié)構(gòu)化文本(ST)編程參考手冊(cè)
![<b class='flag-5'>結(jié)構(gòu)化</b><b class='flag-5'>文本</b>(ST)編程參考手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MELSEC Q/L結(jié)構(gòu)體編程手冊(cè)(結(jié)構(gòu)化文本篇)
![MELSEC Q/L<b class='flag-5'>結(jié)構(gòu)</b>體編程手冊(cè)(<b class='flag-5'>結(jié)構(gòu)化</b><b class='flag-5'>文本</b>篇)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MELSEC iQ R結(jié)構(gòu)化文本(ST)編程指南
![MELSEC iQ R<b class='flag-5'>結(jié)構(gòu)化</b><b class='flag-5'>文本</b>(ST)編程指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PLC結(jié)構(gòu)化的文本設(shè)計(jì)模式和算法-下
西門子博途S7-SCL結(jié)構(gòu)化控制語(yǔ)言編程
![西門子博途S7-SCL<b class='flag-5'>結(jié)構(gòu)化</b>控制語(yǔ)言編程](https://file1.elecfans.com/web2/M00/89/78/wKgZomSFOkiAErlwAAAakxLC0l0715.png)
使用結(jié)構(gòu)化的PLC變量的工作原理
![使用<b class='flag-5'>結(jié)構(gòu)化</b>的<b class='flag-5'>PLC</b>變量的工作原理](https://file1.elecfans.com/web2/M00/8C/5D/wKgZomSrjaiAJHefAAASyFCxXys186.png)
評(píng)論