s7-300/400 cpu在下載用戶程序后,會(huì)出現(xiàn)cpu處于停止?fàn)顟B(tài),stop和sf指示燈亮的現(xiàn)象。在線查看cpu的診斷緩沖區(qū),會(huì)出現(xiàn)兩種現(xiàn)象:
1、第一條顯示由io訪問(wèn)錯(cuò)誤引起的停止模式,第二條顯示i/o訪問(wèn)錯(cuò)誤(見(jiàn)圖1)。
圖1 io訪問(wèn)錯(cuò)誤
圖1中的第二條診斷信息顯示的含義是:
i/o access error,writing——說(shuō)明對(duì)一個(gè)輸出地址進(jìn)行寫(xiě)數(shù)據(jù)操作時(shí)發(fā)生錯(cuò)誤。
p area,word access,access address:200——說(shuō)明是使用立即訪問(wèn)方式,字地址200。這兩條合起來(lái)就說(shuō)明對(duì)pqw200進(jìn)行寫(xiě)操作時(shí)發(fā)生了錯(cuò)誤。出現(xiàn)這樣的錯(cuò)誤多是程序中對(duì)pqw200這個(gè)地址進(jìn)行了賦值,而實(shí)際的硬件配置中并沒(méi)有分配pqw200這個(gè)地址。
2、或者是第一條顯示由編程錯(cuò)誤引起的停止模式,第二條顯示區(qū)域長(zhǎng)度錯(cuò)誤(見(jiàn)圖2)。
圖2 區(qū)域長(zhǎng)度錯(cuò)誤
圖2中的第二條診斷信息顯示的含義是:
area length error when reading——說(shuō)明讀取一個(gè)地址時(shí)發(fā)生長(zhǎng)度錯(cuò)誤。
global db,word access,access address:2——說(shuō)明是訪問(wèn)db塊中字地址2。這兩條合起來(lái)就說(shuō)明對(duì)全局db塊中dbw2進(jìn)行讀取時(shí)發(fā)生了錯(cuò)誤。這樣的錯(cuò)誤多是由于程序中使用了db塊中的某個(gè)數(shù)據(jù),但是db塊實(shí)際長(zhǎng)度并沒(méi)有包含所使用的地址造成的。
解決辦法
出現(xiàn)上面兩種編程使用錯(cuò)誤地址導(dǎo)致cpu停機(jī)的情況時(shí),除了可以根據(jù)診斷信息分析出錯(cuò)誤地址然后使用交叉索引找到相應(yīng)的語(yǔ)句外,還有一個(gè)更加簡(jiǎn)便的辦法。打開(kāi)cpu診斷緩沖區(qū),鼠標(biāo)點(diǎn)中第一條診斷信息,接著再點(diǎn)擊下面的“open block”按鈕,會(huì)直接打開(kāi)相應(yīng)的錯(cuò)誤語(yǔ)句。下面舉例說(shuō)明。圖3中的診斷信息顯示編程錯(cuò)誤導(dǎo)致的停止,錯(cuò)誤的原因是區(qū)域長(zhǎng)度錯(cuò)誤。點(diǎn)中“open block”按鈕,自動(dòng)定位到程序中的錯(cuò)誤語(yǔ)句(圖4),里面使用到地址db1.dbw2。打開(kāi)db1發(fā)現(xiàn)實(shí)際長(zhǎng)度只有2個(gè)字節(jié)(圖5),不存在dbw2這個(gè)地址,所以才產(chǎn)生錯(cuò)誤。造成io訪問(wèn)錯(cuò)誤的語(yǔ)句也可以通過(guò)此方法查找。
圖3 open block
圖4 錯(cuò)誤語(yǔ)句
圖5 db1實(shí)際長(zhǎng)度