感覺(jué)你有概念性的錯誤。網(wǎng)絡(luò )2是中斷程序吧?
首先VD4488中如果是PLC的地址,那個(gè)數值是沒(méi)有錯誤的,在PLC表示的絕對地址的表述是那樣的。所以網(wǎng)絡(luò )2中的比較指令是錯誤,比較指令錯誤的。如果需要,你比須這樣試驗一下:
MWD &VB4000 VD0
mwd &vb4198 vd4
運行后觀(guān)察 VD0和VD4的值。不同類(lèi)型的PLC可能數值也不相同,
我用的224XP,這分別是:134221728 和 134221926
你的指針賦值也有問(wèn)題,建議你在VD4448中,放置偏移量。
然后這樣
賦值指針:
MOVD &VB4000 ,AC1
ADD AC1,VD4488
保存數據及修正指針
MOVE 數據 *AC1
INC VD4488
INC VD4488
IF VD4488>100 than vd4488=0
中斷返回
你的程序中,找不到指針移動(dòng)的語(yǔ)句;蛟S你在中斷以外移動(dòng)了。(這不可能)
或許你認為那句是移動(dòng)了,但是按照你程序的思想,你使用了>號,故移動(dòng)指針指令是不執行的(實(shí)際因為概念性錯誤是永遠執行的,指針數據因此在大約4秒后,遭到破壞)、而而指針初始化操作的地址,VD4488也寫(xiě)成了,VD488,所以,你的中斷程序沒(méi)有對指針進(jìn)行任何操作。
這樣程序很清晰,AC0中是數據,AC1是地址指針。VD4488中是偏移量
這樣做還有個(gè)好處,特別是指針操作,使用累加器比使用內存來(lái)的快的多。畢竟你的程序使用了1毫秒中斷,需要很高的處理速度,有可能會(huì )發(fā)上上個(gè)中斷還沒(méi)處理完,另個(gè)中斷已經(jīng)到來(lái)了,會(huì )發(fā)生中斷隊列溢出,、而而造成系統崩潰或采集數據失真。PLC的掃描周期通常在7毫秒左右,視程序大小,大的會(huì )長(cháng)些,小的會(huì )短些。
你中斷程序中竟然還要調用子程序,你應該把數據準備好,或者直接讀取原始數據,分析與處理放在中斷以外。
其實(shí)你完全沒(méi)有必要使用1毫秒中斷,觸摸屏的顯示與PLC中的數據通常不同步,長(cháng)的能相差2秒以上呢。如果把中斷調整到10或50毫秒,調試起來(lái)會(huì )很輕松。也沒(méi)必要追求指令執行時(shí)間。
[ 此帖被醉湮邃虞在2009-07-17 13:04重新編輯 ]