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