1009 【萬泉河】設(shè)備參數(shù)值掉電保持實現(xiàn)
這個話題以前探討過多次。但都不徹底。
以前是因為面對的是西門子PORTAL ,F(xiàn)B的每個管腳都可以設(shè)置保持。 所以焦點主要在優(yōu)化塊和非優(yōu)化塊,在非優(yōu)化塊對掉電保持資源消耗量大的問題。
而最近在撰寫《三菱PLC標(biāo)準(zhǔn)化編程煙臺方法》的書,這個問題又逐漸抬到前臺來了。我在分發(fā)三菱的標(biāo)準(zhǔn)化示范項目資料的時候, 跟學(xué)員就直接坦誠, 這一塊的問題我沒有解決,留著等需要的時候再大家一起努力想辦法找到解決方案。
這都好幾年過去了,上周借著寫書的機會,溫習(xí)了一部分內(nèi)容,就跟學(xué)員們做了一次講座。 講座之余,問起學(xué)員們這個問題,他們在實際項目中如何解決的。 有幾個老學(xué)員,自己標(biāo)準(zhǔn)化應(yīng)用已經(jīng)很熟練了,回答我還是FB管腳綁鎖存區(qū)的軟元件數(shù)據(jù)來實現(xiàn)的。
這種是最原始的,工作量最大的方法。 等于他們也同樣對這個問題沒有解決,等于是暫時擱置了。面向未來,擱置爭議,這在政治上是政治智慧,在技術(shù)上也是一種智慧。
當(dāng)然,也可能他們自身對這一點并不太重視,不覺得有痛點。百分之九十的痛點都解決了,都爽到了, 還有一點點固有的不爽, 也無足輕重了。
然而對我這種偏執(zhí)狂則不行的。 當(dāng)然啦,我是煙臺方法的奠基者,我當(dāng)然有責(zé)任盡可能把一切都做好,做到盡善盡美。 都能給出完美的解決方案。
于是,花了點時間重新研究了下,做了實現(xiàn)。 有近3年多的新技能的積累,理解力和方法又深了一層,實現(xiàn)起來就容易多了,方向也清晰多了。
從頭來描述這個問題。
對于一臺設(shè)備,一個設(shè)定參數(shù),在PLC中本質(zhì)上是FB的一個管腳。 這個管腳會連接到HMI的變量,即可以對這個參數(shù)的設(shè)定修改。
那么這個數(shù)值會有多個側(cè)面,分別是當(dāng)前值,存儲值和出廠初始值。
當(dāng)前值即在線運行使用的參數(shù)值。 如果是稱重系統(tǒng), 則是稱重目標(biāo)值,如果是溫度控制系統(tǒng), 會是溫度的給定值。 然而會要求這個數(shù)值在萬一系統(tǒng)掉電之后重新恢復(fù)后不要丟。要盡可能和掉電之前的運行值相同,至少不能全丟了,導(dǎo)致工廠要恢復(fù)生產(chǎn)還需要忙上大半天去逐個參數(shù)進行修改。
當(dāng)然,如果HMI支持配方存儲功能,可以將所有參數(shù)儲存為配方,通過配方下發(fā)批量完成所有參數(shù)的恢復(fù)。 但這里講不依賴HMI,也不依賴人工操作,僅在PLC功能就能自動保存記憶的情況下。
另外還有一個值是出廠初始值,即如果恢復(fù)工廠設(shè)置, 比如換了CPU, 程序重新下載,那么將源程序重新下載到CPU之后,系統(tǒng)也應(yīng)該有一套基本的接近靠譜的設(shè)定參數(shù),而不是全部參數(shù)都是0。即便需要針對當(dāng)下的生產(chǎn)工藝對參數(shù)做一定的更新, 也不至于一上來系統(tǒng)就是癱瘓的,完全不能跑。
所以就是寫在程序中的,也必須有一套數(shù)值。
我以前有討論過INPUT管腳又要有固定數(shù)值,又要能修改,這是不可能實現(xiàn)的。 那么我們現(xiàn)在應(yīng)該知道了, 最好的方式是設(shè)置兩套管腳,固定值用于賦值初始值,而與HMI接口的是另一套管腳,且單獨實現(xiàn)掉電保持的問題。
即便在S7-1500的FB中,其實也存在這個問題。 它的FB的管腳雖說有一個初始值,但這個初始值是專屬于FB的,即各實例的IDB得到的初始值都相同。而不會給每個實例都預(yù)留好不同的初始值。 如果要針對每個實例修改, 還需要逐個打開IDB進行修改。其實也很麻煩。
現(xiàn)在的解決思路是, 制作一個專用的SETSAVE的塊,在工藝塊內(nèi)部來調(diào)用它, 工藝塊需要保存的參數(shù)有多少個,就調(diào)用多少次。SETSAVE塊內(nèi)部,為這些參數(shù)分配存儲區(qū)域位置。分配后只實現(xiàn)數(shù)據(jù)保存和調(diào)用,但具體的位置在哪里, 不需要知道。
而在工藝塊FB的管腳就有2套同樣的管腳,分別用于存放初始值和運行設(shè)定值,運行設(shè)定值對接HMI,接受修改。
SETSAVE塊實現(xiàn)的功能:
1, 首次上電,將出廠值送給運行值和保存值。
2, 首次上電之外的每次掉電后的重新上電,將保存值恢復(fù)到運行值。
3, 每個周期隨時隨地,或判斷有修改后,將運行值存儲到保存值。
比如有一個WTING塊,給定參數(shù)打包放在UDT中, 分別為SP1, SP2, SP3:
標(biāo)簽 數(shù)據(jù)類型 注釋
SP1 FLOAT (Single Precision)
SP2 FLOAT (Single Precision)
SP3 FLOAT (Single Precision)
而出廠值則為3個單獨的管腳,分別為W1,W2,W3:
類 標(biāo)簽 數(shù)據(jù)類型
VAR_INPUT W1 FLOAT (Single Precision)
VAR_INPUT W2 FLOAT (Single Precision)
VAR_INPUT W3 FLOAT (Single Precision)
VAR_IN_OUT UU U01_RECP
最后一個UDT則為上述打包的給定參數(shù)。
程序中開始部分的實現(xiàn)則為:
SETSAVE_1(DATA0:=W1 ,RUNDATA:= UU.SP1 );
SETSAVE_1(DATA0:=W2 ,RUNDATA:= UU.SP2 );
SETSAVE_1(DATA0:=W3 ,RUNDATA:= UU.SP3 );
其后為正式程序。
即實現(xiàn)了需要的功能。
把功能需求和實現(xiàn)思路梳理清楚后,實現(xiàn)過程其實是比較簡單的。 任何有一定功底的PLC工程師都可以自己完成。 就像我曾經(jīng)提出的中央報警指示燈的實現(xiàn)思路,同一天內(nèi), 有2個網(wǎng)友,非學(xué)員,來問我當(dāng)初文章的題目。他們只是記得這回事,但文章題目不記得了。 我給了提示后他們找到了文章,也是不到半天,就紛紛告捷大功告成了。
這個函數(shù)塊,也是一樣, 只給思路, 不分發(fā)具體的程序邏輯實現(xiàn)方法。 我是為了完成書中的內(nèi)容, 在三菱GX2系統(tǒng),F(xiàn)X3U下實現(xiàn)的。 三菱標(biāo)準(zhǔn)化學(xué)習(xí)營的學(xué)員如果需要,可以跟我索取。 未來可能可以在書中見到一部分源代碼。
其他的品牌平臺的學(xué)員, 以及只購買了打印版三菱源程序的非正式學(xué)員, 不提供。
S7-1500系統(tǒng)下,我還沒想清楚是否有必要這么做。 而SMART系統(tǒng),因為V區(qū)掉電本來就會保持7天,所以一直以來需求不強烈。但將來有需要的話我會考慮移植到SMART 200中同樣實現(xiàn)。
但三菱學(xué)員即便得到這個程序,也只是提供思路和實現(xiàn)途徑,本人并不負(fù)責(zé)代碼的完整正確。 真的要應(yīng)用到工程中, 還需要每個人自己去把關(guān)驗證。
所以,我其實并不負(fù)責(zé)所有代碼的正確。我之所以不愿意隨意分享后開發(fā)的源代碼,也是出于這方面的考慮。 煙臺方法,給人的只是編程思想和架構(gòu)。我給的有源代碼的項目程序,也只是保證用于我自己的工程現(xiàn)場,是原汁原味完整好用的,但并不保證可以直接拿去套用到學(xué)員自己的行業(yè)項目。
所以, 總有人在造謠宣揚煙臺方法的程序中有bug。 其實是很愚蠢可笑的。我都沒有這樣的責(zé)任和義務(wù), 何來的bug? 有沒有bug是我跟我自己的客戶之間的事,我的設(shè)備在現(xiàn)場運行幾百套,即便有bug哭的是我自己,別人操的哪門子心?
不過真正的煙臺方法的學(xué)員,當(dāng)然都是懂這些的。從來都是我催促他們往前走,而從沒有人在我后面挑出來什么所謂的bug。