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