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