1015 【萬(wàn)泉河】PLC程序中也可以有中間件
我們認(rèn)為,自動(dòng)化行業(yè)是無(wú)限接近IT行業(yè)的,然而又是個(gè)相對(duì)獨(dú)立和小眾的小行業(yè)。
所以, IT行業(yè)中的大部分理念和思想,大都可以對(duì)標(biāo)到自動(dòng)化行業(yè)中, 找到相應(yīng)的影子。
所以,當(dāng)我們對(duì)前方的路看不清的時(shí)候,不妨抬起頭來(lái)觀摩參考下隔壁,他們都在做什么, 怎么做的, 做的東西使用的方法是不是我們可以拿來(lái)借鑒,有多少程度可以借鑒。 遠(yuǎn)比我們自己拍腦瓜閉門造車要容易的多。
我已經(jīng)寫過(guò)很多相關(guān)的文章了,介紹IT行業(yè)的理念, 以及我自己的思考與實(shí)踐,把這些理念方法應(yīng)用到PLC行業(yè)。
比如,面向?qū)ο蟮某绦蚍椒,code review, 軟件架構(gòu)師,高內(nèi)聚低耦合,編程規(guī)范,程序移植等等。
當(dāng)然PLC行業(yè)還是存在一定的特殊性,也相對(duì)封閉, 有自己的行業(yè)特點(diǎn),所以隔壁好多思想方法并沒(méi)那么容易直接拿過(guò)來(lái)套用。 也所以,我好多相關(guān)文章寫出來(lái), 很多人讀不懂, 不理解。
比如,前面一篇程序移植的文章發(fā)表后,后面的跟帖中有一位抬杠專業(yè)戶的質(zhì)問(wèn),按照煙臺(tái)方法做的程序,程序從一個(gè)PLC平臺(tái)移植到另一個(gè)廠家的平臺(tái),移植前后, 代碼相同部分有多少?而不同之處有多少?
如果順著這位杠子手的邏輯回答, 那顯然只能按他預(yù)設(shè)的答案回答了。 不管用不用煙臺(tái)方法,結(jié)果都是一樣的,相同部分幾乎沒(méi)有,而幾乎全部都是不相同的。
比如我做的西門子之外的各個(gè)品牌的標(biāo)準(zhǔn)化程序,不管是CODESYS倍福,還是三菱歐姆龍,尚不提最新的信捷等小PLC,就單看三菱的程序, 把BST的庫(kù)函數(shù)移植到三菱GX2平臺(tái),SCL程序代碼復(fù)制到三菱ST語(yǔ)言之后,每行都要包含2-3個(gè)錯(cuò)誤,一個(gè)MOTOR塊,如果一字不改的話, 錯(cuò)誤要超過(guò)1000個(gè)。 而把錯(cuò)誤逐個(gè)修改之后,你要問(wèn)相同部分有多少?嚴(yán)格來(lái)說(shuō),沒(méi)有一句相同的!
所以,按照這位提問(wèn)者的邏輯,他顯然是贏了。贏了他自己。
而顯然,這位是不曉得軟件編程中有個(gè)中間件的概念的。
對(duì)于中間件,其實(shí)都不需要什么名詞解釋,因?yàn)楹苋菀桌斫猓~本身就是詞義。 當(dāng)然也可以從網(wǎng)絡(luò)搜索到標(biāo)準(zhǔn)的名詞解釋。
中間件是一類連接軟件組件和應(yīng)用的計(jì)算機(jī)軟件,它包括一組服務(wù)。以便于運(yùn)行在一臺(tái)或多臺(tái)機(jī)器上的多個(gè)軟件通過(guò)網(wǎng)絡(luò)進(jìn)行交互。該技術(shù)所提供的互操作性,推動(dòng)了一致分布式體系架構(gòu)的演進(jìn),該架構(gòu)通常用于支持并簡(jiǎn)化那些復(fù)雜的分布式應(yīng)用程序,它包括web服務(wù)器、事務(wù)監(jiān)控器和消息隊(duì)列軟件。 [2]
中間件(middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用軟件的范疇。顧名思義,中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間。 [2]
中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)之上,應(yīng)用軟件的下層,總的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開(kāi)發(fā)的環(huán)境,幫助用戶靈活、高效地開(kāi)發(fā)和集成復(fù)雜的應(yīng)用軟件。在眾多關(guān)于中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。 [2]
然而,這個(gè)概念又與我提到的其它詞匯一樣, 不能直接對(duì)標(biāo)找到PLC行業(yè)的解釋。 甚至,之前也無(wú)人正式針對(duì)性的介紹過(guò)。 或許,未來(lái),網(wǎng)絡(luò)搜索關(guān)鍵詞“PLC” + “中間件”,應(yīng)該主要會(huì)搜到萬(wàn)某的本文。
所以,在PLC行業(yè),怎樣才叫中間件,需要單獨(dú)去思考和定義。
打個(gè)比方,比如控制一個(gè)工件的移動(dòng), 會(huì)使用伺服或者步進(jìn)電機(jī),通過(guò)驅(qū)動(dòng)它們,位置模式,或者速度模式,或者速度+位置的模式,達(dá)到工藝需要的結(jié)果。
拋開(kāi)步進(jìn)電機(jī)或者其它的代用方案不談, 只談伺服電機(jī)本身,就可能有多種控制方案,控制器可以有多個(gè)品牌,通訊方式也可以有多種,脈沖方式或者DP, PN, ETHERCAT等多種工業(yè)總線。 甚至具體的控制方式也可以多種,工藝對(duì)象和EPOS等。
然而, 你可以把所有的方式都各自封裝為單獨(dú)的中間件,而放給工藝邏輯的只有接口指令,比如在工藝邏輯中, 只包含對(duì)伺服的位置指令或者速度指令。
那么,未來(lái)的工藝實(shí)現(xiàn),就可以與具體的伺服選型方案無(wú)關(guān)了。 比如工藝要求步驟1, 定位移動(dòng)到相應(yīng)位置,2,以設(shè)定速度運(yùn)行,等待結(jié)束條件;3, 給定目標(biāo)位置,達(dá)到位置。
按照工藝要求完成調(diào)試后, 哪怕未來(lái)更換了伺服電機(jī)品牌, 甚至不再使用伺服電機(jī), 比如油缸。而上述的工藝邏輯代碼不需要修改,可以繼續(xù)使用。
甚至,即便PLC的型號(hào)品牌更換了, 也只是根據(jù)其語(yǔ)法規(guī)范做一些替換移植, 而不需要被具體的內(nèi)部控制方法困擾。
這就是中間件的意義。
一定有人一眼就看懂了,講了半天, 這不就是FB嗎!FB就是中間件的話, 那我早就會(huì)了啊!
沒(méi)錯(cuò), 中間件當(dāng)然要通過(guò)FB功能塊來(lái)實(shí)現(xiàn),但你做的FB是否能達(dá)到中間件的功能, 你的工藝邏輯中是否夾雜了所使用的伺服方案特有的指令和方法模式,在面向移植需求的時(shí)候,能否簡(jiǎn)單實(shí)現(xiàn)移植?
或者, 去回答一下樓上那位杠子手的問(wèn)題, 代碼移植前后的相似度有多少?
我在做信捷等小PLC的標(biāo)準(zhǔn)化開(kāi)發(fā)的時(shí)候, 最頭疼的便是其伺服實(shí)現(xiàn)。 伺服通過(guò)脈沖控制,而每個(gè)脈沖輸出靠系統(tǒng)變量來(lái)控制,使用的系統(tǒng)變量各不相同。 想做成一個(gè)統(tǒng)一的FB塊,都非常困難, 更何提中間件了。
當(dāng)然, 在某位學(xué)員的幫助下,繞了很多圈子,最后還是實(shí)現(xiàn)了。 但實(shí)現(xiàn)過(guò)程不夠簡(jiǎn)潔。
而我所見(jiàn)過(guò)的所有品牌的項(xiàng)目程序,相關(guān)部分應(yīng)用都深度耦合成一鍋粥,離本文所預(yù)期的中間件目標(biāo)都還相差很遠(yuǎn)。
不過(guò),最后還是提一下,如果未來(lái)這個(gè)行業(yè)足夠成熟,標(biāo)準(zhǔn)化架構(gòu)方法普及之后, 中間件倒是可以成為一個(gè)不錯(cuò)的中間產(chǎn)品,甚至可以形成一定規(guī)模的交易市場(chǎng)。任何做項(xiàng)目的一方, 需要什么中間件的時(shí)候,市場(chǎng)上巡視一番, 找到合適的買回家,簡(jiǎn)單使用拼接,自己的工藝項(xiàng)目就完成了。
以這樣方式描述未來(lái)愿景,比以往高內(nèi)聚低耦合的語(yǔ)言,是不是更親和,更容易理解了?
當(dāng)然啦, 不要誤解歪了, 煙臺(tái)方法不賣任何中間件, 也不倒賣中間件, 我只傳授制作中間件和使用中間件的方法。 煙臺(tái)方法的學(xué)員們之間,可以互相交流交換中間件,因?yàn)榉椒ㄊ峭ㄓ玫,他們之間交流沒(méi)有障礙。
而非煙臺(tái)方法的學(xué)員,目前看來(lái)就很難了。