本文揭秘PLC S7-300/400程序移植到S7-1500后發(fā)生的數(shù)據(jù)混亂謎團(tuán)!
有的人發(fā)現(xiàn)將S7-300/400程序移植到S7-1500后,一些數(shù)據(jù)出現(xiàn)了混亂!檢查程序發(fā)現(xiàn)兩者完全相同!
那為什么相同的程序結(jié)果卻不同呢?下面告訴你答案。
S7-300/400不同的程序段可以使用不同編程語言,我們來看下面這段程序。
程序段2使用梯形圖編程,變量B加上變量C等于變量D,D當(dāng)前值為5并存儲(chǔ)在累加器1中,而程序段3則使用了語句表編程,裝載變量E到累加器1中,原累加器1中的值即5被壓入到累加器2中,該段程序相當(dāng)于變量D+E,然后將結(jié)果傳送到變量F中,從在線監(jiān)視中可以看到變量F等于15。
這里盡管使用了不同的編程語言,但是編譯器相同,程序段上下間對(duì)系統(tǒng)寄存器的操作是連續(xù)的。
我們?cè)倏纯匆浦驳絇LC S7-1500后的程序監(jiān)控狀態(tài)。
相同的程序,但是變量F的值卻等于11了,這里可以看到,在執(zhí)行程序段1時(shí),將1裝載到累加器1中,然后再傳送到變量A中。執(zhí)行程序段2后,累計(jì)器1中的值未受到影響,然后與程序段3中的變量E相加,結(jié)果輸出到變量F中,E等于10, 所以F就等于11了。
造成這種問題的原因是系統(tǒng)發(fā)生了變化,S7-1500底層不支持語句表,為了移植的需求,就虛擬了一套系統(tǒng)運(yùn)行語句表程序,這樣語句表和梯形圖的編譯器就不相同了,表面看上起來與原程序相同,實(shí)際上程序段1、3與程序段2是完全獨(dú)立的,這樣就造成了運(yùn)算結(jié)果的偏差。
解決這個(gè)問題的方法很簡(jiǎn)單,就是保證每一個(gè)程序段相對(duì)獨(dú)立,例如在程序段3的開頭,將變量D裝載到累加器1中就可以了。
作者:崔堅(jiān)
共有訪客發(fā)表了評(píng)論
網(wǎng)友評(píng)論