萬泉河
WX:ZHO6371995,歡迎+
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 129 個
工控威望: 245 點
下載積分: 829 分
在線時間: 11(小時)
注冊時間: 2021-06-11
最后登錄: 2024-09-08
查看萬泉河的 主題 / 回貼
樓主  發(fā)表于: 2022-08-23 18:34
0822 【萬泉河】解讀一個用循環(huán)法PK萬泉河80模擬量例子的例子程序

大約兩個月前,寫過一篇文章:
《0628 【萬泉河】優(yōu)雅的PLC程序一定是用EXCEL寫出來的》,其中介紹了我用EXCEL做出80個模擬量轉(zhuǎn)換程序。

眾多網(wǎng)友看到后,大呼有收獲。

然而也有另外一批同行, 見到我的程序之后,直呼笑掉大牙。 嘲笑我竟然連循環(huán)語法都不會。 所以,經(jīng)常在一些微信群中,遇到一些熱心網(wǎng)友要教給我循環(huán)語法。

然后我就說,不要只看循環(huán)的那三五句語法,不要做口炮黨,動下手,你們按同樣的變量表,把同樣功能的程序做一遍出來。然后大家比較一下。

然后來了。

下面從原理開始講解一下。

我原始的優(yōu)雅程序,在PLC程序中,就是如圖這樣的簡單羅列調(diào)用。

循環(huán)派說,你看看, 后面的數(shù)據(jù)結(jié)果VD1000, VD1004,VD1008是有地址規(guī)律的數(shù)據(jù),可以用指針,間接尋址或者數(shù)組的方式給序列化。 具體方法取決于所使用的PLC平臺支持情況。 比如SMART 200,就可以用指針。

先把VD1000指針化,送到LD22中, 循環(huán)中調(diào)用一次數(shù)值送到LD22指向的地址, 執(zhí)行完成之后指針增加4, 即指向了VD1004,下一周期即處理了第二個模擬量數(shù)據(jù)。

如此循環(huán)80次, 即只使用區(qū)區(qū)5-6行語句就實現(xiàn)了所有模擬量的處理。 而如果數(shù)量有改變,比如改為800個,那也只是把上面的循環(huán)數(shù)由80改為800即可。



然而,事情其實并非如此簡單。 不僅輸出側(cè)變量需要序列化, 輸入側(cè)的變量也同樣需要。 首先,量程上下限對每一個測點來說都不一樣,那么就無法使用固定值, 也需要做成變量組,而輸入的模擬量通道地址,也不會是完美連續(xù)的。 比如有時候數(shù)據(jù)來自通訊。 比如我做例子的時候有一部分數(shù)據(jù)直接來自VW。

那么需要對這些數(shù)據(jù)做IO映射處理。 即,模擬量通道部分,分配了VW2000開始的數(shù)據(jù)區(qū),量程上下限則分別分配了VD3000,VD4000的數(shù)據(jù)區(qū),分別傳送到指針LD10, LD14, LD18中。

所以, 真實可用的程序是:



程序行數(shù)增加了一點點,忽略不計。

然而IO映射就沒有那么容易了。 因為地址并不能保證規(guī)則連續(xù), 所以必須逐行用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行程序, 一行都少不了。 我這里只是截取了中間的部分,看到數(shù)據(jù)地址是不規(guī)則的。

而量程上下限,常數(shù)值可以用MOVD方法同樣實現(xiàn),也可以直接定義到數(shù)據(jù)塊中,數(shù)據(jù)塊增加2個表量程L和量程H,錄入數(shù)據(jù)分別為:


每個表分別是80行,80*3=240。

然而這樣的程序是不完整的。 使用掉的V區(qū)數(shù)據(jù)都需要做到符號表中, 給分配符號名稱。 就像我原本給QOUT分配到V1000一樣。

那么數(shù)據(jù)工作量為80*3=240行。

這些數(shù)據(jù),以及MOVE指令做IO映射的程序,都需要從EXCEL整理好之后復(fù)制過來。 所以可以認為其實數(shù)據(jù)塊和符號表與程序基本相同的工作量,都是程序的一部分。

所以程序的總量480行比我不用循環(huán)的做法其實反而增加了400行。

然而,我做程序時候, EXCEL表格是一次性完成的, 這里需要把工藝變量表拆分到6個表中,整理好了之后分別復(fù)制6次。這里模擬量處理的輸出部分恰巧是內(nèi)部數(shù)據(jù),所以可以是完整的序列。 而其它類的設(shè)備, 輸出部分也需要做IO映射,也仍然需要工作量。

是的。這個PK程序其實也仍然是我自己親自做的。 我雖然早就知道這里面的全部的工作量,我寫上一篇文章原本就是針對的某些文章和視頻做的所謂循環(huán)處理技巧,我自己工作中斷然不會使用,但為了把例子貢獻出來, 還是忍著惡心給完整做了一下。


這個循環(huán)法實現(xiàn)的程序,為了爽那一下下的幾句指令,同時還消耗了V2000-V4000的3000byte的數(shù)據(jù)區(qū)。 而且,程序也仍然沒有做到徹底標(biāo)準化。 比如,1000個byte,只能存放250個浮點數(shù)數(shù)據(jù),即,如果真的要處理800個模擬量, 可不是僅僅把80改為800,而是所有數(shù)據(jù)區(qū)規(guī)劃都需要更改。因為原本的規(guī)劃區(qū)不夠用了, 循環(huán)跑不成去了。

而倒過來, 如果只是8個模擬量的程序, 現(xiàn)在的這套浪費了3000個數(shù)據(jù)區(qū)的程序, 也是搞笑的。 浪費量驚人, 也需要優(yōu)化修改。

所以其實就是, 你沒針對一個新項目,都需要根據(jù)實際的模擬量數(shù)量, 重新做數(shù)據(jù)區(qū)優(yōu)化規(guī)劃。  

那些嘲笑我,要教我循環(huán)語法的驕傲的年輕人, 只執(zhí)著于跟我演示那三五句語法,我都懶得看,他們卻非常自豪的要反復(fù)演示,以為那已經(jīng)是自動化工作頂尖絕技。我反復(fù)提醒他們動動手把程序做完整的時候, 理都不理。 還只在那里教育我勿要做井底之蛙, 不曉得天外有天。

指望著那些又輕浮又懶惰的年輕人,我永遠也得不到跟我PK的樣本。

我這里辛辛苦苦把對標(biāo)PK的例子程序做出來,提供給那些懶得動手的循環(huán)派年輕人,如果我了解有偏差之處,還可以在我基礎(chǔ)上再修改完善,哪些工作是因為我愚蠢做多了, 可以做減法刪除掉, 這樣對他們來說,就不會畏懼親自動手了。

每一個年輕人,未來要有成長,在勤奮與聰明之間,必須擁有一樣。 而且很多時候勤奮比聰明還更重要一點。 尤其是你怎么點化都不能領(lǐng)悟的自以為是的小聰明。

我這里把PK80程序同樣放到80工位雙聯(lián)開關(guān)QQ群文件中,群1已經(jīng)滿員, 群2還有空位,可以申請加入870566908后獲取。
0822 【萬泉河】解讀一個用循環(huán)法PK萬泉河80模擬量例子的例子程序.pdf (138 K) 下载次数:187
hssdwyz
級別: 正式會員
精華主題: 0
發(fā)帖數(shù)量: 58 個
工控威望: 83 點
下載積分: 748 分
在線時間: 32(小時)
注冊時間: 2022-09-20
最后登錄: 2024-10-14
查看hssdwyz的 主題 / 回貼
1樓  發(fā)表于: 2022-10-12 21:10
我學(xué)習(xí)下!謝謝!