0822 【萬(wàn)泉河】解讀一個(gè)用循環(huán)法PK萬(wàn)泉河80模擬量例子的例子程序
大約兩個(gè)月前,寫(xiě)過(guò)一篇文章:
《0628 【萬(wàn)泉河】?jì)?yōu)雅的PLC程序一定是用EXCEL寫(xiě)出來(lái)的》,其中介紹了我用EXCEL做出80個(gè)模擬量轉換程序。
眾多網(wǎng)友看到后,大呼有收獲。
然而也有另外一批同行, 見(jiàn)到我的程序之后,直呼笑掉大牙。 嘲笑我竟然連循環(huán)語(yǔ)法都不會(huì )。 所以,經(jīng)常在一些微信群中,遇到一些熱心網(wǎng)友要教給我循環(huán)語(yǔ)法。
然后我就說(shuō),不要只看循環(huán)的那三五句語(yǔ)法,不要做口炮黨,動(dòng)下手,你們按同樣的變量表,把同樣功能的程序做一遍出來(lái)。然后大家比較一下。
然后來(lái)了。
下面從原理開(kāi)始講解一下。
我原始的優(yōu)雅程序,在PLC程序中,就是如圖這樣的簡(jiǎn)單羅列調用。
循環(huán)派說(shuō),你看看, 后面的數據結果VD1000, VD1004,VD1008是有地址規律的數據,可以用指針,間接尋址或者數組的方式給序列化。 具體方法取決于所使用的PLC平臺支持情況。 比如SMART 200,就可以用指針。
先把VD1000指針化,送到LD22中, 循環(huán)中調用一次數值送到LD22指向的地址, 執行完成之后指針增加4, 即指向了VD1004,下一周期即處理了第二個(gè)模擬量數據。
如此循環(huán)80次, 即只使用區區5-6行語(yǔ)句就實(shí)現了所有模擬量的處理。 而如果數量有改變,比如改為800個(gè),那也只是把上面的循環(huán)數由80改為800即可。
即
然而,事情其實(shí)并非如此簡(jiǎn)單。 不僅輸出側變量需要序列化, 輸入側的變量也同樣需要。 首先,量程上下限對每一個(gè)測點(diǎn)來(lái)說(shuō)都不一樣,那么就無(wú)法使用固定值, 也需要做成變量組,而輸入的模擬量通道地址,也不會(huì )是完美連續的。 比如有時(shí)候數據來(lái)自通訊。 比如我做例子的時(shí)候有一部分數據直接來(lái)自VW。
那么需要對這些數據做IO映射處理。 即,模擬量通道部分,分配了VW2000開(kāi)始的數據區,量程上下限則分別分配了VD3000,VD4000的數據區,分別傳送到指針LD10, LD14, LD18中。
所以, 真實(shí)可用的程序是:
程序行數增加了一點(diǎn)點(diǎn),忽略不計。
然而IO映射就沒(méi)有那么容易了。 因為地址并不能保證規則連續, 所以必須逐行用MOVE指令來(lái)傳送。 這樣子:
MOVW AI_V064:AIW100, VW2090
MOVW AI_V065:AIW102, VW2092
MOVW AI_V066:AIW104, VW2094
MOVW AI_V067:AIW106, VW2096
MOVW AI_V068:AIW108, VW2098
MOVW AI_V069:AIW110, VW300
MOVW AI_V070:VW2, VW302
MOVW AI_V071:VW4, VW304
MOVW AI_V072:VW6, VW306
總計有80行程序, 一行都少不了。 我這里只是截取了中間的部分,看到數據地址是不規則的。
而量程上下限,常數值可以用MOVD方法同樣實(shí)現,也可以直接定義到數據塊中,數據塊增加2個(gè)表量程L和量程H,錄入數據分別為:
每個(gè)表分別是80行,80*3=240。
然而這樣的程序是不完整的。 使用掉的V區數據都需要做到符號表中, 給分配符號名稱(chēng)。 就像我原本給QOUT分配到V1000一樣。
那么數據工作量為80*3=240行。
這些數據,以及MOVE指令做IO映射的程序,都需要從EXCEL整理好之后復制過(guò)來(lái)。 所以可以認為其實(shí)數據塊和符號表與程序基本相同的工作量,都是程序的一部分。
所以程序的總量480行比我不用循環(huán)的做法其實(shí)反而增加了400行。
然而,我做程序時(shí)候, EXCEL表格是一次性完成的, 這里需要把工藝變量表拆分到6個(gè)表中,整理好了之后分別復制6次。這里模擬量處理的輸出部分恰巧是內部數據,所以可以是完整的序列。 而其它類(lèi)的設備, 輸出部分也需要做IO映射,也仍然需要工作量。
是的。這個(gè)PK程序其實(shí)也仍然是我自己親自做的。 我雖然早就知道這里面的全部的工作量,我寫(xiě)上一篇文章原本就是針對的某些文章和視頻做的所謂循環(huán)處理技巧,我自己工作中斷然不會(huì )使用,但為了把例子貢獻出來(lái), 還是忍著(zhù)惡心給完整做了一下。
這個(gè)循環(huán)法實(shí)現的程序,為了爽那一下下的幾句指令,同時(shí)還消耗了V2000-V4000的3000byte的數據區。 而且,程序也仍然沒(méi)有做到徹底標準化。 比如,1000個(gè)byte,只能存放250個(gè)浮點(diǎn)數數據,即,如果真的要處理800個(gè)模擬量, 可不是僅僅把80改為800,而是所有數據區規劃都需要更改。因為原本的規劃區不夠用了, 循環(huán)跑不成去了。
而倒過(guò)來(lái), 如果只是8個(gè)模擬量的程序, 現在的這套浪費了3000個(gè)數據區的程序, 也是搞笑的。 浪費量驚人, 也需要優(yōu)化修改。
所以其實(shí)就是, 你沒(méi)針對一個(gè)新項目,都需要根據實(shí)際的模擬量數量, 重新做數據區優(yōu)化規劃。
那些嘲笑我,要教我循環(huán)語(yǔ)法的驕傲的年輕人, 只執著(zhù)于跟我演示那三五句語(yǔ)法,我都懶得看,他們卻非常自豪的要反復演示,以為那已經(jīng)是自動(dòng)化工作頂尖絕技。我反復提醒他們動(dòng)動(dòng)手把程序做完整的時(shí)候, 理都不理。 還只在那里教育我勿要做井底之蛙, 不曉得天外有天。
指望著(zhù)那些又輕浮又懶惰的年輕人,我永遠也得不到跟我PK的樣本。
我這里辛辛苦苦把對標PK的例子程序做出來(lái),提供給那些懶得動(dòng)手的循環(huán)派年輕人,如果我了解有偏差之處,還可以在我基礎上再修改完善,哪些工作是因為我愚蠢做多了, 可以做減法刪除掉, 這樣對他們來(lái)說(shuō),就不會(huì )畏懼親自動(dòng)手了。
每一個(gè)年輕人,未來(lái)要有成長(cháng),在勤奮與聰明之間,必須擁有一樣。 而且很多時(shí)候勤奮比聰明還更重要一點(diǎn)。 尤其是你怎么點(diǎn)化都不能領(lǐng)悟的自以為是的小聰明。
我這里把PK80程序同樣放到80工位雙聯(lián)開(kāi)關(guān)QQ群文件中,群1已經(jīng)滿(mǎn)員, 群2還有空位,可以申請加入870566908后獲取。
0822 【萬(wàn)泉河】解讀一個(gè)用循環(huán)法PK萬(wàn)泉河80模擬量例子的例子程序.pdf (138 K) 下载次数:196