面向?qū)ο缶幊?是一種利用對(duì)象、方法和屬性,來(lái)組織和簡(jiǎn)化程序元素的最佳方式。
面向?qū)ο缶幊?是一種利用對(duì)象、方法和屬性,來(lái)組織和簡(jiǎn)化程序元素的最佳方式。 最新發(fā)布的IEC-61131-3標(biāo)準(zhǔn)更新包括面向?qū)ο缶幊蹋∣OP)語(yǔ)言。雖然面向?qū)ο缶幊淌歉叽笊系男g(shù)語(yǔ),但它其實(shí)是關(guān)于組織和簡(jiǎn)化的。組織是指程序元素進(jìn)行分組以及分組所采用的機(jī)制。組織良好的程序更直觀(guān)和更易于使用。面向?qū)ο蟮奶卣髦荚诟纳坪痛龠M(jìn)健全的組織項(xiàng)目。簡(jiǎn)化是指向外部世界提供簡(jiǎn)化的接口。封裝之下,對(duì)象內(nèi)部的復(fù)雜細(xì)節(jié)則保留在程序中。 何為對(duì)象? 編程中的“對(duì)象”,就是將功能和數(shù)據(jù)整合在一起,用其來(lái)實(shí)現(xiàn)對(duì)實(shí)際設(shè)備、過(guò)程和其它結(jié)構(gòu)的狀態(tài)和行為的建模。在IEC 61131-3標(biāo)準(zhǔn)中,對(duì)象是帶額外特性的功能塊。功能塊可以定義方法和屬性,從而可以進(jìn)一步劃分代碼和擴(kuò)展接口。方法和屬性可以使用任何IEC-61131-3語(yǔ)言來(lái)實(shí)現(xiàn)。語(yǔ)言的選擇在每個(gè)方法或?qū)傩缘幕A(chǔ)上確定,這使其很容易根據(jù)環(huán)境來(lái)使用最適合的語(yǔ)言。 示例項(xiàng)目包含一個(gè)功能塊,該功能塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的加/減計(jì)數(shù)器(如圖1所示)。在其它面向?qū)ο缶幊蹋∣OP)語(yǔ)言中使用的“類(lèi)”,是“函數(shù)功能塊”的同義詞。兩者的定義都必須在使用前進(jìn)行實(shí)例化。類(lèi)的實(shí)例或功能塊被稱(chēng)為“對(duì)象”。 圖1:該示例工程包含了一個(gè)簡(jiǎn)單的增/減計(jì)數(shù)器的功能塊。圖片來(lái)源: Mitek 自動(dòng)化 定義方法 “方法”,是能夠訪(fǎng)問(wèn)所定義的函數(shù)塊內(nèi)部數(shù)據(jù)和參數(shù)的函數(shù)。它們也可以有輸入、輸出參數(shù)和返回值,這和普通函數(shù)一樣。 方法,可以用梯形圖來(lái)定義。當(dāng)輸入?yún)?shù)為“真”時(shí),計(jì)數(shù)器遞增,最后達(dá)到一個(gè)最大值。在功能塊的主體中,定義PMaxCount和Count參數(shù)。由于方法可以訪(fǎng)問(wèn)功能塊的數(shù)據(jù)和參數(shù),方法內(nèi)部就可以使用PMaxCount和Count參數(shù)。返回值被寫(xiě)入到CountUp,它是方法本身的名字。 在方法中定義NotMax變量,并將其分配給方法的調(diào)用堆棧。這意味著,前一個(gè)運(yùn)行周期的變量值不會(huì)保持。在功能塊主體中定義的變量被分配到內(nèi)存中,并在不同的運(yùn)行周期中保持一致。 另一種方法是定義遞減計(jì)數(shù)器,比如使用結(jié)構(gòu)化文本語(yǔ)言來(lái)實(shí)現(xiàn)。當(dāng)輸入?yún)?shù)為“真”時(shí),計(jì)數(shù)器遞減,直到減為零為止。Count 是功能塊的輸出參數(shù),并將返回值寫(xiě)入變量CountDn,這也是方法的名稱(chēng)。此方法提供了一種簡(jiǎn)單方便的方法,將整個(gè)程序分解成更小、更易于管理的程序塊。這種設(shè)計(jì),更易于匹配不同的語(yǔ)言。 從函數(shù)塊本體調(diào)用這些方法,是很簡(jiǎn)單的事情(如圖2所示)。由于這些方法是使用關(guān)鍵字“私有”定義的,所以只能在函數(shù)中調(diào)用它們。使用關(guān)鍵字“公共”定義的方法,也可以在外部調(diào)用。 圖2:用戶(hù)可以從功能塊本體來(lái)調(diào)用這些方法,并使用關(guān)鍵詞作為方法的防護(hù)。 定義屬性 “屬性”是類(lèi)似于變量的函數(shù),可以在表達(dá)式中使用,與使用變量的方法相同。不同于綁定到某個(gè)存儲(chǔ)位置,屬性與get()和set()功能綁定。當(dāng)需要從屬性中讀取數(shù)據(jù)時(shí),就需要執(zhí)行g(shù)et()功能。當(dāng)需要向?qū)傩詫?xiě)入數(shù)據(jù)時(shí),就需要執(zhí)行set()功能。 “公有”與“私有”關(guān)鍵詞,也可以用來(lái)控制屬性的訪(fǎng)問(wèn)權(quán)限。“私有”意味著屬性只能在定義的功能塊內(nèi)部使用?!肮小保瑒t意味著該屬性可用在外部調(diào)用。然而,“公有”與“私有”關(guān)鍵詞也可以用于get()和set()函數(shù)的定義。這就使得該屬性,外部可讀,內(nèi)部可寫(xiě)。 在最基本的形式中,屬性從內(nèi)部變量讀取、或?qū)懭霐?shù)據(jù)。它們的附加功能可用于驗(yàn)證數(shù)據(jù)值或執(zhí)行其它操作。例如,可在程序中添加MaxCount屬性。這允許將最大計(jì)數(shù)設(shè)置為指定的值,且其當(dāng)前值可讀。數(shù)據(jù)通過(guò)MaxCount屬性傳遞給set()和get()函數(shù),就像變量一樣。get()函數(shù)返回功能塊變量PMaxCount的值。set()函數(shù)驗(yàn)證輸入值,以便在將結(jié)果寫(xiě)入PMaxCount之前確保它是一個(gè)正數(shù)。 圖3:重置屬性沒(méi)有潛在讀寫(xiě)操作對(duì)象。 在圖3所示的例子中,在項(xiàng)目中增加了使用梯形圖語(yǔ)言實(shí)現(xiàn)的復(fù)位功能。重置屬性沒(méi)有潛在的讀寫(xiě)操作對(duì)象變量。當(dāng)寫(xiě)入“真”時(shí),執(zhí)行復(fù)位操作。當(dāng)讀取屬性時(shí),計(jì)算表達(dá)式的值,并返回結(jié)果。 值得一提的是,項(xiàng)目結(jié)構(gòu)和組織如何反映到項(xiàng)目樹(shù)中。在項(xiàng)目中,每個(gè)程序、函數(shù)塊、方法和屬性都用一個(gè)節(jié)點(diǎn)表示。雙擊節(jié)點(diǎn),就會(huì)在主窗口的文檔頁(yè)打開(kāi)一個(gè)選項(xiàng)卡。標(biāo)簽可以被移除并以單獨(dú)的窗口顯示。get()和set()功能都可以單獨(dú)顯示,因此可以用于屬性定義的顯示。 圖4:程序可以像功能塊一樣定義內(nèi)部數(shù)據(jù)、參數(shù)、方法和屬性。 面向?qū)ο蟪绦蛟氐膬?yōu)化 面向?qū)ο蟀ê芏?,但它最根本的目的就是以一種最優(yōu)的方式組織程序元素。對(duì)象、方法和屬性,是實(shí)現(xiàn)這一目標(biāo)的主要手段,對(duì)于理解和掌握這些概念,是最基本的。 項(xiàng)目初期,可采用較小的程序步驟來(lái)組織常規(guī)程序;基于對(duì)象的設(shè)計(jì)可以稍后進(jìn)行。熟悉使用這些技術(shù)以后,會(huì)讓你更容易考慮所有其它的可能性。沒(méi)有理由不做嘗試。 本文來(lái)自于《控制工程中文版》(CONTROL ENGINEERING China )2017年9月刊《技術(shù)進(jìn)展》欄目,原標(biāo)題為:PLC程序設(shè)計(jì):面向?qū)ο缶幊?/span> |
|
來(lái)自: 控制工程中文版 > 《待分類(lèi)》