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