當(dāng)前位置: 關(guān)于工控幫 > 新聞資訊 > 技術(shù)學(xué)習(xí) > 如何利用PLC編程語言提高編程的工作效率和質(zhì)量
如何利用PLC編程語言提高編程的工作效率和質(zhì)量
文章出處:gkb01 閱讀量:1457 發(fā)表時(shí)間:2022-07-21 09:17
本文主要從方法論的視角討論在PLC的編程過程中如何通過導(dǎo)出若干規(guī)則來改善當(dāng)前的編程實(shí)踐,提高編程的工作效率和編程的質(zhì)量。
軟件結(jié)構(gòu)化和模塊化的主要前提條件
軟件的結(jié)構(gòu)化和模塊化意味著軟件是按照一定的規(guī)則將按結(jié)構(gòu)劃分/功能劃分的單元(即模塊)進(jìn)行弱耦合,而這些單元或模塊是完全遵循獨(dú)立開發(fā)和獨(dú)立測試的原則進(jìn)行的。
構(gòu)成軟件結(jié)構(gòu)化和模塊化的主要前提條件是進(jìn)行周密的設(shè)計(jì)和遵循相關(guān)的標(biāo)準(zhǔn)。所謂進(jìn)行周密的設(shè)計(jì)就是要增加設(shè)計(jì)階段在整個(gè)開發(fā)過程中的權(quán)重;只有在清晰定義控制程序的結(jié)構(gòu)和定義模塊之間的相互關(guān)系之后才著手開始程序的開發(fā)。所謂遵循相關(guān)標(biāo)準(zhǔn)的含義是,充分挖掘IEC 61131-3規(guī)范的編程語言的潛在能力,在設(shè)計(jì)和開發(fā)階段加以利用,因?yàn)檫@些工控編程語言足足可以滿足編程人員的絕大部分的需要。當(dāng)然隨著編程平臺(tái)和集成開發(fā)環(huán)境的提升和進(jìn)步,目前還引入了IT領(lǐng)域流行的語言如C、C++、JAVA、Python等作為加強(qiáng)及補(bǔ)充。
之所以特別強(qiáng)調(diào)設(shè)計(jì)的重要,是因?yàn)榱己脺?zhǔn)確的軟件設(shè)計(jì)規(guī)范強(qiáng)烈地影響所開發(fā)的軟件的質(zhì)量。一般而言,軟件的設(shè)計(jì)規(guī)范書對每一個(gè)編程人員的影響可以用代碼的正確性和執(zhí)行效率來衡量。即使是沒有經(jīng)驗(yàn)和技巧的編程人員所造成的可能的缺陷,雖然會(huì)對系統(tǒng)的運(yùn)行產(chǎn)生影響,但也可以在調(diào)試中予以消減甚至消除。然而一個(gè)設(shè)計(jì)得有問題的軟件規(guī)范書交給有經(jīng)驗(yàn)的編程人員,很難找到那些不完善或者錯(cuò)誤的分析所造成的問題,并確定問題具體表現(xiàn)在哪些程序段,因而很難運(yùn)用編程技巧來避免和消除??傊?,在軟件設(shè)計(jì)階段所產(chǎn)生的后果將涉及以下各個(gè)方面:調(diào)試?yán)щy和耗費(fèi)時(shí)間,很低的重復(fù)使用率,軟件客制化的難度加大,以及阻礙軟件進(jìn)一步擴(kuò)展等。另外,從軟件開發(fā)的成本的角度看,如果消除代碼的bug所耗費(fèi)的時(shí)間和成本為1,那么消除一個(gè)設(shè)計(jì)不完善的問題其耗費(fèi)的時(shí)間和成本將會(huì)是10倍,如果要把這一問題隔離開來并找到解決方法可能會(huì)再高一個(gè)數(shù)量級,也就是100倍了。
至于為什么要遵循IEC 61131-3的國際標(biāo)準(zhǔn)就不必多言了。我們需要研究的是,在開發(fā)PLC的應(yīng)用程序的整個(gè)過程中,這個(gè)標(biāo)準(zhǔn)所規(guī)范的編程語言應(yīng)該如何分工,各司其職,才能收到良好的效果。
SFC兼具PLC系統(tǒng)行為描述的作用
PLC的控制程序的開發(fā)一般可劃分為三個(gè)階段,即分析、設(shè)計(jì)和寫代碼。在IEC 61131-3標(biāo)準(zhǔn)中并沒有規(guī)定在PLC軟件開發(fā)生命周期的哪個(gè)階段一定要使用哪種語言。我們必須自行去了解在這5種語言中哪一種最適合于支持軟件開發(fā)的初始關(guān)鍵階段,而哪些語言適用于寫程序代碼的階段。
從結(jié)構(gòu)化的完整性和表達(dá)的能力這兩個(gè)準(zhǔn)則來觀察,明顯可見SFC處于高端的級別,可以用作設(shè)計(jì)系統(tǒng)控制軟件的主要工具。SFC所表達(dá)的模塊化是結(jié)構(gòu)性的模塊化,區(qū)別于功能塊圖語言FBD所表達(dá)的功能性的模塊化。功能性的模塊化雖然重要,但在PLC控制程序的開發(fā)過程中,難以從工藝控制的完整性的視角來分析如何通過結(jié)構(gòu)化來實(shí)現(xiàn)模塊化。因?yàn)樵赑LC軟件開發(fā)生命周期的初始關(guān)鍵階段,最重要的是分析控制的構(gòu)成結(jié)構(gòu),導(dǎo)出每個(gè)構(gòu)成單元都是整個(gè)完整結(jié)構(gòu)中的一個(gè)獨(dú)立組成單位(也即是模塊),每個(gè)獨(dú)立的組成單元具有各自的功能性,但相互之間的關(guān)系卻是弱耦合,而非強(qiáng)耦合。由此可見SFC最適合于按軟件工程的方法進(jìn)行分析和設(shè)計(jì),而其它4種語言,還有SFC語言本身,都可用于寫程序代碼的階段。由于結(jié)構(gòu)文本化語言ST類似于C語言和Pascal語言,結(jié)構(gòu)化的表達(dá)能力遠(yuǎn)勝于FBD和LD,適于對各種算法特別是復(fù)雜算法進(jìn)行編程。而梯形圖語言LD因?yàn)闅v史的原因在電氣自動(dòng)化控制領(lǐng)域已經(jīng)形成為一種技術(shù)文化傳承,有著很深的應(yīng)用基礎(chǔ),所以在以SFC為主線的程序結(jié)構(gòu)中適合用于動(dòng)作塊和轉(zhuǎn)移條件的編程。如何應(yīng)用,則視具體情況而定。圖1給出了5種語言在PLC軟件設(shè)計(jì)階段中所處的級別和作用。
圖1 5種語言在PLC軟件設(shè)計(jì)中的作用
為什么推薦采用SFC作為設(shè)計(jì)系統(tǒng)控制的主要工具,而其他的語言則用在控制軟件代碼開發(fā)階段,主要是因?yàn)镾FC適用于多狀態(tài)操作運(yùn)行的場景,而且特別容易表達(dá)多狀態(tài)操作運(yùn)行的場景。而SFC所具有的獨(dú)特優(yōu)勢在于它能夠把大型復(fù)雜的過程分解為許多較小的易于了解、便于操作的過程。具體分析如下:
1)表達(dá)控制要求的超強(qiáng)能力;
2)圖形表達(dá)的形式方法:
3)支持初步設(shè)計(jì);
4)支持詳細(xì)設(shè)計(jì);
5)與其它編程語言的天然連接;
6)支持軟件的分段執(zhí)行
01、表達(dá)控制要求的超強(qiáng)能力
SFC順序功能圖語言有效繼承了法國PLC編程語言標(biāo)準(zhǔn)Grafcet的精髓,在表達(dá)的潛力方面與狀態(tài)圖無異,而在針對并行或并發(fā)問題上又吸收了Petri網(wǎng)優(yōu)勢。正因?yàn)闋顟B(tài)圖和Petri網(wǎng)被認(rèn)為在建模的動(dòng)態(tài)過程方面是最合適的工具,同時(shí)又被擴(kuò)展到各個(gè)領(lǐng)域,因此SFC語言在本質(zhì)上就具有對系統(tǒng)的行為建模的強(qiáng)大能力。
02、圖形表達(dá)的形式方法
SFC不僅是IEC 61131-3標(biāo)準(zhǔn)規(guī)范的圖形化的語言,而且在與同樣是標(biāo)準(zhǔn)所規(guī)范的另外兩種圖形化語言LD和FBD相比,在描述和表達(dá)系統(tǒng)的動(dòng)態(tài)過程的能力方面顯然居于更高的級別。進(jìn)一步說,SFC語言的圖形化的語法容易學(xué)習(xí)掌握和使用,也是優(yōu)勢之一。實(shí)際使用的經(jīng)驗(yàn)表明,對同一個(gè)工藝要求和控制過程,不同的編程人員編制出來程序具有高度的一致性,至少是大同小異,或者完全一樣,這也表明用SFC語言編制的程序可讀性很強(qiáng)
03、支持初步設(shè)計(jì)
在設(shè)計(jì)的初始階段,當(dāng)許多方面尚未清晰,或者設(shè)計(jì)人員還未深入了解之前,仍可以用SFC的圖形方法進(jìn)行系統(tǒng)行為的形式表達(dá),因此可以說SFC在初步設(shè)計(jì)階段就是一種有價(jià)值的工具。運(yùn)用SFC能夠避免在用自然語言描述系統(tǒng)規(guī)范時(shí)可能出現(xiàn)的模糊不清,這樣就可以大大減少客戶、設(shè)計(jì)者和編程人員之間的相互不理解的次數(shù)。
04、支持詳細(xì)設(shè)計(jì)
在設(shè)計(jì)的早期階段運(yùn)用SFC得出的方案,可以在取得新的信息之后逐漸深化,由概略進(jìn)一步細(xì)化,尤其是與狀態(tài)不關(guān)聯(lián)的動(dòng)作塊可進(jìn)一步細(xì)化,使之成為新的嵌套的SFC方案。依此方法一步步地深入,直到得到所希望的詳細(xì)深度。不論是在初步設(shè)計(jì)階段還是在詳細(xì)設(shè)計(jì)階段,這種在語義和語法上的連貫性,對編程人員來講,采用SFC語言是很順手的。
05、與其它編程語言的天然連接
明顯可見SFC非常適合于IEC 61131-3標(biāo)準(zhǔn)規(guī)范的其它編程語言組合使用,特別是在詳細(xì)描述控制細(xì)節(jié)(如轉(zhuǎn)移條件和基本的動(dòng)作)時(shí)采用梯形圖LD或ST語言,既可以收到提高整體的編程效率的效果,又可以提升可執(zhí)行代碼的性能。這就是所謂“在正確的時(shí)刻或正確的編程過程中視具體情況選擇正確的編程語言”的結(jié)果。
06、支持軟件的分段執(zhí)行
運(yùn)用SFC語言可以簡便地處理按不同的掃描執(zhí)行周期將整個(gè)控制軟件分割為多個(gè)程序段,這為減少最大的掃描時(shí)間提供了先決條件。應(yīng)該指出,在運(yùn)用SFC語言表達(dá)程序段的分割時(shí)均表現(xiàn)為顯性,按執(zhí)行條件是否滿足來啟動(dòng)不同程序段的執(zhí)行順序,這些執(zhí)行條件都是顯性條件,不存在隱含條件。
順序功能圖語言SFC概述
IEC 61131-3標(biāo)準(zhǔn)中,順序功能表圖(SFC:Squence Function Chart)是作為編程語言的公用元素定義的。它是采用文字?jǐn)⑹龊蛨D形符號相結(jié)合的方法描述順序控制系統(tǒng)的過程、功能和特性的一種編程方法。它既可作為文本類編程語言,也可作為圖形類編程語言,但通常將它歸為圖形類編程語言。因此,通常講IEC 61131-3有三種圖形類編程語言。
順序功能表圖(法文為GRADCET:Graphe de CommandeEtape-Transistion)最早由法國國家自動(dòng)化促進(jìn)會(huì)(ADEPA)提出。它針對順序控制系統(tǒng)的控制條件和過程,提出的一套表示邏輯控制功能的方法。由于該方法精確嚴(yán)密,簡單易學(xué),有利于設(shè)計(jì)人員和其他專業(yè)人員設(shè)計(jì)意圖的溝通和交流,因此,該方法公布不久就被許多國家和國際電工委員會(huì)所接受,并制定了相應(yīng)的國家標(biāo)準(zhǔn)和國際標(biāo)準(zhǔn)。IEC 60848《用于順序功能表圖的GRAFCET規(guī)范語言》以及中國國標(biāo)GB/T 21654《順序功能表圖用GRAFCET規(guī)范語言》的頒布,為我國應(yīng)用順序功能表圖編程語言提供了堅(jiān)實(shí)理論基礎(chǔ)。
繪制一個(gè)控制系統(tǒng)SFC表達(dá)的基礎(chǔ)是要確定該控制系統(tǒng)的邊界和順序功能表圖的范圍。通常,把一個(gè)控制系統(tǒng)分為施控系統(tǒng)和被控系統(tǒng)兩個(gè)相互依賴的部分。圖2表示施控系統(tǒng)和被控系統(tǒng)之間的關(guān)系。
圖2 控制系統(tǒng)的SFC表達(dá)舉例
施控系統(tǒng)接受來自操作員、過程等信息,并向被控系統(tǒng)發(fā)出操作命令。
被控系統(tǒng)包括執(zhí)行實(shí)際過程的操作設(shè)備,它接受來自施控系統(tǒng)的命令,并為施控系統(tǒng)提供反饋信息。圖中表示了這些系統(tǒng)順序功能表圖的界限。
施控系統(tǒng)的輸入是操作員和可能的前級施控系統(tǒng)的命令及被控系統(tǒng)的反饋信息,它的輸出包括送到操作員的反饋信息,前級施控系統(tǒng)的輸出命令和送到被控系統(tǒng)的命令。
被控系統(tǒng)的輸入是施控系統(tǒng)的輸出命令和輸入過程流程的參數(shù),它的輸出包括反饋到施控系統(tǒng)的信息、過程流程中執(zhí)行的動(dòng)作,它使該流程具有所需的特性。
施控系統(tǒng)的順序功能表圖描述控制設(shè)備的功能,由設(shè)計(jì)人員根據(jù)其對過程的了解來繪制,并作為詳細(xì)設(shè)計(jì)控制設(shè)備的基礎(chǔ)。
被控系統(tǒng)的順序功能表圖描述操作設(shè)備的功能,由工程設(shè)計(jì)人員繪制,作為操作設(shè)備工程設(shè)計(jì)的基礎(chǔ),它也用于繪制施控系統(tǒng)順序功能表圖。
順序功能表圖只提供描述系統(tǒng)功能的原則和方法,不涉及系統(tǒng)所采用的具體技術(shù),因此,用順序功能表圖可以描述控制系統(tǒng)的控制工程、功能和特性,可描述控制系統(tǒng)組成部分的技術(shù)特性而不必考慮具體的執(zhí)行過程。它適用于繪制電氣控制系統(tǒng)的順序功能表圖,也適用于繪制非電氣控制系統(tǒng)(如氣動(dòng)、液動(dòng)和機(jī)械的)的順序功能表圖。
圖3顯示了數(shù)控機(jī)床的被控系統(tǒng)和施控系統(tǒng)。圖中,被控系統(tǒng)是機(jī)床,施控系統(tǒng)是數(shù)控裝置??刂葡到y(tǒng)用于將材料進(jìn)行加工成為零件。
圖3 數(shù)控機(jī)床的被控系統(tǒng)和施控系統(tǒng)示例
SFC是一種按照自動(dòng)控制的要求對Petre網(wǎng)方法加以適當(dāng)簡化和改進(jìn)的程序設(shè)計(jì)法。它數(shù)學(xué)基礎(chǔ)嚴(yán)格,嚴(yán)密精確;但又簡單易學(xué)。描述元素只有3種,即:步(step)、轉(zhuǎn)換(transition)和有向連線(oriented line)。表1是順序功能表圖編程語言的有關(guān)術(shù)語。圖4是SFC的典型的表述方式。由一系列順序相連的狀態(tài)描述順序控制的過程,對應(yīng)每一個(gè)狀態(tài)有一個(gè)步序。由有向連線將前后各個(gè)狀態(tài)(步序)連接,僅當(dāng)前一個(gè)狀態(tài)(活動(dòng)步)執(zhí)行完成其規(guī)定的動(dòng)作,且由當(dāng)前狀態(tài)向排列在其后的狀態(tài)轉(zhuǎn)移的條件成立,才執(zhí)行有當(dāng)前狀態(tài)向下一個(gè)狀態(tài)轉(zhuǎn)移,直到整個(gè)順序過程完成后即停止。
表1 順序功能表圖編程語言的術(shù)語
術(shù)語 | 英文名稱 | 說明 |
表圖 | Chart | 用圖形方式描述系統(tǒng)的行為,例如兩個(gè)或更多變量、操作或狀態(tài)之間的關(guān)系 |
步 | Step | 定義系統(tǒng)順序部分狀態(tài)的GRAFCT語言元素,步分為活動(dòng)步和非活動(dòng)步 |
轉(zhuǎn)換 | TransitionGRAFCT | 語言元素,指示在兩個(gè)步或多步之間活動(dòng)的可能進(jìn)展 |
有向連線 | Directed Link | 表示步之間進(jìn)展的GRAFCT語言元素,將步連接到轉(zhuǎn)換,并將轉(zhuǎn)換連接到步 |
動(dòng)作 | Action | 表示輸出變量所進(jìn)行活動(dòng)與步有關(guān)的GRAFCT語言元素 |
狀態(tài) | Situation | 在給定時(shí)刻由GRAFCT描述,并由活動(dòng)步表征的系統(tǒng)狀態(tài)的名稱 |
轉(zhuǎn)換條件 | Transition Condition | 用布爾表達(dá)式結(jié)果表示的與轉(zhuǎn)換有關(guān)的GRAFCT語言元素,轉(zhuǎn)換條件是與每個(gè)轉(zhuǎn)換有關(guān)的邏輯表達(dá)式 |
圖4 SFC典型的表達(dá)方式
SFC 結(jié)構(gòu)化的優(yōu)勢
眾所周知IEC 61131-3實(shí)現(xiàn)結(jié)構(gòu)化分三個(gè)層次:
①通過軟件模型表現(xiàn)了配置、資源、任務(wù)、程序組織單元的結(jié)構(gòu)層次;
②創(chuàng)建了結(jié)構(gòu)文本化語言ST,為程序組織單元的結(jié)構(gòu)化程序?qū)崿F(xiàn),提供了文本化語言;
③順序功能圖語言既為程序組織單元的結(jié)構(gòu)化程序?qū)崿F(xiàn),提供了圖形化語言;又為整個(gè)程序設(shè)計(jì)的各個(gè)階段提供了實(shí)現(xiàn)結(jié)構(gòu)化設(shè)計(jì)的工具。
SFC可以表述單一的順序過程,也可以表述各種復(fù)雜的順序過程,如循環(huán)的順序過程,具有可控終止的順序循環(huán)過程,具有分支的循環(huán)順序過程(見圖5),并行分支的順序過程,選擇性的分支順序過程,同步的并行分支順序過程(見圖6),在完成分支過程之后再行合并的順序過程,等等??傊ㄟ^靈活的使用跳轉(zhuǎn)(有向連線)和轉(zhuǎn)移條件,可以將各種操作狀態(tài)組成各種結(jié)構(gòu)化的順序控制過程。
圖5 具有分支的循環(huán)順序過程
圖6 同步的并行分支順序過程
SFC描述方法直觀,十分便于程序設(shè)計(jì)人員和工藝專業(yè)人員在設(shè)計(jì)階段進(jìn)行溝通和交流。它特別便于用戶直接按工藝流程編制控制程序,不同的編程人員編的程序極少差異,提高了編程的正確性和程序的可讀性;用SFC表達(dá)控制內(nèi)容時(shí),實(shí)際工序與程序一一對應(yīng),一目了然;在控制工序發(fā)生異常時(shí)容易確認(rèn)問題的所在,因而修改與維護(hù)均很方便。概括起來說,SFC具有結(jié)構(gòu)化的屬性:其自頂向下的設(shè)計(jì)方法,以及可將步用作宏步,十分便于在初步設(shè)計(jì)時(shí)作為結(jié)構(gòu)化的工具。進(jìn)入詳細(xì)設(shè)計(jì)階段,再根據(jù)已明確的控制步驟和要求細(xì)節(jié),將宏步擴(kuò)展為每個(gè)具體的步,列出轉(zhuǎn)換條件和與每一步相關(guān)聯(lián)的動(dòng)作,控制程序就在這樣有條不紊的氛圍中完成。
如果遇到相當(dāng)復(fù)雜的控制問題,我們可以借助于有限狀態(tài)自動(dòng)機(jī)的方法,畫出狀態(tài)圖,只要掌握了狀態(tài)圖與SFC語義的異同,由狀態(tài)圖轉(zhuǎn)換為SFC程序也是相當(dāng)便捷的。
結(jié)束語
國際上SFC語言的使用已經(jīng)比較普遍。已經(jīng)在工業(yè)自動(dòng)化領(lǐng)域獲得成功的PackML(Packing Machine Language),不僅在包裝行業(yè)獲得廣泛的認(rèn)可和應(yīng)用,而且還被作為集成架構(gòu)的典型策略解決方案,為機(jī)械裝備的集成系統(tǒng)提供了建模的參照標(biāo)準(zhǔn)。PackML為包裝機(jī)械和生產(chǎn)線開發(fā)的編程語言,主要依據(jù)IEC 61131-3的順序功能圖語言SFC,并定義了許多適合包裝工藝應(yīng)用的功能塊,可用于SFC編程中的動(dòng)作塊。2019年P(guān)LCopen國際組織和美國的automation.com網(wǎng)站聯(lián)合進(jìn)行了了PLC用戶編程語言偏好的調(diào)查。用得最多的是結(jié)構(gòu)化文本語言(40%),其次是梯形圖(38%),再次是功能塊圖(35%),第四是順序功能圖(28%)。各種編程語言運(yùn)用的差距并不大,沒有特別多的,即使居第一的結(jié)構(gòu)化文本也不過比居于第五的其它語言多的有限。
國內(nèi)至今還沒有正式進(jìn)行過這方面的調(diào)查,但從平時(shí)的了解來看,截至目前為止在編制PLC程序時(shí),國內(nèi)的編程人員如果用到SFC,也只不過把它僅僅作為一種編制順控程序的工具,只有極少數(shù)的先知先覺者才認(rèn)識到并在實(shí)踐中把SFC當(dāng)作系統(tǒng)設(shè)計(jì)的工具。正是考慮到這一現(xiàn)實(shí),我們有必要對SFC的結(jié)構(gòu)化功能、它在描述控制系統(tǒng)的行為特性的作用,以及在系統(tǒng)設(shè)計(jì)中作為初步設(shè)計(jì)的整體結(jié)構(gòu)化的工具等重新認(rèn)識,把它的潛力充分發(fā)揮出來。
- 1西門子博圖軟件常見數(shù)據(jù)類型匯總
- 2發(fā)那科工業(yè)機(jī)器人如何編程讓屏幕顯示字符?
- 3如何利用PLC編程語言提高編程的工作效率和質(zhì)量
- 4誰說維修電工學(xué)不好PLC?這樣做你也可以成為高手!
- 5電機(jī)發(fā)熱怎么辦?老電工教你輕松解決~
- 6真正高端的電氣自動(dòng)化工程師需要具備什么素質(zhì)?
- 7假如PLC出現(xiàn)問題,怎么查找原因?
- 810個(gè)PLC實(shí)用技巧,記住了啥都不是事!
- 9為什么說SFC是PLC編程語言中最有潛力的?
- 10看看江西應(yīng)用科技學(xué)院實(shí)訓(xùn)基地都有哪些亮點(diǎn)?
- 11打造最具實(shí)力的電氣自動(dòng)化技術(shù)教學(xué)基地
- 12來星城約會(huì)工控幫,點(diǎn)亮生命另一個(gè)起點(diǎn)!