可編程邏輯控制器(PLC)有很多編程語(yǔ)言可供選擇。有種說(shuō)法,標(biāo)準(zhǔn)的偉大之處在于有很多選擇!盡管這很諷刺,但在IEC 61131-3編程語(yǔ)言中,有多種語(yǔ)言標(biāo)準(zhǔn)可供選擇確實(shí)是一個(gè)優(yōu)勢(shì)。
在參加我的培訓(xùn)班時(shí),很多學(xué)生抱著這樣一種心態(tài):選擇最適合自己的語(yǔ)言,然后專門學(xué)習(xí)該語(yǔ)言。上課伊始,他們經(jīng)常會(huì)問(wèn)我會(huì)推薦適用哪種語(yǔ)言?;蛘撸白詈玫恼Z(yǔ)言是哪個(gè)?”
圖1:IEC 61131-3編程語(yǔ)言提供了適合特定需求的語(yǔ)言。
我沒(méi)有回答,問(wèn)他們一個(gè)問(wèn)題:“在阿拉伯?dāng)?shù)字中,哪個(gè)數(shù)字最好?”或“英語(yǔ)中,哪個(gè)詞最好?” 再比如:辦公室軟件中,哪個(gè)工具最好?是文檔編輯器、演示文稿編輯器,還是電子表格編輯器?雖然可以使用文檔編輯器創(chuàng)建演示文稿和電子表格,但這是正確的方法嗎?
圖2:該圖比較了在Codesys中實(shí)現(xiàn)復(fù)雜布爾邏輯的不同語(yǔ)言。
使用一種工具實(shí)現(xiàn)多種目的,需要學(xué)習(xí)各種技巧,這是否值得付出??jī)H學(xué)習(xí)該工具對(duì)工作有用的主要功能,是不是更有效?與辦公軟件一樣,為應(yīng)用選擇最佳編程語(yǔ)言是最有效的,可以避免很多麻煩。當(dāng)使用的IEC 61131-3編程語(yǔ)言能夠充分發(fā)揮其語(yǔ)言的優(yōu)勢(shì)時(shí),PLC的編程和維護(hù)功能就會(huì)得到加強(qiáng)。
梯形圖編程
梯形圖(LD)編程的歷史,可以追溯到大約100年前的繼電器梯形邏輯(RLL),它主要用于描述電氣元件系統(tǒng)(如繼電器、計(jì)時(shí)器和電動(dòng)機(jī))。在自動(dòng)化時(shí)代初期PLC逐步替換繼電器和計(jì)時(shí)器時(shí),創(chuàng)建一種用戶熟悉并與被替換的工具相似的編程語(yǔ)言非常重要。
不幸的是,控制器變得越來(lái)越強(qiáng)大,能夠?qū)崿F(xiàn)的功能也已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)繼電器和計(jì)時(shí)器,LD語(yǔ)言被用于各種新的場(chǎng)景,而這并不是LD所擅長(zhǎng)的,因此效果也不是特別理想。
圖3:該圖顯示了順序功能圖的編程組件。
PLC供應(yīng)商提供新的、更適合PLC和可編程自動(dòng)化控制器(PAC)應(yīng)用的語(yǔ)言的速度比較緩慢,使這種情況進(jìn)一步惡化。對(duì)于源自北美的控制器而言尤其如此,這可以解釋在全球范圍內(nèi),LD持久受歡迎的程度為什么會(huì)有所差異。
LD編程的優(yōu)勢(shì)是什么?為什么它能持久受歡迎?關(guān)鍵就是圖形化。而通常來(lái)說(shuō)工程師是更傾向于圖形化思維的。
起初,大多數(shù)LD編程的替代方法都是基于文本的語(yǔ)言,這些語(yǔ)言與工程師的圖形化思維不會(huì)產(chǎn)生共鳴,其結(jié)果就是不愿從LD轉(zhuǎn)向其它語(yǔ)言。幸運(yùn)的是,這種情況正在發(fā)生變化。
LD仍然是一門偉大的語(yǔ)言,它的初衷是執(zhí)行復(fù)雜的布爾邏輯。在這個(gè)領(lǐng)域內(nèi),LD邏輯易于設(shè)計(jì)且易于調(diào)試。要確定為什么結(jié)果與預(yù)期不符,有多容易?在LD語(yǔ)言中,只需要觀察藍(lán)色實(shí)心觸點(diǎn)的路徑在何處中斷就可以快速獲得答案。
順序功能圖編程
順序功能圖(SFC)是一種圖形語(yǔ)言,非常適合表示狀態(tài)機(jī)(state machine),并且像LD語(yǔ)言一樣,它吸引了工程師的圖形化思維天性。
圖4:基于Codesys連續(xù)功能圖語(yǔ)言,展示了一個(gè)基于塊的編程設(shè)計(jì)示例。
狀態(tài)機(jī)的歷史可以追溯到很多年前,但是直到最近才被用于工業(yè)編程。狀態(tài)機(jī)是表示系統(tǒng)行為的一種非常強(qiáng)大的方法,可用于表達(dá)行為取決于過(guò)去歷史記錄的系統(tǒng)邏輯,例如:
1.設(shè)置線圈或復(fù)位線圈;
2.封裝邏輯(布爾反饋);
3.由代碼設(shè)置的內(nèi)部標(biāo)志,用于決定未來(lái)的行為。
實(shí)際上,即使是簡(jiǎn)單的TON On-Timer和R-Trig one-shot都是狀態(tài)機(jī)。它們的下一個(gè)行為取決于先前的輸入和行為。與其它編碼技術(shù)相比,狀態(tài)機(jī)具有許多優(yōu)勢(shì):
1.它們易于設(shè)計(jì),因?yàn)樗宄孛枋隽讼到y(tǒng)可能的狀態(tài),系統(tǒng)如何在這些狀態(tài)之間轉(zhuǎn)換,系統(tǒng)在這些狀態(tài)下應(yīng)采取的行動(dòng)。
2.在運(yùn)行時(shí),可以很容易地確定系統(tǒng)處于什么狀態(tài),在該狀態(tài)下正在做什么,以及在什么條件下系統(tǒng)會(huì)切換到下一個(gè)狀態(tài)(或者過(guò)程中出了什么問(wèn)題,導(dǎo)致無(wú)法切換到下一個(gè)狀態(tài))。
3.促進(jìn)構(gòu)思周密且組織良好的設(shè)計(jì)。這樣可以確保所有可能的事件都已得到妥善處理(就不會(huì)有人半夜三更把你從床上叫起來(lái),去修復(fù)無(wú)法正確處理異常工況的代碼)。
4.易于確定是否已經(jīng)測(cè)試了所有可能事件。只需打印出SFC,并在執(zhí)檢查時(shí)劃掉每個(gè)狀態(tài)和切換條件即可。完成所有工作后,測(cè)試就完成了(程序員的置信度為100%)。
如何實(shí)現(xiàn)狀態(tài)機(jī)?
幾乎任何語(yǔ)言都可以實(shí)現(xiàn)狀態(tài)機(jī),但它們都需要特定的編碼技術(shù),包括步(step)、轉(zhuǎn)換(transition)、分支/跳轉(zhuǎn)(branch/jump)和動(dòng)作(action)。
步描述了系統(tǒng)可以駐留的狀態(tài);轉(zhuǎn)換指示系統(tǒng)何時(shí)應(yīng)從上一步轉(zhuǎn)移至下一步;分支和跳轉(zhuǎn)指示下一步應(yīng)該是什么;動(dòng)作指定在該步期間(進(jìn)入或退出該步)應(yīng)執(zhí)行的操作。
由于其圖形化屬性和工作的專業(yè)性,SFC語(yǔ)言是狀態(tài)機(jī)最自然的選擇。對(duì)于那些需求異常復(fù)雜或要求特別靈活的系統(tǒng),狀態(tài)機(jī)也可以用基于文本的語(yǔ)言來(lái)實(shí)現(xiàn)。對(duì)于只能使用LD的企業(yè),狀態(tài)機(jī)甚至可以在LD中實(shí)現(xiàn),方法是為每個(gè)狀態(tài)使用一個(gè)線圈,轉(zhuǎn)移邏輯為每個(gè)線圈通電/斷電,將系統(tǒng)從一個(gè)狀態(tài)轉(zhuǎn)移到下一個(gè)狀態(tài),以及利用使用狀態(tài)線圈的獨(dú)立邏輯來(lái)執(zhí)行動(dòng)作。
一些供應(yīng)商還可以用統(tǒng)一建模語(yǔ)言(UML)來(lái)實(shí)現(xiàn)狀態(tài)圖,作為SFC的更強(qiáng)大、更靈活的替代方法,但這需要更長(zhǎng)的學(xué)習(xí)曲線,而且在工業(yè)控制領(lǐng)域中的接受度有限。
對(duì)于狀態(tài)機(jī),語(yǔ)言的選擇是次要的,所用技術(shù)的選擇更重要。在SFC中,該語(yǔ)言強(qiáng)制使用狀態(tài)機(jī)技術(shù)。在其它語(yǔ)言中,使用的技術(shù)取決于工程師制定的規(guī)則。
圖5:結(jié)構(gòu)引腳可以減少不必要的細(xì)節(jié)和混亂,從而增強(qiáng)了圖表的可讀性。
功能塊圖編程
功能塊圖(FBD)是一種圖形語(yǔ)言,符合工程師的圖形化思維。來(lái)自Codesys(以前被稱為3S-Smart Software Solutions)的集成開發(fā)環(huán)境提供了兩種FBD,即傳統(tǒng)的IEC 61131-3 FBD和類似但更靈活的連續(xù)功能塊圖(CFC),CFC還沒(méi)有正式成為IEC 61131-3的一部分。CFC是FBD的超集,具有兩大優(yōu)勢(shì):
1.基于塊的功能編程(執(zhí)行布爾和數(shù)學(xué)運(yùn)算);
2.分層設(shè)計(jì)(調(diào)用其它功能和功能塊)。
·基于塊的編程
基于塊的設(shè)計(jì)由預(yù)定義功能組件組成,這些組件連接在一起執(zhí)行布爾邏輯、數(shù)學(xué)計(jì)算或二者兼而有之。當(dāng)輸出是輸入的函數(shù)時(shí)(換句話說(shuō),當(dāng)沒(méi)有狀態(tài)變量,例如布爾反饋、設(shè)置/復(fù)位線圈或標(biāo)志時(shí)),CFC塊編程非常出色。當(dāng)同時(shí)使用無(wú)狀態(tài)功能和基于狀態(tài)的功能時(shí),請(qǐng)結(jié)合使用CFC和SFC。
因?yàn)檫B接性是用功能塊之間的線來(lái)表示的,所以很容易理解信息流以及信息是如何沿著其路徑進(jìn)行修改的。如果功能開始變得復(fù)雜,則應(yīng)將其分為較小的、更易于管理的子塊。如果塊之間存在大量連接,則可以將這些線連接至數(shù)據(jù)結(jié)構(gòu)類型的引腳。
結(jié)構(gòu)引腳(structure pin)具有3個(gè)優(yōu)點(diǎn):
1.在層次化結(jié)構(gòu)設(shè)計(jì)中,每個(gè)層次都消除了不必要的細(xì)節(jié),更清晰易于理解;
2.保持較小的功能塊,可以在一頁(yè)上查看整個(gè)信息流;
3.允許信息流向上游和下游,以進(jìn)一步減少不必要的細(xì)節(jié)。
對(duì)于以前采用LD實(shí)施基于塊或分層功能的PLC程序員來(lái)講,CFC提供了一種更為簡(jiǎn)潔和靈活的方法。CFC的開發(fā)速度更快,而且對(duì)于將來(lái)負(fù)責(zé)維護(hù)或改進(jìn)代碼的工程師來(lái)說(shuō),也更容易理解。
·分層設(shè)計(jì)
分層設(shè)計(jì)是一種從很多簡(jiǎn)單的構(gòu)建塊層層設(shè)計(jì)的實(shí)踐。與傳統(tǒng)的扁平化設(shè)計(jì)相比,分層設(shè)計(jì)具有許多優(yōu)點(diǎn):
1.定制;
2.創(chuàng)建;
3.測(cè)試與完善;
4.理解和維護(hù);
5.易于復(fù)用。
構(gòu)建塊技術(shù)支持并鼓勵(lì)在層次結(jié)構(gòu)的每個(gè)級(jí)別上,展現(xiàn)同等程度的細(xì)節(jié),這就使塊技術(shù)更易于設(shè)計(jì)和理解。這樣,在較高層次的設(shè)計(jì)中,不必因?yàn)檎宫F(xiàn)細(xì)節(jié)而被弄得雜亂無(wú)章,這些細(xì)節(jié)只在較低層的設(shè)計(jì)中很重要。在層次結(jié)構(gòu)的每個(gè)級(jí)別上,分層CFC設(shè)計(jì)應(yīng)都具有統(tǒng)一的細(xì)節(jié)展示。
使用LD作為構(gòu)建塊語(yǔ)言的傳統(tǒng)方法會(huì)存在2個(gè)弊端:
1.信息的低密度導(dǎo)致LD設(shè)計(jì)可能會(huì)分布到數(shù)10頁(yè)上,很難或不可能看到和理解全局;
2.不同層次的細(xì)節(jié)混雜在同一層次上會(huì)十分混亂,這使設(shè)計(jì)難以理解和維護(hù)。
而使用結(jié)構(gòu)化文本的CFC分層設(shè)計(jì)可以解決這兩個(gè)問(wèn)題,同時(shí)保持了LD的圖形特性。這是個(gè)兩全其美的解決方案。
分層設(shè)計(jì)是面向?qū)ο蟮墓I(yè)編程(OOIP)的關(guān)鍵功能。在部署和配置用戶自定義的功能塊以后,CFC編程開始與分布式控制系統(tǒng)(DCS)的編程/組態(tài)有點(diǎn)類似,但使用IEC 61131-3程序員可以控制底層的塊。如果某個(gè)塊需要較小的改進(jìn),程序員就可以執(zhí)行此操作,而無(wú)需費(fèi)時(shí)費(fèi)力的請(qǐng)DCS供應(yīng)商介入。
完整的分層PLC設(shè)計(jì),可以看作是一棵由分層CFC構(gòu)成主干和分支的樹?;趬K的CFC、SFC、LD和ST填充樹葉所處位置的詳細(xì)功能設(shè)計(jì)。IEC 61131-3語(yǔ)言共同構(gòu)成了一個(gè)團(tuán)隊(duì),該團(tuán)隊(duì)比其各個(gè)部分的功能更強(qiáng)大。
結(jié)構(gòu)化文本編程
盡管LD、SFC和FBD/CFC語(yǔ)言可以出色的完成其任務(wù),但有些運(yùn)算并不適合使用圖形化語(yǔ)言。
一些支持使用結(jié)構(gòu)化文本(ST)語(yǔ)言編程的運(yùn)算包括:
1.迭代運(yùn)算,例如For、While和Repeat;
2.復(fù)雜條件和選擇,例如IF-THEN和CASE;
3.位運(yùn)算,例如按位與、移位、旋轉(zhuǎn);
4.文本字符串運(yùn)算;
5.具有特殊要求或特別復(fù)雜的狀態(tài)機(jī);
6.純粹的面向?qū)ο缶幊蹋ㄕ{(diào)用方法,設(shè)置屬性等)。
有許多很好的教程,可指導(dǎo)工程師從其它基于文本的語(yǔ)言過(guò)渡到ST。對(duì)于那些完全不熟悉基于文本的語(yǔ)言的人來(lái)說(shuō),Visual Basic教程是一個(gè)很好的起點(diǎn)。盡管結(jié)構(gòu)化文本基于Pascal編程語(yǔ)言,但它與VB有非常相似,因此可以參考應(yīng)用更廣泛的VB教程。
圖6:此處的分層設(shè)計(jì)是在連續(xù)功能圖編程中實(shí)現(xiàn)的。
使用最合適的語(yǔ)言編程
要?jiǎng)?chuàng)建有效的工業(yè)控制程序,掌握合適的編程語(yǔ)言并知道如何有效使用這些語(yǔ)言非常重要。有很多語(yǔ)言可供PLC選擇,IEC 61131-3編程語(yǔ)言標(biāo)準(zhǔn)也提供了多種選擇。充分利用每種語(yǔ)言的優(yōu)勢(shì)效率會(huì)更高,而不是學(xué)習(xí)一種語(yǔ)言的各種技巧和變通方法來(lái)使其適用于所有應(yīng)用。程序員應(yīng)為應(yīng)用選擇最佳語(yǔ)言。
“為了創(chuàng)建有效的工業(yè)控制程序,掌握合適的語(yǔ)言,并知道如何有效使用這些語(yǔ)言非常重要?!?br /> 編輯:lyn
-
IEC
+關(guān)注
關(guān)注
2文章
200瀏覽量
28908 -
PLC編程
+關(guān)注
關(guān)注
46文章
246瀏覽量
37473
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論