陳佳煒, 吳思振, 李潤增, 黃瑞環(huán)
(1.上海煙草集團(tuán)有限責(zé)任公司,上海200082;2.北京達(dá)特集成技術(shù)有限責(zé)任公司,北京100176)
無論是面向PLC的編程語言還是面向PC機(jī)或服務(wù)器的編程語言,都是對(duì)如何控制設(shè)備進(jìn)行動(dòng)作的一種描述,這種描述方式就是程序,描述的工具就是編程語言。編程語言經(jīng)過相應(yīng)編譯器進(jìn)行編譯,形成機(jī)器能夠識(shí)別的指令集,載入(下載)到機(jī)器的存儲(chǔ)器內(nèi),機(jī)器通過從存儲(chǔ)器中讀取一條條指令進(jìn)行動(dòng)作。不同的編程語言對(duì)應(yīng)不同的編譯器,編譯器相當(dāng)于人們?nèi)粘Kf的翻譯。
日常所使用的PLC,不同的生產(chǎn)商所提供的編程語言也不盡相同。盡管有國際標(biāo)準(zhǔn)化組織對(duì)一些PLC編程語言進(jìn)行了標(biāo)準(zhǔn)化,但各供應(yīng)商對(duì)某一標(biāo)準(zhǔn)化語言的支持也略有不同。這就造成系統(tǒng)集成商在控制對(duì)象相同的情況下,選擇不同的PLC也會(huì)導(dǎo)致程序需要重寫的情況。是否存在一個(gè)統(tǒng)一的語言,適用于不同的PLC編譯器?SCL可能會(huì)是一個(gè)方案。
1.2.1 PLC的編程語言是平等的
語言沒有高低貴賤之分,只是面向的機(jī)器不同,面向的開發(fā)者不同。平時(shí)所說的高級(jí)語言不是指高人一等的“高級(jí)”,只是面向更復(fù)雜的設(shè)備,程序中用到的指令更加集成化而已。越是高級(jí)的語言,其編譯后占的空間越大,執(zhí)行效率越低。
本文未列出所有的PLC編程語言,下文只以使用最廣泛的三種語言為例進(jìn)行比較說明。
1.2.2 梯形圖(LAD)
這種編程語言是從電氣工程的角度對(duì)程序進(jìn)行的一種描述。程序看起來就是一張電路圖,非常適合電氣工程師。優(yōu)點(diǎn)是程序易讀,在線糾錯(cuò)時(shí)很直觀。但也存在缺陷,不易操作數(shù)據(jù)處理等復(fù)雜編程,而且,編程時(shí)編輯器空間利用率低,不易標(biāo)注靈活的注釋。當(dāng)程序語句不便用LAD表達(dá)時(shí),通常使用插入語句表(STL)來實(shí)現(xiàn)指令,以混合編程的方式實(shí)現(xiàn)。
1.2.3 語句表(STL)
這種語言屬于匯編語言,通過一些助記符來表示處理器能執(zhí)行的動(dòng)作,屬于面向處理器的語言。優(yōu)勢(shì)是這種程序能實(shí)現(xiàn)各種應(yīng)用要求,經(jīng)編譯后,程序占用的存儲(chǔ)器空間小,執(zhí)行效率高。但語言不易學(xué)習(xí),編出的程序不易讀懂,編程效率不高。
1.2.4 結(jié)構(gòu)化控制語言(SCL)
英文全名為“Structed Control Language”,語句結(jié)構(gòu)上接近Basic、Pascal、C等高級(jí)語言,而語法上接近Pascal語言。這種語言接近高級(jí)語言,也更接近自然語言,易于閱讀;屬于行編輯式語言,編輯器空間利用率高,編程效率高。但也同樣存在執(zhí)行效率低的問題,隨著硬件性能的不斷提升,這個(gè)缺點(diǎn)會(huì)持續(xù)地改善。在使用中,比語句表和梯形圖更容易獲得程序員的青睞。
SCL語言編寫的程序更具易讀性是因?yàn)镾CL語言接近高級(jí)語言。SCL語言中的關(guān)鍵字或指令的書寫形式都是如“IF”“THEN”等這種自然語言的單詞。
SCL語言廢除了STL語言中的“GOTO”指令?!癎OTO”指令不具有邏輯性,使讀程序的人難于理解。 SCL通過“IF”“THEN”“WHILE”“CASE”等指令完全實(shí)現(xiàn)了“GOTO”指令的功能,而且程序讀起來更加容易理解。
高級(jí)語言的特點(diǎn)就是編程效率高,SCL語言接近高級(jí)語言,也是因?yàn)?SCL語言的編程效率和Pascal、Basic等語言非常接近。
SCL語言的“REGION”指令是用于將程序分段的,有了這個(gè)指令,程序員可以將程序放到不同的自己命名的“REGION”塊中,不需要時(shí)可將這塊程序“合”起來,只看到“REGION”名字,使程序占用的編輯空間減到最小,更易于編寫出邏輯性強(qiáng)、結(jié)構(gòu)清晰的程序。
另外,SCL語言因?yàn)楦咏呒?jí)語言,所以對(duì)于復(fù)雜數(shù)據(jù)類型(如多維數(shù)組等)的運(yùn)算也更加得心應(yīng)手。
這個(gè)特性應(yīng)該是SCL語言最吸引人的特點(diǎn)。使用SCL語言編寫的功能塊可以導(dǎo)出一個(gè)純文本文件,在一個(gè)項(xiàng)目中,也可以隨時(shí)導(dǎo)入一個(gè)文本文件,并基于這個(gè)導(dǎo)入的文件生成一個(gè)功能塊。而且,生成的功能塊能被STL、LAD等其他語言調(diào)用。
SCL語言的這一特點(diǎn)可以幫助程序員自行開發(fā)一個(gè)通用的庫文件。將重復(fù)使用的功能塊放到這個(gè)庫中,需要時(shí),再把這些功能塊從庫中導(dǎo)出到特定的項(xiàng)目中。這就能通過功能塊的簡(jiǎn)單重復(fù)使用提高程序員的編程效率。
制絲電控集成系統(tǒng)是煙草行業(yè)將煙片制成煙絲工藝過程的自動(dòng)化控制系統(tǒng)。此系統(tǒng)控制的主要設(shè)備包括切片機(jī)、回潮筒、加料機(jī)、預(yù)混柜、儲(chǔ)葉柜、切絲機(jī)、烘絲筒、皮帶(振動(dòng))輸送機(jī)等。其中的核心工藝設(shè)備(如切片機(jī)、切絲機(jī)、烘絲筒等)通常自帶電控系統(tǒng)。制絲電控集成系統(tǒng)要與這些單機(jī)電控系統(tǒng)進(jìn)行通訊,控制這些設(shè)備協(xié)調(diào)運(yùn)轉(zhuǎn),達(dá)到用戶對(duì)工藝數(shù)據(jù)的要求。除了這些單機(jī)設(shè)備外,系統(tǒng)還要集成一些智能儀表,如水分儀、溫度計(jì)、壓差儀等。除了工藝上必須的設(shè)備和裝置外,可能還要和消防、異味處理等系統(tǒng)進(jìn)行集成,以使制絲電控集成系統(tǒng)與其兼容,滿足用戶的要求。
制絲電控集成系統(tǒng)在完成現(xiàn)場(chǎng)調(diào)試后,要交付用戶使用。為保證制絲電控集成系統(tǒng)能夠正常運(yùn)轉(zhuǎn),除配置操作人員外,還要配置電氣人員對(duì)系統(tǒng)進(jìn)行維護(hù)和故障排除。必要時(shí),還要查看PLC程序,幫助判斷故障。這些電氣人員一般是電工出身,熟悉電路和電控器件。在程序方面,LAD程序最適于電氣人員專業(yè)使用。所以,從電氣人員的角度講,PLC程序都用LAD的方式編寫是最合適的。
但對(duì)于系統(tǒng)集成商,開發(fā)語言的通用性、高效性才是首先要考慮的。這就產(chǎn)生了矛盾,PLC程序用什么語言開發(fā)更加合適?
筆者認(rèn)為,目前的方案是,對(duì)于無需電氣工作人員關(guān)注的程序塊(如報(bào)警塊、電機(jī)塊、模擬量轉(zhuǎn)換等功能塊)采用SCL語言開發(fā)(這些功能塊對(duì)系統(tǒng)集成商來說是有重復(fù)使用價(jià)值的),電氣人員只需要關(guān)注設(shè)備的正常運(yùn)轉(zhuǎn)即可。
經(jīng)過實(shí)際檢驗(yàn),電氣工作人員很容易接受這種方案。隨著計(jì)算機(jī)編程越來越普及,很多電氣工程師都接觸過高級(jí)語言的編程,因此,有些電氣工程人員在閱讀SCL編寫的程序時(shí)較容易快速理解,SCL語言會(huì)有很大的普及空間。
但SCL畢竟是一個(gè)“年輕”的語言,還有很大的標(biāo)準(zhǔn)化空間。目前,盡管SCL在各個(gè)PLC平臺(tái)越來越標(biāo)準(zhǔn)化了,但各個(gè)平臺(tái)對(duì)其的支持參差不齊。因此,對(duì)于PLC程序開發(fā)者來說,要想功能塊能有更好的兼容性,就需要盡量使用標(biāo)準(zhǔn)的SCL語句書寫程序。