西門子工廠自動(dòng)化工程有限公司 劉陽(yáng)
隨著中國(guó)工業(yè)化進(jìn)程越來越廣泛、深入,對(duì)從屬于各個(gè)工業(yè)領(lǐng)域的控制系統(tǒng)要求也越來越高,越來越精細(xì)。本文嘗試討論工業(yè)控制軟件編制的一些基本原則和基本方法。
對(duì)于所有工藝過程的控制,在編制控制軟件的過程中需要圍繞下列目標(biāo)進(jìn)行:
(1)滿足工藝過程或流程;
(2)保證人員設(shè)備安全;
(3)完備的故障診斷;
(4)現(xiàn)場(chǎng)調(diào)試維護(hù)方便;
(5)軟件拓展性。
為了保證控制軟件能達(dá)到以上目標(biāo),軟件的規(guī)范化和標(biāo)準(zhǔn)化是必要的途徑。
毋庸置疑,任何工業(yè)軟件都是為了滿足特定的工藝要求設(shè)計(jì)、編制的。比如,
一套控制高爐的DCS程序要滿足管理高爐及附屬設(shè)施的要求;要滿足高爐特定工藝流程的要求。
一套工業(yè)起重機(jī)的控制程序要滿足管理起重機(jī)各個(gè)機(jī)構(gòu)的要求;要滿足各個(gè)機(jī)構(gòu)連鎖要求;要滿足起重機(jī)的各種標(biāo)準(zhǔn)要求。
再比如,冶金系統(tǒng)中的帶鋼處理線,應(yīng)該滿足開卷、卷曲工藝、活套工藝、處理工藝等要求。
在工業(yè)軟件的編程原則中。滿足工藝過程的控制是編程原則中最低要求。
由于控制工藝千差萬別,在本文中不著重討論。
這里略微討論一下不同領(lǐng)域的工業(yè)過程編程時(shí)的相似性。
雖然各個(gè)工業(yè)領(lǐng)域有著完全不同的控制對(duì)象、控制方法和控制策略,控制軟件也不盡相同。但在編制工業(yè)軟件的過程中還發(fā)現(xiàn)存在著另外一種現(xiàn)象,就是有些不同行業(yè)的工藝看似毫無關(guān)系,但究其本質(zhì)是很相似的,這些相似系統(tǒng)的控制軟件也有相似性。在編程相似系統(tǒng)時(shí)可相互參照或者直接照搬,但要考慮差異。以下舉例說明。
2.1.1 例1:起重機(jī)和鉆機(jī)起升機(jī)構(gòu)的手柄處理
起重機(jī)和石油鉆機(jī)都有起升機(jī)構(gòu)。操作人員通常使用手柄對(duì)這兩種設(shè)備的起升機(jī)構(gòu)實(shí)現(xiàn)操控。軟件處理這兩類起升機(jī)構(gòu)手柄的程序有相同之處,也有不同之處。
相同點(diǎn):
手柄推出角度與起升機(jī)構(gòu)的速度呈現(xiàn)一定關(guān)系,通??梢蕴幚頌閮绲年P(guān)系。
不同點(diǎn):
在起重機(jī)中,手柄向前推,吊鉤向下運(yùn)行,手柄向后拉,吊鉤向上運(yùn)行。
在鉆機(jī)中,手柄向前推,吊鉤向上運(yùn)行,手柄向后拉,吊鉤向下運(yùn)行。
引起這種差異的原因是司機(jī)室的位置不同。絕大多數(shù)起重機(jī)的司機(jī)室在上方,而石油鉆機(jī)的司機(jī)室在下方。但他們有相似處就是,手柄向前推,大勾向遠(yuǎn)離操作者的方向運(yùn)行,手柄向后拉,大勾向著靠近操作者的方向運(yùn)行。雖然有差異,但都是符合人體工程學(xué)原理,讓操作者感覺操作順暢、自然。
如果編程者手中掌握了起重機(jī)手柄處理程序。那么很自然的,將這個(gè)程序稍加改動(dòng)后,就可以應(yīng)用到石油鉆機(jī)行業(yè)。
2.1.2 例2:船舶混合動(dòng)力推進(jìn)與鋼鐵行業(yè)-帶鋼控制-活套
混合推進(jìn):
在水中航行的船舶由螺旋槳推進(jìn)。傳統(tǒng)推進(jìn)方式是采用柴油機(jī)經(jīng)過減速箱直接帶動(dòng)螺旋槳從而推動(dòng)船舶航行。隨著大功率變頻系統(tǒng)的應(yīng)用和技術(shù)進(jìn)步。目前可以采用電機(jī)帶動(dòng)螺旋槳的方式推進(jìn)船舶,被稱為船舶電力推進(jìn)。在電力推進(jìn)中,有一種推進(jìn)方式是混合推進(jìn)方式。柴油機(jī)和電機(jī)通過減速箱共同推進(jìn)螺旋槳。在此推進(jìn)方式中又分為兩種操作模式PTI和PTO。第一種方式,電機(jī)吸收柴油機(jī)功率,并將吸收的功率輸出到船用電網(wǎng),達(dá)到節(jié)能的效果。第二種方式,電機(jī)輸出功率與柴油機(jī)共同帶動(dòng)螺旋槳,達(dá)到增加推進(jìn)功率的目的。
活套控制:
在冶金行業(yè),帶鋼控制在很多工藝流程中都需要?;钐卓刂剖菐т摽刂浦泻苤匾囊画h(huán)。活套工藝可以作為帶鋼在入口開卷和出口卷曲之間的緩沖帶。活套時(shí)而吸收帶鋼,時(shí)而釋放帶鋼以達(dá)到平衡帶鋼在入口和出口的速度差。在活套吸收帶鋼時(shí),活套電機(jī)向外輸出能量,在釋放帶鋼時(shí),活套電機(jī)向電網(wǎng)輸出電能。
這兩種工藝看似從屬于不同的工業(yè)領(lǐng)域,但實(shí)現(xiàn)方法是相似的。在大家熟知的驅(qū)動(dòng)雙閉環(huán)控制策略中,都可以通過使速度環(huán)飽和,進(jìn)行轉(zhuǎn)矩限制或者功率限制的編程方式實(shí)現(xiàn)活套或者混合推進(jìn)的工藝要求。
從這兩個(gè)例子可以得到啟示,雖然很多領(lǐng)域整體的控制對(duì)象不同,工藝過程迥異,但不同工藝過程中的子過程時(shí)而極其相似。
對(duì)于任何工藝過程,人員和設(shè)備的安全性都是最重要的。
在工業(yè)控制軟件中,安全的概念,需要貫徹編程和調(diào)試的始終。
2.2.1 例1:2012.7.23 甬溫線動(dòng)車組事故
下面是官方發(fā)布的7.23 甬溫線動(dòng)車組事故原因分析。
“當(dāng)溫州南站列控中心采集驅(qū)動(dòng)單元采集電路電源回路中保險(xiǎn)管F2遭雷擊熔斷后,采集數(shù)據(jù)不再更新,錯(cuò)誤地控制軌道電路發(fā)碼及信號(hào)顯示,使行車處于不安全狀態(tài)。雷擊也造成5829AG軌道電路發(fā)送器與列控中心通信故障,使從永嘉站出發(fā)駛向溫州南站的D3115次列車超速防護(hù)系統(tǒng)自動(dòng)制動(dòng),在5829AG區(qū)段內(nèi)停車。因軌道電路發(fā)碼異常,司機(jī)三次轉(zhuǎn)目視行車模式起車受阻,7分40秒后才轉(zhuǎn)目視行車模式以低于20公里/小時(shí)的速度向溫州南站緩慢行駛,未能及時(shí)駛出5829閉塞分區(qū)。因溫州南站列控中心未能采集到前行D3115次列車在5829AG區(qū)段的占用狀態(tài)信息,使溫州南站列控中心管轄的5829閉塞分區(qū)及后續(xù)兩個(gè)閉塞分區(qū)防護(hù)信號(hào)錯(cuò)誤地顯示綠燈,向D301次列車發(fā)送無車占用碼,導(dǎo)致D301次列車駛向D3115次列車并發(fā)生追尾?!?/p>
經(jīng)驗(yàn)表明,絕大多數(shù)事故的發(fā)生都是系統(tǒng)的多個(gè)安全缺陷同時(shí)出現(xiàn)導(dǎo)致的。從官方報(bào)道來看,甬溫線事故存在人為和技術(shù)兩個(gè)層面的缺陷才造成這么重大的事故。讓我們來探討一下其中的技術(shù)缺陷:對(duì)于高速鐵路“閉塞區(qū)”這么重要的信號(hào)系統(tǒng),應(yīng)該至少采用2種以上工作機(jī)制不同的閉塞信號(hào)系統(tǒng)。即使有一套信號(hào)系統(tǒng)故障,由于另一套系統(tǒng)采用與故障系統(tǒng)不同的工作機(jī)制,第二套系統(tǒng)在相同狀態(tài)下故障的可能性很低。這樣可以保證系統(tǒng)的安全性。
2個(gè)編程問題。
第一個(gè)編程問題在于,系統(tǒng)異常情況下,不能順暢的人為干預(yù)進(jìn)入目視行車模式。這個(gè)問題,后面敘述“解鎖”概念時(shí)詳細(xì)說明。第二個(gè)編程問題在于該信號(hào)系統(tǒng)的編程者沒有建立“故障安全”的編程概念和編程思路。這里引出“故障安全”的概念?!癋ail-safe”這個(gè)詞是我們熟知的一個(gè)詞匯。該詞匯的全稱為“故障導(dǎo)致安全”、“Fail to safe”。這一重要原則不僅應(yīng)該在硬件設(shè)計(jì)上體現(xiàn),也應(yīng)該體現(xiàn)在軟件編程中。在甬溫線例子中,雷擊造成的通訊故障本應(yīng)該導(dǎo)致信號(hào)系統(tǒng)自動(dòng)進(jìn)入安全狀態(tài)。具體講,當(dāng)程序發(fā)現(xiàn)通訊故障后,應(yīng)自動(dòng)將“5829閉塞區(qū)及相鄰閉塞區(qū)置為有列車存在”。而悲劇在于當(dāng)通訊故障后,程序并未將相鄰的“5829閉塞區(qū)置為有列車存在”。后車收到該5829閉塞區(qū)無列車信號(hào)后,以正常高速前進(jìn)與前車發(fā)生追尾,釀成悲劇。
另一例事故與甬溫線編程缺陷類似,如下。
2.2.2 例2:某柴油機(jī)生產(chǎn)廠家老8號(hào)測(cè)試臺(tái)火災(zāi)
在某知名柴油發(fā)動(dòng)機(jī)生產(chǎn)廠老8號(hào)測(cè)試臺(tái)上,由于軟件考慮欠缺,導(dǎo)致火災(zāi),幸未造成人員傷亡。
柴油機(jī)測(cè)試臺(tái)是由測(cè)試儀器、控制系統(tǒng)、變頻器、變頻電機(jī)及相連的柴油機(jī)組成。而新上的老8號(hào)測(cè)試臺(tái)要求包含動(dòng)態(tài)(ETC)測(cè)試功能。動(dòng)態(tài)測(cè)試的要求是:根據(jù)相關(guān)標(biāo)準(zhǔn)測(cè)試臺(tái)在30分鐘內(nèi)不停地變換轉(zhuǎn)矩和轉(zhuǎn)速用以測(cè)試柴油機(jī)是否達(dá)到排放標(biāo)準(zhǔn)的測(cè)試。以往我國(guó)這種測(cè)試臺(tái)都采用全盤進(jìn)口方式。老8號(hào)測(cè)試臺(tái)是第一套中國(guó)人擁有完全自主知識(shí)產(chǎn)權(quán)的ETC測(cè)試臺(tái)。在整個(gè)調(diào)試過程中,包括ETC功能在內(nèi)的所有功能均工作良好,未發(fā)現(xiàn)問題。但某夜此測(cè)試臺(tái)出現(xiàn)著火事故。
經(jīng)分析發(fā)現(xiàn)。由于增加了ETC功能,此測(cè)試臺(tái)較之以往測(cè)試臺(tái)增加了驅(qū)動(dòng)系統(tǒng)中的高速處理板,用以快速處理轉(zhuǎn)速和轉(zhuǎn)矩PID調(diào)節(jié)。此處理板內(nèi)部包含CPU。雖然在當(dāng)晚工作結(jié)束后,操作工將控制系統(tǒng)的電源斷開,但未斷開驅(qū)動(dòng)系統(tǒng)的電源。導(dǎo)致此快速處理板和驅(qū)動(dòng)系統(tǒng)仍就工作。變頻器仍在以極其小的轉(zhuǎn)矩驅(qū)動(dòng)電機(jī)。但因?yàn)檗D(zhuǎn)矩太小,無法克服摩擦,從感官看,電機(jī)未轉(zhuǎn)動(dòng)。操作人員以為系統(tǒng)已經(jīng)停機(jī),隨即離開。但該CPU內(nèi)的一個(gè)積分器經(jīng)過長(zhǎng)時(shí)間緩慢積分,電機(jī)輸出的轉(zhuǎn)矩最終突破靜摩擦閥值,使電機(jī)運(yùn)轉(zhuǎn)。而直連軸的柴油機(jī)內(nèi)部潤(rùn)滑油已經(jīng)排出,致使柴油機(jī)無潤(rùn)滑轉(zhuǎn)動(dòng),導(dǎo)致內(nèi)缸過熱引燃附近易燃物造成火災(zāi)。
事故原因在于項(xiàng)目增加了一個(gè)帶有CPU的控制板。在編程此控制板時(shí)未考慮通訊中斷后觸發(fā)安全動(dòng)作,造成事故。修復(fù)方法:應(yīng)將該CPU板與控制系統(tǒng)的通訊中斷作為變頻器停機(jī)的充分條件。
2.2.3 復(fù)雜系統(tǒng)與簡(jiǎn)單系統(tǒng)
筆者強(qiáng)調(diào)復(fù)雜系統(tǒng)是因?yàn)閺?fù)雜系統(tǒng)與簡(jiǎn)單系統(tǒng)不同。簡(jiǎn)單系統(tǒng),即使程序有問題,也不會(huì)產(chǎn)生嚴(yán)重后果,請(qǐng)看如下實(shí)例。
驅(qū)動(dòng)系統(tǒng)主從控制的2個(gè)例子刨析簡(jiǎn)單系統(tǒng)與復(fù)雜系統(tǒng)在安全性方面重要區(qū)別
起重設(shè)備4臺(tái)提升電機(jī)主從同步,與盾構(gòu)機(jī)12臺(tái)鉆進(jìn)電機(jī)主從同步。
初看,12臺(tái)鉆進(jìn)電機(jī)的控制對(duì)象多,顯得復(fù)雜。其實(shí)不然。
從小尺度角度講,盾構(gòu)機(jī)是水平方向鉆進(jìn),即使沒有主從控制和故障安全的處理程序,在鉆進(jìn)機(jī)構(gòu)故障的情況下,也不會(huì)產(chǎn)生嚴(yán)重后果,最多造成故障停機(jī),耽誤工程進(jìn)度。而大型起重機(jī)的起升機(jī)構(gòu)額定載荷可以達(dá)到幾千噸。如果程序有瑕疵最嚴(yán)重時(shí)將導(dǎo)致重物失控下墜,造成嚴(yán)重后果。
所以,較之盾構(gòu)機(jī)的鉆進(jìn)機(jī)構(gòu),起重機(jī)和鉆機(jī)的起升機(jī)構(gòu)更復(fù)雜。
通過上面幾個(gè)實(shí)例,就可以知道工業(yè)軟件的安全性是很重要的。如果說,我們發(fā)現(xiàn)辦公軟件經(jīng)常出現(xiàn)一些小問題,那不會(huì)造成嚴(yán)重后果。但工業(yè)控制軟件就完全不一樣了。如果由于程序工程師在編程時(shí)未考慮周到造成現(xiàn)場(chǎng)人身事故,那將是難以承受的事情。所以,工業(yè)軟件最重要的問題是安全問題。筆者認(rèn)為,寧可讓被控對(duì)象不動(dòng),也不要不安全的亂動(dòng);寧可讓被控對(duì)象安全的生產(chǎn)次品,也不能不安全的生產(chǎn)正品;寧可在物料上安全的浪費(fèi),也不能不安全的冒險(xiǎn)運(yùn)行??傊?,人的安全最重要。
如果工業(yè)控制軟件實(shí)現(xiàn)了工藝要求和安全功能,那么這個(gè)工藝過程是可以運(yùn)行的。其中的控制軟件也算及格,但離好程序的標(biāo)準(zhǔn)還有差距。
一套復(fù)雜系統(tǒng)的工業(yè)軟件至少還應(yīng)該有如下考慮。
2.3.1 規(guī)范化和標(biāo)準(zhǔn)化
規(guī)范化標(biāo)準(zhǔn)化的軟件帶來如下好處:
(1)軟件拓展性強(qiáng)
幾乎每個(gè)項(xiàng)目都會(huì)發(fā)生這樣的事情。最初按照工藝要求編制好的程序,到現(xiàn)場(chǎng)調(diào)試階段發(fā)現(xiàn)需要增加一些新功能。那么用標(biāo)準(zhǔn)化和規(guī)范化原則編制的軟件通過調(diào)用一些標(biāo)準(zhǔn)程序,很容易實(shí)現(xiàn)新功能。編程者不用在現(xiàn)場(chǎng)絞盡腦汁進(jìn)行從底層開始的編程。
(2)不同的工藝過程可以使用大量相同的子程序
即使是相距甚遠(yuǎn)的工藝過程,它們也可以使用大量相同底層子程序。比如和變頻器通訊、模擬量處理、電動(dòng)閥門控制、機(jī)床刀庫(kù)管理、閉環(huán)調(diào)節(jié)、報(bào)警處理等。
(3)程序?qū)哟畏置?/p>
實(shí)現(xiàn)程序規(guī)范化和標(biāo)準(zhǔn)化的一個(gè)方法就是將復(fù)雜過程分解成若干個(gè)子過程。再將若干個(gè)子過程再次細(xì)化為更小的若干子過程。這樣的程序?qū)哟畏置鳎勺x性、可調(diào)試性增強(qiáng)。
2.3.2 現(xiàn)場(chǎng)調(diào)試維護(hù)方便
程序?qū)哟畏置鳌⒊渥愕淖⑨?、?duì)象歸類都可以使現(xiàn)場(chǎng)調(diào)試方便。
一個(gè)層次分明的程序顯然比雜亂的蜘蛛網(wǎng)式結(jié)構(gòu)的程序要容易調(diào)試。
好的注釋是使程序調(diào)試方便的一個(gè)重要方法。如果能用20%~30%的編程時(shí)間編寫注釋和說明,將會(huì)是現(xiàn)場(chǎng)調(diào)試者的福音。現(xiàn)場(chǎng)調(diào)試者總是不怕注釋冗長(zhǎng),而怕注釋不夠。
將編程處理的對(duì)象歸類可以達(dá)到減少對(duì)象類型減小程序復(fù)雜性的目的,從而也有益程序調(diào)試。
好程序的特點(diǎn)是結(jié)構(gòu)清晰,分類明顯,善于組合調(diào)用標(biāo)準(zhǔn)程序。好程序讓人讀起來有一種韻律感。
2.3.3 故障診斷
好的程序要使最終用戶容易判斷哪里有故障,從而及時(shí)的采取適當(dāng)措施避免因故障導(dǎo)致的損失繼續(xù)擴(kuò)大。
自動(dòng)/手動(dòng),連鎖/解鎖,正常/異常的概念,有相似性也有不同點(diǎn),往往交織在一起。
這里特別強(qiáng)調(diào)“解鎖、手動(dòng)或者異常操作(日本的系統(tǒng)稱之為“非常操作”)的功能”。在編程時(shí)不能只考慮“連鎖-自動(dòng)-正常”操作模式,而忽略“解鎖-手動(dòng)-異?!辈僮髂J?。在許多工藝過程控制中,尤其在被控對(duì)象異常時(shí),是非常需要人為干預(yù)工藝過程的。圖1是DCS系統(tǒng)中手動(dòng)解鎖后人工干預(yù)系統(tǒng)輸出的畫面。
2.4.1 例1:甬溫線事故
甬溫線事故暴露出這方面的問題。如上面的官方分析。前車司機(jī)發(fā)現(xiàn)信號(hào)系統(tǒng)故障后,3次嘗試將列車改為目視行車模式但都失敗,到第四次才成功。這是典型的系統(tǒng)軟件設(shè)計(jì)缺陷。本例中,目視行車模式相當(dāng)于手動(dòng)、解鎖、異常的操作模式。在自動(dòng)/手動(dòng)、連鎖/解鎖、正常/異常的操作模式中,只要系統(tǒng)探測(cè)到人為申請(qǐng)進(jìn)入手動(dòng)、解鎖、異常操作模式的動(dòng)作,那么除非是在極其特殊的情況下,系統(tǒng)需要判斷是否有誤操作以外,都應(yīng)該優(yōu)先讓系統(tǒng)進(jìn)入手動(dòng)、解鎖、異常的操作模式。解決誤操作方法是讓操作者多次確認(rèn)。一旦確認(rèn),系統(tǒng)就應(yīng)該毫無保留的為人為干預(yù)留出接口,給操作者處理異常情況留出足夠的操作空間和操作權(quán)限。
2.4.2 例2:DCS PID 自動(dòng)/手動(dòng)轉(zhuǎn)換
所有DCS產(chǎn)品的PID調(diào)節(jié)器都包含自動(dòng)和手動(dòng)操作模式,并且是無擾切換。PID的手動(dòng)控制就體現(xiàn)“手動(dòng)/解鎖/異?!辈僮髂J降木瘛?/p>
2.4.3 例3:船級(jí)社規(guī)范中描述的“越控”功能
在船用設(shè)備某些特定的功能中,各國(guó)的船級(jí)社都強(qiáng)制要求必須包含“越控”功能。所謂“越控”功能,就是類似“解鎖”的操作模式,這也體現(xiàn)了“手動(dòng)/解鎖/異?!辈僮髂J酱嬖诘谋匾浴?/p>
2.4.4 例4:汽車組裝線
圖1 DCS系統(tǒng)中手動(dòng)解鎖后人工干預(yù)系統(tǒng)輸出的畫面
汽車組裝線是一個(gè)長(zhǎng)達(dá)數(shù)百米的連續(xù)生產(chǎn)線。通常情況是組裝線承載產(chǎn)品以緩慢速度前行。未組裝完全的汽車在組裝線上的各個(gè)工位進(jìn)行組裝。出現(xiàn)異常情況時(shí),各個(gè)工位都可以“暫?!鄙a(chǎn)線,以便操作者進(jìn)行故障處理。
好的程序是有層次感的。層次多的程序可以處理復(fù)雜邏輯。層次少的程序只能處理簡(jiǎn)單工藝問題。人們應(yīng)摒棄從輸入點(diǎn)做邏輯直接輸出的編程方式,這種編程方式?jīng)]有中間層,編程要有層次感,因?yàn)橛袑哟蔚某绦蚩梢詭碇T多好處。
程序?qū)哟沃饕?個(gè)含義:程序結(jié)構(gòu)有層次和在輸入和輸出之間帶有特定意義的中間層變量。
要解決一個(gè)復(fù)雜的工藝過程,首先,需要分解一個(gè)復(fù)雜的過程。把復(fù)雜過程合理分為多個(gè)簡(jiǎn)單子過程。合理劃分各個(gè)過程和子過程的關(guān)鍵是找到這些簡(jiǎn)單任務(wù)之間的明確界限,界定清楚后,就可以封裝這些簡(jiǎn)單子過程。
其次,針對(duì)各個(gè)子過程進(jìn)行編程。此時(shí)就不要考慮太多其他層級(jí)的過程,而是專心研究和琢磨如何實(shí)現(xiàn)這個(gè)過程的編程。這樣使思路十分清晰,編程也變得輕松。
編制工業(yè)程序就是將總過程分解為若干子過程。子過程中又可以分解為若干層級(jí)更低的子過程。直到將子過程分解到十分容易編程或者是在現(xiàn)有庫(kù)中找到相應(yīng)子程序?yàn)橹埂?/p>
在新編程一個(gè)子過程(子程序)時(shí),要考慮預(yù)留,保證子程序的拓展性。就是說,雖然這個(gè)子過程是為了完成上層任務(wù)而開發(fā)的,但仍要考慮其他任務(wù)調(diào)用此子過程的可能性??紤]子過程的通用性就必然會(huì)加強(qiáng)子過程的拓展性。
以上就是所謂的程序的層次性。隨著程序的層次的增加,中間變量自然就有層次了。
下面舉例說明編程層次。
2.5.1 例1:某知名車廠總裝線變頻控制提升機(jī)
Integra標(biāo)準(zhǔn)是SIEMENS為全球各地的奔馳轎車組裝線開發(fā)的PLC程序標(biāo)準(zhǔn),但該標(biāo)準(zhǔn)沒有SIEMENS MD型號(hào)變頻器驅(qū)動(dòng)程序,為此,筆者開發(fā)了與integra標(biāo)準(zhǔn)接口的MD變頻器驅(qū)動(dòng)程序FC690。
起初開發(fā)FC690是為了實(shí)現(xiàn)整車升降臺(tái)的控制工藝。但在FC690中并不關(guān)注所控制的變頻器到底是驅(qū)動(dòng)升降臺(tái)還是輥道。FC690的上級(jí)程序根據(jù)工藝要求和連鎖條件對(duì)FC690接口信號(hào)進(jìn)行設(shè)定從而控制輥道或者升降臺(tái)。在編程FC690時(shí)編程者只關(guān)心與變頻器的接口,不關(guān)心控制對(duì)象。而上層程序只關(guān)心所控制對(duì)象,不關(guān)心如何控制變頻器。這個(gè)例子顯示了程序?qū)哟魏头庋b的重要。
另外,開發(fā)完這個(gè)子程序,還有2個(gè)步驟需要進(jìn)行:全面的測(cè)試和編寫完整的使用文檔。
2.5.2 例2:CP300絞車電機(jī)選擇相關(guān)功能
在中石油自主開發(fā)的第一套300英尺樁腿式海上石油鉆井平臺(tái)中,4臺(tái)絞車變頻電機(jī)的控制任務(wù)是一個(gè)復(fù)雜任務(wù)。該任務(wù)要求,4臺(tái)電機(jī)中以任意數(shù)量、任意組合方式驅(qū)動(dòng)絞車運(yùn)行。為了達(dá)到這個(gè)控制任務(wù),可以將這個(gè)復(fù)雜任務(wù)分解為若干層次的子任務(wù)加以實(shí)現(xiàn)。
(1)“電機(jī)選擇”子程序。選擇任意4臺(tái)電機(jī)。每一臺(tái)電機(jī)調(diào)用一次子程序。調(diào)用結(jié)束,就得到該電機(jī)“被選擇”和“被激活”的2個(gè)中間層變量。上層程序共調(diào)用4次該子程序,就得到了4臺(tái)電機(jī)中哪一臺(tái)或哪幾臺(tái)電機(jī)被使用的信息。
被選擇的意義是,選擇了該電機(jī)驅(qū)動(dòng)絞車,但不一定使用絞車;被激活的意義是選擇了該電機(jī)驅(qū)動(dòng)絞車,并且使用絞車。每一臺(tái)電機(jī)的“被選擇”和“被激活”是垂直關(guān)系,而每一臺(tái)電機(jī)都有“被選擇”和“被激活”的中間層次,不同電機(jī)的“被選擇”層次是橫向關(guān)系,同樣不同電機(jī)的“被激活”層次也是橫向關(guān)系。
有了這2層,程序其它部分會(huì)大量引用這2個(gè)層次的8個(gè)中間結(jié)果。
(2)“主電機(jī)選擇”子程序。子程序必須判斷在若干被選擇的電機(jī)中哪一臺(tái)電機(jī)作為其中的主電機(jī)。判斷主電機(jī)的目的是為了在后續(xù)程序中做主-從控制,保證多臺(tái)電機(jī)輸出的轉(zhuǎn)矩相同。
(3)“選擇主電機(jī)信息作為絞車整體的狀態(tài)反饋”子程序,F(xiàn)C1020 (Arear_Switch)。
起初,F(xiàn)C1020是為2007年出口匈牙利鉆機(jī)機(jī)開發(fā)的,用于2臺(tái)電機(jī)的選擇。但當(dāng)時(shí)考慮到日后可能會(huì)用于4臺(tái)電機(jī),所以在封裝FC1020時(shí)就多預(yù)留出2臺(tái)。隨著鉆機(jī)設(shè)備的升級(jí),目前就出現(xiàn)了4臺(tái)絞車的情況,很自然,就用到了4年前開發(fā)的FC1020。不用做任何修改,直接引用,減少了編程時(shí)間和調(diào)試時(shí)間,顯示了程序可拓展性的重要性。
本例中,要實(shí)現(xiàn)控制4臺(tái)變頻電機(jī)的任務(wù),需要6次調(diào)用3個(gè)子程序。在各個(gè)子任務(wù)之間有橫向聯(lián)系也有縱向聯(lián)系,編程每個(gè)子程序都不難,甚至從庫(kù)中直接調(diào)用,不用編程。將這些子程序聯(lián)系起來的是從子程序中得到的中間變量。有了這些中間變量,再調(diào)用變頻器的接口程序,就可以很好的控制絞車的4臺(tái)電機(jī)。
這兩個(gè)實(shí)例,展示了好的程序?qū)哟螛O其重要,它往往可以簡(jiǎn)化編程工作。
在自動(dòng)化設(shè)備投入運(yùn)行后,可能會(huì)出現(xiàn)各種故障。完備的故障診斷是最終用戶所需要的。故障診斷一般分為系統(tǒng)故障(電氣、PLC信息和故障)和過程故障(如超溫報(bào)警)。系統(tǒng)故障需要電氣自動(dòng)化人員處理,過程故障需要設(shè)備操作人員處理。
如果將2個(gè)數(shù)字量和一個(gè)模擬量作為一個(gè)基本對(duì)象(Basic Object),簡(jiǎn)單外部設(shè)備看作一個(gè)BO,如泵類負(fù)載變頻器、電機(jī)起動(dòng)器、復(fù)雜外部設(shè)備看作2~3個(gè)BO,如帶位置反饋的電動(dòng)閥門、帶有轉(zhuǎn)矩控制的變頻器等。
通常程序提供的診斷數(shù)量不應(yīng)小于該項(xiàng)目BO數(shù)量的1.5~2倍,這樣的診斷數(shù)量可以稱為比較完備的診斷。
巧用變址尋址可以簡(jiǎn)化程序處理。筆者曾用一臺(tái)PLC處理276臺(tái)智能電機(jī)起動(dòng)器。
子程序“SimocodeCOM”,F(xiàn)C769,建立從智能電機(jī)啟動(dòng)器到電機(jī)啟動(dòng)器數(shù)據(jù)庫(kù)(“SimocodeCOM_DB”,DB769)的連接。
子程序“MCC_1”,F(xiàn)C761,“MCC_2”,F(xiàn)C762,建立從軟件其他部分和人機(jī)界面到電機(jī)啟動(dòng)器數(shù)據(jù)庫(kù)的連接。如圖2所示。
圖2 處理電機(jī)啟動(dòng)器程序-數(shù)據(jù)結(jié)構(gòu)圖
在FC769中多次調(diào)用了標(biāo)準(zhǔn)子程序處理智能電機(jī)啟動(dòng)器FC1024“STD_SimocodeCOM”。這個(gè)子程序是處理算法相同的智能起動(dòng)器。FC1024內(nèi)部主要結(jié)構(gòu)是一個(gè)循環(huán)體。循環(huán)次數(shù)在輸入?yún)?shù)Max_Index中定義。在循環(huán)體內(nèi)使用了變址尋址的方式處理數(shù)據(jù)。圖3是一次批處理19個(gè)智能起動(dòng)器的例子。
圖3 一次批處理19個(gè)智能起動(dòng)器
只要在FC769中調(diào)用若干次FC1024,就可以處理整個(gè)系統(tǒng)所管理的上百個(gè)電機(jī)啟動(dòng)器。
在本例,若不采用變址尋址的方式編程,而采用逐一對(duì)上百個(gè)電機(jī)起動(dòng)器編程的方式,那程序量將會(huì)成倍增長(zhǎng),程序處理時(shí)間也會(huì)增加很多,適當(dāng)使用變址尋址可簡(jiǎn)化程序處理。
2.8 HMI
這里講的HMI(Human Machine Interface)是廣義HMI,不僅包括屏幕,也包括按鈕、指示燈和顯示儀表。
設(shè)計(jì)和編程HMI系統(tǒng)要注意以下3個(gè)原則。
2.8.1 原則1:系統(tǒng)處于的狀態(tài)需要表達(dá)清楚
程序工程師必須使操作人員或者維護(hù)人員通過HMI界面明白系統(tǒng)處于何種狀態(tài)。
2.8.2 原則2:聚焦操作人員的想法
程序工程師必須使操作人員或者維護(hù)人員不偏離系統(tǒng)預(yù)設(shè)的操作或步驟。
2.8.3 原則3:操作簡(jiǎn)單直觀
程序工程師必須使操作人員或者維護(hù)人員對(duì)工藝過程易于操作。甬溫線前車司機(jī)多次嘗試更改列車模式失敗,就是一個(gè)反例。大概是由于更改操作模式的方法并不簡(jiǎn)單、并不直觀,也沒有必要的操作提示。
程序就是算法對(duì)數(shù)據(jù)的操作。工業(yè)控制軟件也是如此,常用的控制程序語(yǔ)言包括梯形圖、語(yǔ)句表、SCL語(yǔ)言(類PASCAL)、CFC、SFC。
可以證明,所有邏輯運(yùn)算都可以用“與”“或”“非”邏輯等效替換。就是說以上所有語(yǔ)言都可以實(shí)現(xiàn)邏輯控制,那為什么還有這么多種語(yǔ)言呢。原因就在于方便程序調(diào)試,方便程序拓展。
如順序控制SFC。完全是邏輯運(yùn)算,但為了使順序控制更貼近人類的思維,為了方便程序調(diào)試、拓展和維護(hù),很多工業(yè)軟件都特別包括順序控制,筆者曾用簡(jiǎn)單邏輯運(yùn)算搭建過一個(gè)稱重和配料的順序控制系統(tǒng)。結(jié)果表明,完全可以實(shí)現(xiàn)。但程序難以理解,不便調(diào)試,不便拓展和維護(hù),更不便其他人員維護(hù)。
每一種語(yǔ)言都有各自的特點(diǎn),這也是每種語(yǔ)言自身存在的價(jià)值。
邏輯運(yùn)算為主的以梯形圖為好,直觀,調(diào)試方便。
簡(jiǎn)單運(yùn)算和變址尋址往往采用語(yǔ)句表。
高級(jí)語(yǔ)言。不關(guān)注執(zhí)行的具體細(xì)節(jié),而直接關(guān)注運(yùn)算或者方法。復(fù)雜算法的程序用這種語(yǔ)言為好。同時(shí),SCL具有數(shù)組類型可以實(shí)現(xiàn)簡(jiǎn)單變址尋址功能。
在老8號(hào)動(dòng)態(tài)測(cè)試臺(tái)的例子中,PLC將1800秒內(nèi)產(chǎn)生的3組轉(zhuǎn)矩和轉(zhuǎn)速信號(hào)共10800個(gè)數(shù)據(jù)按照有關(guān)標(biāo)準(zhǔn)算法進(jìn)行計(jì)算,得到本次測(cè)試是否符合要求的判據(jù),這就用到了大量的運(yùn)算功能,采用的就是SCL語(yǔ)言。
圖4 CFC連續(xù)控制圖
直接面向信號(hào)流程或者過程流程控制的,采用CFC控制。所有DCS系統(tǒng),都支持CFC編程。鋼鐵行業(yè)中帶鋼控制,船舶電力推進(jìn)的程序處理,電機(jī)驅(qū)動(dòng)控制中雙閉環(huán)調(diào)節(jié)等都可采用CFC語(yǔ)言處理。
圖5 SFC順序控制圖
帶有鮮明的順序執(zhí)行的特征。SFC控制一個(gè)過程按程序一步一步執(zhí)行,并可以通過條件向其它步驟跳轉(zhuǎn)。比如,稱重配料過程、帶鋼控制中的自動(dòng)上卷、CDQ工業(yè)吊車自動(dòng)執(zhí)行程序等。SFC編程關(guān)注3個(gè)因素。第一,步驟。就是被控對(duì)象所處的狀態(tài);第二,動(dòng)作。在一個(gè)步驟下可以執(zhí)行一個(gè)或多個(gè)動(dòng)作;第三,跳轉(zhuǎn)條件,在各個(gè)步驟之間轉(zhuǎn)換的條件。
工業(yè)控制軟件不僅觸及工業(yè)生產(chǎn)領(lǐng)域,也觸及人們生活的各個(gè)領(lǐng)域,和人們生活密切相關(guān),比如機(jī)場(chǎng)行李傳送系統(tǒng),集中采暖鍋爐控制系統(tǒng)等。工業(yè)軟件在各個(gè)領(lǐng)域大量應(yīng)用的過程中,程序工程師們也編制了大量的控制程序。隨著這些程序的積累,工程師們總結(jié)歸納了工業(yè)軟件編制的一些特點(diǎn)。這些特點(diǎn)也決定著工業(yè)軟件越來越向著高級(jí)化的方向發(fā)展。工業(yè)軟件編程的趨勢(shì)是編寫很多子程序、子過程,將它們管理在庫(kù)中。需要控制哪些過程,就調(diào)用相應(yīng)的子程序完成對(duì)該過程的控制,這與目前的編程方式不同。目前編程人員必須同樣關(guān)注程序底層的內(nèi)容和底層的過程,而工業(yè)控制軟件發(fā)展趨勢(shì)是試圖使編程人員從繁冗的底層編程中解放出來。