0906 【萬(wàn)泉河】一個(gè)問(wèn)題:匯編語(yǔ)言支持面向對象編程嗎?
這是一個(gè)很有意思的問(wèn)題。
起因是我是首個(gè)把面向對象方法完全應用到工控行業(yè)的PLC工程師。 全世界范圍內。
先別不服。
許多人看過(guò)我的視頻講座,講座中通篇講解了面向對象的方法在PLC程序設計中的應用。以及所著(zhù)的新書(shū)《PLC標準化編程原理與方法》,其實(shí)通篇都在講面向對象這件事。
有一些人,簡(jiǎn)單看了一眼視頻后就先來(lái)杠了, 面向對象嘛,不是什么新玩意。在IT領(lǐng)域早就流行幾十年了。 國內也早有自動(dòng)化公司在做了。
看到?jīng)], 凡是跳出來(lái)不屑一顧的, 舉例子的時(shí)候都會(huì )是舉一個(gè)道聽(tīng)途說(shuō)的別人家的公司。 就沒(méi)見(jiàn)過(guò)誰(shuí)勇敢地站出來(lái)說(shuō)我我我!我做到了。
而我們從各大社區所能獲得的各行各業(yè)的PLC項目例子程序中, 也從來(lái)沒(méi)有見(jiàn)到過(guò)真正如煙臺方法般實(shí)現了徹底的面向對象設計的案例。
人類(lèi)科學(xué)技術(shù)發(fā)展到今天, 完全原創(chuàng )的創(chuàng )新已經(jīng)很難有了。 現在能把不同行業(yè)之間的應用加以融合,賣(mài)出第一步,就算很不容易的創(chuàng )新了。
我工作20多年,前面很多年都只能碌碌無(wú)為做寫(xiě)重復性的工作, 掙點(diǎn)辛苦錢(qián),養家糊口。 也就近4-5年,才有機會(huì )做出一點(diǎn)真正屬于自己的創(chuàng )新型工作,一方面自認為運氣好, 一方面也有厚積薄發(fā)的因素在里面。
所以, 我是當仁不讓要把這個(gè)首創(chuàng )權霸占在自己名下了。有要跟我爭這個(gè)名譽(yù)的,歡迎來(lái)爭。 但要求是本人實(shí)名,拿自己作品來(lái)爭。 而不要什么所謂路見(jiàn)不平者毫無(wú)證據空口為別人爭。
當然還會(huì )有另外一些人不認可面向對象方法有多奇妙, 或者認為技術(shù)上在PLC領(lǐng)域操作系統編程語(yǔ)言環(huán)境根本不可能支持, 所以質(zhì)疑我是否真的做到了,可以通過(guò)本文的邏輯分析見(jiàn)分曉。
首先一個(gè)基本的原理。
所有編程語(yǔ)言,最終都要經(jīng)過(guò)其編譯器或者解析器,編譯成為匯編語(yǔ)言,然后再成為二進(jìn)制的機器代碼,交給CPU運行。通常認為匯編語(yǔ)言,對應的就是機器語(yǔ)言。
百度百科的解釋?zhuān)?br />匯編語(yǔ)言, 即第二代計算機語(yǔ)言,用一些容易理解和記憶的縮寫(xiě)單詞來(lái)代替一些特定的指令,例如:用"ADD"代表加法操作指令,"SUB"代表減法操作指令,以及"INC"代表增加1,"DEC"代表減去1,"MOV"代表變量傳遞等等,通過(guò)這種方法,人們很容易去閱讀已經(jīng)完成的程序或者理解程序正在執行的功能,對現有程序的bug修復以及運營(yíng)維護都變得更加簡(jiǎn)單方便。
所以, 假設一門(mén)完全支持面向對象的高級編程語(yǔ)言寫(xiě)成的程序,最終編譯后得到的仍然是匯編語(yǔ)言。
所以,假設你手里沒(méi)有原始的高級語(yǔ)言的編譯器和源代碼, 而只有其生成的匯編語(yǔ)言代碼,那么你把這個(gè)代碼全部抄寫(xiě)一遍,也自然寫(xiě)的是面向對象的程序。
即,結果是完全一樣的。 無(wú)非過(guò)程中,對你的能力要求不一樣, 你需要記憶更多的指令,以及更多的程序架構安排部署。
我們來(lái)看IEC 61131標準中規定的PLC程序語(yǔ)言IL指令表,在西門(mén)子中稱(chēng)為STL, 其語(yǔ)句語(yǔ)法基本就是如上述匯編語(yǔ)言用到的ADD /SUB/ INC/DEC/MOV等等。那么我們大致可以認為STL就是約等于匯編語(yǔ)言。
那么,如果我們認為用匯編語(yǔ)言可以做出面向對象的PLC程序, 自然STL也可以,那么LAD可以轉化為STL,所有STL指令在LAD中也都有對應的指令,那么LAD梯形圖自然也完全可以做出完整的面向對象的程序。
我們通常描述面向對象的三大特性,封裝繼承和多態(tài),討論PLC平臺是否已經(jīng)提供并支持這些功能的時(shí)候, 其實(shí)應當認識到的是,平臺如果提供了這些功能,那么只不過(guò)是便于我們便捷使用。 而如果平臺沒(méi)有提供, 那么需要程序員自己的能力來(lái)實(shí)現。
所以,當我們評價(jià)某個(gè)PLC系統因為不支持所以不能做出面向對象的高內聚低耦合的系統設計的時(shí)候, 其實(shí)是我們推卸責任了。 把不能做到的責任推給了平臺。 而其實(shí)那是我們自己能力不足導致。
這一點(diǎn),我在研究信捷PLC的標準化架構的時(shí)候,領(lǐng)悟到的。 并在文章《0725 【萬(wàn)泉河】所有小型PLC也都能做標準化程序了》中有所表達。
本文則是重新從頭做了邏輯的梳理。
這也是我近期開(kāi)始對所有小型PLC平臺感興趣的原因。 在我眼里,所有PLC本質(zhì)都是一樣的,即便我從來(lái)沒(méi)有摸過(guò),甚至名字都沒(méi)有聽(tīng)說(shuō)過(guò), 要有人問(wèn)我敢不敢接開(kāi)發(fā)任務(wù), 在其平臺上實(shí)現程序標準化架構,我現在可以毫不遲疑地回答:可以!
這是我近來(lái)認知上的最大的進(jìn)步。 我前幾年一些文章中,以及書(shū)中所表達的觀(guān)點(diǎn),抱怨一些PLC平臺性能差而導致不能做標準化,是錯誤的。
而以往更多的同行,發(fā)表的更多的文章中,對所有PLC平臺全部判死刑,認為缺少了這個(gè)或者那個(gè)功能而不可能實(shí)現的,那些作者們現在可以回頭思考一下這個(gè)邏輯了。