0819 【萬泉河】PLC的OB1循環(huán)周期時(shí)間有多重要?
本行業(yè)的特征技術(shù)點(diǎn), 除了雙線圈之外, 還有一個(gè)OB1的循環(huán)時(shí)間。
即,程序中所有指令的運(yùn)行時(shí)間累加在一起, 形成了一個(gè)OB1循環(huán)周期內(nèi)的循環(huán)時(shí)間。
與高級(jí)語言編程中循環(huán)都是自己編程實(shí)現(xiàn)的不同, PLC中內(nèi)置了OB1或者叫做MAIN,會(huì)在設(shè)備運(yùn)行期間不斷周而復(fù)始循環(huán)運(yùn)行。 那么這個(gè)周期值就比較重要,因?yàn)樗砹讼到y(tǒng)的運(yùn)行負(fù)載輕重程度。
前幾天,寫了一篇文章《0815 【萬泉河】一種在PLC程序中比較優(yōu)雅地使用全局變量M的方法》,簡單說, 就是通過在程序中增加一部分代碼,我稱之為前處理和后處理,可以實(shí)現(xiàn)程序中M量的使用比較優(yōu)雅, 不怕使用沖突, 也不需要整個(gè)程序范圍內(nèi)的交叉索引查找故障。
然后有一些版主專家就提出了反對(duì)意見, 指出程序使用M執(zhí)行速度快,用V區(qū)轉(zhuǎn)儲(chǔ)浪費(fèi)了OB1周期,加重了系統(tǒng)負(fù)擔(dān), 甚至還有人指責(zé)我這樣子大手大腳使用CPU計(jì)算資源, 是因?yàn)橛绣X,所以不會(huì)過日子。 而他們都是要節(jié)儉持家的, 絕不會(huì)這樣鋪張浪費(fèi)。
然后,我就不樂意了。 既然要算經(jīng)濟(jì)賬, 那咱就從經(jīng)濟(jì)賬的角度算一下,使用我前文的方法做程序,到底是省錢還是費(fèi)錢。
那么我們來計(jì)算一下增加的前處理后處理的代碼, 會(huì)增加CPU多少運(yùn)行時(shí)間。
寫一個(gè)空程序,只包含前處理后處理這兩段代碼,那么它的運(yùn)行時(shí)間就會(huì)是將來正式程序中使用的時(shí)候,所增加的增量。
程序下載到CPU中,然而因?yàn)橛?jì)算量太小,根本統(tǒng)計(jì)不出來。CPU的OB1周期保持在1ms。
于是做了個(gè)循環(huán),通過增大循環(huán)量來得到其運(yùn)行耗時(shí)。
然后:
當(dāng)循環(huán)次數(shù)為10000時(shí),SMW22=204ms, 即每個(gè)周期增加的時(shí)間是0.02ms
我不知道所有同行每次調(diào)試時(shí)都非常在意系統(tǒng)的OB1時(shí)間,會(huì)不會(huì)在調(diào)試完成后記錄存儲(chǔ)OB1時(shí)間到調(diào)試記錄中交接歸檔。 但總的來說, 一臺(tái)CPU的周期在50ms-60ms上下是正常的,健康的。 甚至,在S5的時(shí)代, OB1的循環(huán)周期往往是100ms的數(shù)量級(jí),證明, 你即便把程序做到了100ms, 從設(shè)計(jì)角度來說, 選型有些失誤,但系統(tǒng)整體也還算可以運(yùn)行, 沒有徹底癱瘓。
我們就取60ms的正常值,假設(shè)1200元買得一臺(tái)CPU,那么做個(gè)除法,每個(gè)ms的花費(fèi)為20元。 當(dāng)然這個(gè)算法比較簡單粗暴,你花出去的錢買到的不僅僅是循環(huán)周期, 還有系統(tǒng)更多的功能。
即便按20元/ms來計(jì)算,一段代碼增加的算力對(duì)應(yīng)的費(fèi)用為0.4元。
我所給出的代碼, 只是在系統(tǒng)模塊化基礎(chǔ)上給每個(gè)POU增加,通常對(duì)于SMART 200這樣的小PLC來說,能帶的系統(tǒng)規(guī)模,模塊單元20個(gè)POU就算多的了。 那么折算下來,0.4ms,8元。
就是說,假設(shè)你的系統(tǒng)計(jì)算算力緊張拮據(jù)到極致, 每一句代碼都要非常在乎,都要盡量精簡的時(shí)候,前處理后處理程序所對(duì)應(yīng)的成本也不過區(qū)區(qū)8元。
而如果沒有達(dá)到極致, 60ms和60.4ms的程序有什么區(qū)別嗎?
沒有區(qū)別,你買的PLC是一樣的,PLC帶動(dòng)的生產(chǎn)線的生產(chǎn)效率是一樣的。
完全一樣,區(qū)別為0!
這里還有一個(gè)比較有意思的故事。
大約十多年前,曾經(jīng)在論壇里,也是討論到相似話題的時(shí)候, 有一個(gè)網(wǎng)友跟我抬杠,大致意思就是CPU運(yùn)行效率提高,就會(huì)帶來生產(chǎn)效率提高。 我為了確認(rèn), 還舉例子問他,假設(shè)一條汽車生產(chǎn)線, 你選用一臺(tái)PLC系統(tǒng)運(yùn)行周期50MS, 然后再換一臺(tái)更高級(jí)點(diǎn)的, 運(yùn)行周期40ms, 效率提高了20%,那么產(chǎn)線的產(chǎn)能就會(huì)提高20%,會(huì)多生產(chǎn)20%的汽車?甚至運(yùn)行周期到25ms, 效率提高一倍,汽車產(chǎn)量能翻倍嗎?他非常篤信地回復(fù), 是的呀!然后我就笑了。
如果那樣的話,提高CPU性能就能帶來幾百億的收入增加,那就是不惜代價(jià)花費(fèi)過億來單買一臺(tái)性能頂級(jí)的PLC,也是值得的啊!
很顯然不是這樣的嘛!通常的控制系統(tǒng),產(chǎn)能與PLC的運(yùn)行效率都不要說什么幾乎無差別了, 而是根本沒有差別。
近20年, CPU的性能逐漸提高, 主頻越來越快,計(jì)算能力持續(xù)增加, 一些以前不能實(shí)現(xiàn)的功能,比如多軸同步等等,現(xiàn)在可以實(shí)現(xiàn)了。 以前需要特殊算法和特殊工藝處理才能實(shí)現(xiàn)的功能,現(xiàn)在只需要CPU直接計(jì)算驅(qū)動(dòng)就可以實(shí)現(xiàn), 最終設(shè)計(jì)者的設(shè)計(jì)效率得到提高了,僅此而已。
我所給出的程序處理方法, 根本的目的是在于提高工程師的工作效率。 可以不需要耗費(fèi)太多的時(shí)間來規(guī)劃變量使用。 假設(shè)帶來的效率提高為10%。
10%的數(shù)字對(duì)傳統(tǒng)行業(yè)來看相當(dāng)大,而對(duì)編程方法來說, 很小意思了。這里只是一個(gè)細(xì)節(jié)。 完整的煙臺(tái)方法架構(gòu),對(duì)效率的提高可以達(dá)到300%-500%, 如果要感覺驚訝, 把下巴留給煙臺(tái)方法吧!我做的80系列例子, 每一個(gè)平臺(tái), 每一個(gè)版本, 花費(fèi)時(shí)間不超過20分鐘。 大家可以印證下按自己傳統(tǒng)的編程方法,需要多長時(shí)間。
一個(gè)平常的工程師的身價(jià)月薪1W很正常, 專家級(jí)別2W也不為過。 咱們就按1W來算, 效率提高10%, 相當(dāng)于每月節(jié)省1000元。
比較一下,每臺(tái)PLC 8元(還不一定存在)和每月1000元(以后還可以持續(xù)改進(jìn)提高),哪一個(gè)賬比較合算?
這個(gè)數(shù)學(xué)賬算的值得嗎?