盧紫華
上海振華重工(集團(tuán))股份有限公司
PLC(Programmable Logic Controller,可編程邏輯控制器)廣泛應(yīng)用于港口大型機(jī)械電氣控制、自升式海洋石油鉆井平臺(tái)電氣控制、大型工程起重船電氣控制等方面,積累了大量的實(shí)際經(jīng)驗(yàn)和數(shù)據(jù)。但是這些經(jīng)驗(yàn)和數(shù)據(jù)往往得不到有效的整理和總結(jié),加之這些大型設(shè)備大多屬于小批量定制化產(chǎn)品,形成了產(chǎn)品間設(shè)計(jì)非標(biāo)的現(xiàn)象。因此,如何從中找到共性,提出適應(yīng)性廣的標(biāo)準(zhǔn)化設(shè)計(jì)方法,成為提高產(chǎn)品生產(chǎn)效率、增強(qiáng)產(chǎn)品競(jìng)爭(zhēng)力的關(guān)鍵所在。在標(biāo)準(zhǔn)化設(shè)計(jì)方法的探索過(guò)程中,發(fā)現(xiàn)軟件工程標(biāo)準(zhǔn)化有著更為系統(tǒng)和深入的研究,由于PLC本身是一類(lèi)特殊的計(jì)算機(jī),故而可以從軟件工程標(biāo)準(zhǔn)化中借鑒方法,運(yùn)用于PLC程序設(shè)計(jì)中,從而達(dá)到PLC程序設(shè)計(jì)標(biāo)準(zhǔn)化的目標(biāo)。
PLC程序設(shè)計(jì)的標(biāo)準(zhǔn)化方法先從內(nèi)容或者方法層面進(jìn)行流程的分解,將分解的內(nèi)容稱(chēng)為要素,要素的有機(jī)結(jié)合便構(gòu)成了標(biāo)準(zhǔn)化的設(shè)計(jì)。流程標(biāo)準(zhǔn)化設(shè)計(jì)完成之后需要對(duì)各個(gè)要素分別進(jìn)行標(biāo)準(zhǔn)化的設(shè)計(jì)。
根據(jù)軟件程序設(shè)計(jì)的一般性方法結(jié)合PLC程序設(shè)計(jì)的特點(diǎn),可以按以下5個(gè)要素對(duì)PLC程序設(shè)計(jì)進(jìn)行分解:文檔的建立與管理、PLC系統(tǒng)的外部接口、變量定義、程序架構(gòu)、軟件檢驗(yàn)。
程序的架構(gòu)是PLC程序設(shè)計(jì)的核心,其他要素都圍繞其展開(kāi)和為其服務(wù);文檔為程序設(shè)計(jì)提供依據(jù)、指導(dǎo)、檢驗(yàn)以及數(shù)據(jù)關(guān)系;變量是程序設(shè)計(jì)的數(shù)據(jù)流表達(dá);外部接口為PLC系統(tǒng)和執(zhí)行機(jī)構(gòu)、人機(jī)界面以及第三方系統(tǒng)提供通訊;而軟件的檢驗(yàn)則為程序的準(zhǔn)確率提供保障。通過(guò)以上這4個(gè)要素,基本能夠確立程序要實(shí)現(xiàn)的目標(biāo),以及設(shè)計(jì)程序所需要的“原材料”,接下來(lái)便是通過(guò)適當(dāng)?shù)胤绞揭布礃?biāo)準(zhǔn)化的程序架構(gòu)來(lái)實(shí)現(xiàn)程序的功能[1-3]。
程序要素的有機(jī)結(jié)合就是從流程上來(lái)完成程序的設(shè)計(jì),可以分為5個(gè)步驟,分別為確定所需文檔、需求表及變量表等內(nèi)容,開(kāi)始程序代碼設(shè)計(jì)、聯(lián)調(diào)聯(lián)試、試車(chē)(見(jiàn)圖1)。按照這樣的流程,PLC程序設(shè)計(jì)標(biāo)準(zhǔn)化的設(shè)計(jì)問(wèn)題實(shí)際上轉(zhuǎn)化成要素的標(biāo)準(zhǔn)化設(shè)計(jì)問(wèn)題。
圖1 程序設(shè)計(jì)流程圖
不同的程序設(shè)計(jì)所需要的文檔種類(lèi)和數(shù)量是不同的。根據(jù)不同的功能、時(shí)間節(jié)點(diǎn)、文檔對(duì)于程序的作用,可以把所需的文檔歸成幾類(lèi),從功能角度分類(lèi)可將文檔分為:功能/工況說(shuō)明類(lèi)文檔、變量信息類(lèi)文檔、接口類(lèi)文檔、程序設(shè)計(jì)輔助類(lèi)文檔以及檢驗(yàn)類(lèi)文檔。
實(shí)現(xiàn)接口的標(biāo)準(zhǔn)化,首先得根據(jù)具體的項(xiàng)目情況確定應(yīng)用哪種通訊協(xié)議,確定好通訊協(xié)議之后,需要確定具體的傳輸數(shù)據(jù),包括數(shù)據(jù)的方向性和數(shù)據(jù)的數(shù)量以及數(shù)據(jù)的實(shí)時(shí)性要求。
變量的標(biāo)準(zhǔn)化則分為輸入輸出變量的標(biāo)準(zhǔn)化和中間變量的標(biāo)準(zhǔn)化。對(duì)于輸入變量,由于不同項(xiàng)目的不同要求,某一部件的物理地址往往會(huì)產(chǎn)生變化。這些地址一旦更改,將導(dǎo)致對(duì)程序也需要相應(yīng)進(jìn)行修改,修改量通常較大。鑒于這種情況,需要在物理地址和變量名稱(chēng)之間引入一組中間變量,通過(guò)輸入輸出變量和中間變量的地址映射,以應(yīng)對(duì)物理地址的變動(dòng)和變量名稱(chēng)的固定。采用現(xiàn)行軟件設(shè)計(jì)較多的做法,中間變量采用變量名而非物理地址作為變量的尋址方式。為了解決映射程序的實(shí)現(xiàn)問(wèn)題,在下節(jié)中提出了程序代碼的自動(dòng)化生成的方法。
從程序的設(shè)計(jì)過(guò)程來(lái)看,軟件檢驗(yàn)可以分為3個(gè)內(nèi)容:?jiǎn)蝹€(gè)功能塊的檢驗(yàn),聯(lián)調(diào)檢驗(yàn)以及測(cè)試檢驗(yàn),并針對(duì)各自特點(diǎn),分別制定標(biāo)準(zhǔn)化檢測(cè)方法。
PLC的程序設(shè)計(jì)更多的屬于結(jié)構(gòu)化的程序設(shè)計(jì),即整個(gè)程序由一系列功能塊構(gòu)成,功能塊則是程序的最基本單元。這種結(jié)構(gòu)的好處是能夠使一些大的復(fù)雜的軟件問(wèn)題分解成諸多小的簡(jiǎn)單的軟件問(wèn)題[4]。然而經(jīng)常使用的PLC程序模塊有很多并不能做到功能的相對(duì)獨(dú)立,有許多的互鎖、狀態(tài)等需要在程序中使用,根據(jù)它的這種特點(diǎn),程序的架構(gòu)可以分為3層。第一層是基本功能塊,包括I/O輸入輸出處理、外部接口處理等,這些功能塊的內(nèi)部功能較為簡(jiǎn)單,但重復(fù)度高,且不受不同設(shè)備的不同工況的影響;第二層是機(jī)構(gòu)功能塊,根據(jù)基本功能塊得到的數(shù)據(jù)來(lái)實(shí)現(xiàn)各個(gè)機(jī)構(gòu)的功能,包含的內(nèi)容有輸入命令,運(yùn)行允許,驅(qū)動(dòng)器控制,接觸器控制以及特殊故障檢測(cè);第三層是系統(tǒng)功能,是對(duì)控制系統(tǒng)的功能實(shí)現(xiàn)和處理,包括全局的運(yùn)行允許,通訊檢測(cè)等[5]。以基本功能塊為基礎(chǔ),機(jī)構(gòu)功能塊為主要控制內(nèi)容,系統(tǒng)功能實(shí)現(xiàn)了各個(gè)機(jī)構(gòu)的整合以及全局的控制,實(shí)現(xiàn)了整個(gè)電氣控制系統(tǒng)的功能。
程序設(shè)計(jì)就能夠適用這種代碼自動(dòng)化生成方法的前提是:PLC程序代碼具有高度重復(fù)性,執(zhí)行的是相同數(shù)據(jù)處理或者邏輯判斷,而相關(guān)變量組是離散的,沒(méi)有規(guī)律可循。以I/O變量和中間變量的地址映射程序?yàn)槔绦虼a為賦值語(yǔ)句,高度重復(fù);IO變量和與其對(duì)應(yīng)的中間變量構(gòu)成一個(gè)數(shù)據(jù)組,它們之間的組合具有離散性,沒(méi)有規(guī)律可循。因此這樣的映射程序可以采用程序代碼的自動(dòng)化生成方法。
該方案的原理是借助第三方軟件生成PLC程序源代碼,可利用VISUAL BASIC APPLICATION(VBA),以I/O地址映射為例,逐條將對(duì)應(yīng)I/O地址賦值給中間變量,以下通過(guò)程序偽代碼對(duì)循環(huán)代碼的方案進(jìn)行說(shuō)明[6]。其中,i表示變量對(duì)應(yīng)表中的行;j,k表示結(jié)果生成表中的行;Result.Cells表示結(jié)果生成表中的單元格。
j=2
k=3
n=Application.WorksheetFunction.CountA(Range("b:b"))′統(tǒng)計(jì)B列中非空單元格的數(shù)量
Fori=7 Ton+5 ′從第7行開(kāi)始,到第5+n行結(jié)束
If第i行第F列單元格中的值不為空Then
Result.Cells(j,第B列)=源代碼語(yǔ)言“A”+第i行第F列單元格中的值
Result.Cells(k,第B列)=源代碼語(yǔ)言“=”+第i行第A列單元格中的值
j=j+2
k=k+2
End If
Nexti
生成的源代碼復(fù)制到PLC程序中即可。
以自升式石油鉆井平臺(tái)的抬升控制系統(tǒng)為例,從故障列表、程序代碼的自動(dòng)生成和程序架構(gòu)的重新建立等方面進(jìn)行案例分析。
標(biāo)準(zhǔn)化的故障列表主要優(yōu)點(diǎn)為:
(1)故障通過(guò)統(tǒng)一的故障名尋址,便于識(shí)別和讀取,無(wú)需關(guān)注物理地址。
(2)統(tǒng)一的PLC與人機(jī)界面接口表,有利于接口的標(biāo)準(zhǔn)化。
(3)通過(guò)標(biāo)準(zhǔn)的分類(lèi)和故障級(jí)別的識(shí)別,能夠方便地進(jìn)行程序代碼的自動(dòng)化生成。
程序代碼的自動(dòng)化生成結(jié)果見(jiàn)圖2。
圖2 代碼自動(dòng)生成結(jié)果
程序架構(gòu)的層次見(jiàn)圖3,從重新設(shè)計(jì)的程序架構(gòu)中可以看出該架構(gòu)具有很清晰的層次和組織形式,在程序設(shè)計(jì)階段,具有很明確的操作步驟,易于修改和擴(kuò)展。
圖3 抬升控制程序架構(gòu)圖
立足于現(xiàn)代軟件工程理論,從工作流程、程序設(shè)計(jì)的具體內(nèi)容出發(fā),概括出了程序設(shè)計(jì)過(guò)程中的幾個(gè)要素,分析了這幾個(gè)要素之間的關(guān)系,介紹了如何通過(guò)這幾個(gè)要素的有機(jī)結(jié)合完成程序的設(shè)計(jì),分別研究討論了各個(gè)要素的標(biāo)準(zhǔn)化設(shè)計(jì)方法,從而形成一套完整的標(biāo)準(zhǔn)化程序設(shè)計(jì)方法。文章在提出方法后,就標(biāo)準(zhǔn)化設(shè)計(jì)方法的實(shí)現(xiàn)做了詳細(xì)介紹,最后結(jié)合實(shí)際的工程應(yīng)用案例做了分析。通過(guò)實(shí)際項(xiàng)目的操作,證明了該標(biāo)準(zhǔn)化方法以及相應(yīng)的程序代碼自動(dòng)化生成方法的可行性,獲得了良好的效果,為程序設(shè)計(jì)的標(biāo)準(zhǔn)化信息化提供了很好的方案,具備推廣價(jià)值。