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