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