圖片來源:ControlSphere 作者 | Gary Pratt 面向?qū)ο蠊I(yè)編程不僅使設(shè)計易于構(gòu)建,還使工廠技術(shù)人員易于進(jìn)行故障排除,并使將來的控制工程師更易于進(jìn)行維護(hù)。面向?qū)ο蟮墓I(yè)編程也將成為控制工程的一個未來趨勢。 采用面向?qū)ο蟮墓I(yè)編程(OOIP)技術(shù),可提高面向?qū)ο缶幊蹋∣OP)的效率,而不會為工業(yè)控制應(yīng)用增加額外的復(fù)雜性。本文是面向?qū)ο蠊I(yè)編程系列文章的第二篇(第一篇請見 2020 年 1-2 月合刊《用于工業(yè)控制的面向?qū)ο缶幊獭?/a>),將介紹如何在其它塊的基礎(chǔ)上構(gòu)建新塊,以創(chuàng)建大型的分層分區(qū)系統(tǒng),以及如何在面向?qū)ο蠊I(yè)編程設(shè)計中管理輸入 / 輸出 (I/O) 和配置。 抽象、嵌套和接口 除了封裝之外,抽象、嵌套和接口也是面向?qū)ο蠊I(yè)編程中 3 個重要的概念。抽象是將細(xì)節(jié)按層次結(jié)構(gòu)中的各個級別進(jìn)行分組,因此程序員只需要處理設(shè)計中任何一個級別上的相關(guān)復(fù)雜性。嵌套允許對象實例化其它對象,以構(gòu)建并在邏輯上劃分大型分層系統(tǒng)。接口提供了與層次結(jié)構(gòu)中下一級交互的標(biāo)準(zhǔn)化方法。以一輛“野馬”車為例,車輛包含一個發(fā)動機(jī),該發(fā)動機(jī)包含一個啟動器,該啟動器包含一個電樞,電樞中的銅線可能來自在世界上任何地方進(jìn)行開采和冶煉的銅礦(如圖 1 所示)。抽象隱藏了發(fā)動機(jī)的復(fù)雜性,將銅線以及其它各個層次的細(xì)節(jié)隱藏起來,這些細(xì)節(jié)只適用于該層級。用戶只需要知道發(fā)動機(jī)的接口——點火開關(guān)和油門踏板。 ▎圖1:封 裝、抽象、嵌套和接口表明,塊可以構(gòu)建 在 其它塊上,以實現(xiàn)分層劃分的系統(tǒng),從而反映真實的設(shè) 計。 圖 2 顯示了如何使用抽象、嵌套和接口來構(gòu)建分層的過程工廠。在頂層,工廠程序可以嵌套(實例化)兩個反應(yīng)器對象,每個對象都通過抽象簡化了螺旋鉆的復(fù)雜性,而它們本身也嵌套了電動機(jī)和軸編碼器對象。軸編碼器和電動機(jī)對象封裝了從軸編碼器接收脈沖并控制電動機(jī)所需的所有功能,例如合上其接觸器、監(jiān)視其輔助觸點或向心開關(guān)以驗證其是否啟動,如果未啟動則生成警報、怠速等。 ▎圖2:用于實現(xiàn)流程工廠的抽 象、 嵌 套和接口概念。 經(jīng)過抽象后,在層次結(jié)構(gòu)的任何一個層次上唯一需要關(guān)注的是與下一個層次的接口。例如,螺旋鉆中的變速電動機(jī)具有用于設(shè)置電動機(jī)速度的接口。在螺旋鉆層次上,用戶無需了解或處理電動機(jī)的任何潛在復(fù)雜性,例如確定電動機(jī)是否正在響應(yīng)或發(fā)出警報。 一個例外是,如果螺旋鉆具有冗余配置的電機(jī),那就需要了解電機(jī)是否響應(yīng)。但是,在這種情況下,附加功能將被抽象為附加的層次結(jié)構(gòu)層,代替螺旋鉆實例化變速電動機(jī),它將實例化冗余變速電動機(jī),后者將實例化多個變速電動機(jī),以及在主電動機(jī)發(fā)生故障時使用備用電動機(jī)的邏輯。冗余變速電動機(jī)的接口仍然僅是速度指令。每個級別都封裝了它可以實現(xiàn)的所有功能,并且僅針對其自身無法完成的任務(wù)需求與更高級別接口。 對象配置和 I/O 映射 基于對象的控制與基于任務(wù)的控制之間的差異,與不同形式的組織架構(gòu)之間的差異有些類似?;谌蝿?wù)的控制,類似于集權(quán)化的企業(yè)架構(gòu),新功能必須在最高層級報備和注冊?;趯ο蟮目刂祁愃朴跈?quán)力下放的企業(yè),在該類型組織架構(gòu)中,新功能是自我支持的,并且在很大程度上可以自治的。 為了實現(xiàn)面向?qū)ο蠊I(yè)編程的可復(fù)用性優(yōu)勢,I/O 映射和參數(shù)不能像以前的編程技術(shù)一樣被硬編碼到任何對象的實例中。例如,在圖 3 中所示,如果將第一個反應(yīng)器中第一個螺旋鉆的軸編碼器中的 Pulse_FI 輸入硬編碼為全局 I/O 變量,則其它 3 個軸編碼器的Pulse_FI 輸入也將被綁定到同一全局變量。因此,該螺旋鉆對象無法重復(fù)使用。對于配置輸入(例如 PulsePerLiter_CI)也是如此。硬編碼的 I/O 或配置與現(xiàn)代面向?qū)ο蟮墓I(yè)編程編程技術(shù)不兼容。 ▎圖3:硬編碼的 I/O 和配置與面向?qū)ο蟮墓I(yè)編程不兼容。 面向?qū)ο蠊I(yè)編程通過全路徑 I/O 映射解決了 I/O 問題。從 70 年代的內(nèi)存映射到 90 年代的全局符號映射,這是自然的發(fā)展。完整路徑名是程序名的組合,通過點(.)分隔,后接所有中間的實例名,并以變量名結(jié)尾(例如:Plant.R1.A1.SE1.Pulse_FI)。I/O 編輯器使用這些完整路徑名將 I/O 映射到工廠層次結(jié)構(gòu)中相應(yīng)的過程變量(如圖 4 所示)。 ▎圖4:面向?qū)ο蟮墓I(yè)編程可以使用全路徑 I/O 映射和集中式配置來映射到物理 I/O 并區(qū)分對象。 配置問題通過中央服務(wù)處理。在啟動時,對象實例會向中央配置程序服務(wù)注冊,然后該服務(wù)從 CSV 文件或 SQL 數(shù)據(jù)庫獲取配置數(shù)據(jù),并將值分配給每個實例。配置輸入允許一系列的對象類型,通過簡化設(shè)計,滿足用戶最廣泛的需求。 面向?qū)ο蠊I(yè)編程的優(yōu)勢 面向?qū)ο蟮墓I(yè)編程可以提供很多優(yōu)勢,控制工程師應(yīng)當(dāng)了解下面這 9 個優(yōu)勢,以確定開發(fā)系統(tǒng)是否支持面向?qū)ο蟮墓I(yè)編程。 1. 可創(chuàng)建與匹配的工廠對象相對應(yīng)的獨(dú)立控制對象,并執(zhí)行該工廠對象所需的所有功能,例如警報、審核、物理 I/O、人機(jī)界面(HMI) I/O、縮放和控制等。 2. 圖形編輯器允許聲明無限數(shù)量的對象實例,以任意方式互連對象實例,以及將其它對象實例化為任意深度和復(fù)雜性的層次結(jié)構(gòu)的對象。在運(yùn)行時,編輯器應(yīng)允許對層次結(jié)構(gòu)進(jìn)行簡單的導(dǎo)航,例如雙擊對象實例,即可進(jìn)入項目層次結(jié)構(gòu),并可向后導(dǎo)航。 3. 具有運(yùn)行時調(diào)試對象單個實例的能力,包括 :在單個實例內(nèi)設(shè)置斷點,單步進(jìn)入單個實例以及查看 / 更改對象實例的私有變量。 4. 通過在實例可能位于項目層次結(jié)構(gòu)中的任何位置為實例的配置輸入分配唯一值,來區(qū)分相同對象的實例的方法。這些配置值可以來自 .CSV、微軟 Excel 文件、SQL 數(shù)據(jù) 庫以及 OPC UA。還必須有一種在運(yùn)行時搜索這些配置變量的值的方法(例如, 搜索 ISA 標(biāo)記名稱配置)。 5. 能夠?qū)⑽锢?I/O 映射到項目層次結(jié)構(gòu)中任何位置的任何實例中的任何變量(包括將一個輸入點映射到多個實例)。諸如來自現(xiàn)場總線設(shè)備的復(fù) 合 I/O,必須能夠映射到單個變量,或者映射到項目層次結(jié)構(gòu)中任何位置的一個或多個數(shù)據(jù)結(jié)構(gòu)變量。該工具必須提供一種方法,從其輸入開始、經(jīng) 過邏輯并到達(dá)其驅(qū)動的輸出來追蹤變量(以此類推,從物理輸出通過邏輯返回到影響該輸出的物理輸入的過程與此相反)。 6. 具有建立與分層控制對象匹配的分層 HMI 對象的能力,以及通過頂級對象的實例名稱互連兩個對象(及其潛在的數(shù)千個底層互連)的能力。 7. 能夠打印分層設(shè)計的“扁平” 版本,該版本顯示對象實例與每個實例上的唯一配置值之間的互連。 8. 實現(xiàn)繼承、方法、多態(tài)性和接口的功能可能會有所幫助。 9. 一個活躍的用戶社區(qū)和論壇,可以共享開源工廠對象和建議。 總體而言,面向?qū)ο蠊I(yè)編程的這些功能允許以對象為基礎(chǔ)構(gòu)建控制系統(tǒng)設(shè)計,就像通過對象來構(gòu)建工廠或設(shè)備一樣,因此物理設(shè)計和控制設(shè)計可以成為一體。數(shù)字以一種易于理解的方式與實體相匹配。也許將來,設(shè)備供應(yīng)商將為他們的設(shè)備提供這些控制對象。 面向?qū)ο蠊I(yè)編程不僅使設(shè)計易于構(gòu)建,還使工廠技術(shù)人員易于進(jìn)行故障排除,并使將來的控制工程師更易于進(jìn)行維護(hù)。正如工業(yè)控制領(lǐng)域已開始采用其它最佳通用軟件發(fā)展進(jìn)步一樣,面向?qū)ο蟮墓I(yè)編程也將成為控制工程的一個未來趨勢。 關(guān)鍵概念: ■ 面向?qū)ο蠊I(yè)編程提供了超越面向?qū)ο缶幊痰暮锰帯?nbsp; ■ 面向?qū)ο蠊I(yè)編程功能包括創(chuàng)建與實際對象匹配的獨(dú)立控制對象的能力。 思考一下: 您是否通過面向?qū)ο蠊I(yè)編程支持?jǐn)?shù)字設(shè)計,實現(xiàn)對象與實際組件和系統(tǒng)的匹配? |
|