lanjinghao
師夷洋技以制夷!!!
級(jí)別: 略有小成
|
程序說(shuō)明:EM235用采樣交流電壓信號(hào),1ms執(zhí)行一次采樣中斷。將采樣值存儲(chǔ)到VW4000~VW4198中100個(gè)空間。并將VW4000~VW4198的值在觸摸屏顯示出來(lái),用于觀察交流電壓信號(hào)波形。現(xiàn)在建立一個(gè)指針VD4488,并且把指針指向VW4000地址。然后將AIW0賦給×VD4488,然后VD4488加2進(jìn)行指針偏移。當(dāng)VD4488=4198時(shí)再重新初始化指針VD4488。 AIW0數(shù)據(jù)處理 數(shù)據(jù)存儲(chǔ)處理 ----------------------- 現(xiàn)在問(wèn)題出來(lái)了: VD4488的值竟然為134222128,而不是4000~4198之間的值。無(wú)法執(zhí)行指針偏移以下的指令。這是為什么啊?VD4488存儲(chǔ)空間的值應(yīng)該是個(gè)地址啊,怎么會(huì)是134222128? |
|
---|---|---|
|
lanjinghao
師夷洋技以制夷!!!
級(jí)別: 略有小成
|
怎么沒(méi)人指導(dǎo)啊? 我用填表指令解決這個(gè)問(wèn)題了,還是搞不懂上面的指針問(wèn)題 |
|
---|---|---|
|
以恒
Blog: http://ye_w.plcjs.cn/
級(jí)別: 工控俠客
|
指針是VW4000對(duì)應(yīng)的實(shí)際物理地址,而不是VW4000本身 |
|
---|---|---|
本帖最近評(píng)分記錄:
|
以恒
Blog: http://ye_w.plcjs.cn/
級(jí)別: 工控俠客
|
地址指針是先建立后使用,你弄反了 |
|
---|---|---|
|
lanjinghao
師夷洋技以制夷!!!
級(jí)別: 略有小成
|
指針我已經(jīng)建立了,在初始化時(shí)就建立了。沒(méi)有貼出來(lái)而已。WOVD &VB4000 VD4488. 按理來(lái)說(shuō)VD4488存儲(chǔ)空間的值應(yīng)該是VB4000的地址了,那VD4488的值是否為4000? |
|
---|---|---|
|
醉湮邃虞
醉湮邃虞話老黑
級(jí)別: 略有小成
|
感覺(jué)你有概念性的錯(cuò)誤。網(wǎng)絡(luò)2是中斷程序吧? 首先VD4488中如果是PLC的地址,那個(gè)數(shù)值是沒(méi)有錯(cuò)誤的,在PLC表示的絕對(duì)地址的表述是那樣的。所以網(wǎng)絡(luò)2中的比較指令是錯(cuò)誤,比較指令錯(cuò)誤的。如果需要,你比須這樣試驗(yàn)一下: MWD &VB4000 VD0 mwd &vb4198 vd4 運(yùn)行后觀察 VD0和VD4的值。不同類型的PLC可能數(shù)值也不相同, 我用的224XP,這分別是:134221728 和 134221926 你的指針賦值也有問(wèn)題,建議你在VD4448中,放置偏移量。 然后這樣 賦值指針: MOVD &VB4000 ,AC1 ADD AC1,VD4488 保存數(shù)據(jù)及修正指針 MOVE 數(shù)據(jù) *AC1 INC VD4488 INC VD4488 IF VD4488>100 than vd4488=0 中斷返回 你的程序中,找不到指針移動(dòng)的語(yǔ)句。或許你在中斷以外移動(dòng)了。(這不可能) 或許你認(rèn)為那句是移動(dòng)了,但是按照你程序的思想,你使用了>號(hào),故移動(dòng)指針指令是不執(zhí)行的(實(shí)際因?yàn)楦拍钚藻e(cuò)誤是永遠(yuǎn)執(zhí)行的,指針數(shù)據(jù)因此在大約4秒后,遭到破壞)、而而指針初始化操作的地址,VD4488也寫(xiě)成了,VD488,所以,你的中斷程序沒(méi)有對(duì)指針進(jìn)行任何操作。 這樣程序很清晰,AC0中是數(shù)據(jù),AC1是地址指針。VD4488中是偏移量 這樣做還有個(gè)好處,特別是指針操作,使用累加器比使用內(nèi)存來(lái)的快的多。畢竟你的程序使用了1毫秒中斷,需要很高的處理速度,有可能會(huì)發(fā)上上個(gè)中斷還沒(méi)處理完,另個(gè)中斷已經(jīng)到來(lái)了,會(huì)發(fā)生中斷隊(duì)列溢出,、而而造成系統(tǒng)崩潰或采集數(shù)據(jù)失真。PLC的掃描周期通常在7毫秒左右,視程序大小,大的會(huì)長(zhǎng)些,小的會(huì)短些。 你中斷程序中竟然還要調(diào)用子程序,你應(yīng)該把數(shù)據(jù)準(zhǔn)備好,或者直接讀取原始數(shù)據(jù),分析與處理放在中斷以外。 其實(shí)你完全沒(méi)有必要使用1毫秒中斷,觸摸屏的顯示與PLC中的數(shù)據(jù)通常不同步,長(zhǎng)的能相差2秒以上呢。如果把中斷調(diào)整到10或50毫秒,調(diào)試起來(lái)會(huì)很輕松。也沒(méi)必要追求指令執(zhí)行時(shí)間。 [ 此帖被醉湮邃虞在2009-07-17 13:04重新編輯 ] |
|
---|---|---|
本帖最近評(píng)分記錄:
|
lanjinghao
師夷洋技以制夷!!!
級(jí)別: 略有小成
|
呵呵,謝謝樓上的指導(dǎo)。上午我用指針加計(jì)數(shù)器勉強(qiáng)解決這個(gè)問(wèn)題,你提出的方案更好一些。我已經(jīng)把指針處理的程序移到中斷之外了,中斷僅僅做數(shù)據(jù)采樣,而且我發(fā)現(xiàn)調(diào)用庫(kù)里頭的數(shù)據(jù)處理子程序算出來(lái)的數(shù)據(jù)有問(wèn)題,可能和1ms的中斷時(shí)間太短有關(guān)。后來(lái)改為自己計(jì)算處理,勉強(qiáng)能得出合理的數(shù)據(jù)。這個(gè)程序主要是想顯示電壓波形,沒(méi)辦法50HZ工頻只能用1ms的中斷來(lái)采樣了。 現(xiàn)在還有個(gè)問(wèn)題是,觸摸屏不能顯示負(fù)整型數(shù)值,也就是說(shuō)不能顯示負(fù)值,把正負(fù)標(biāo)志位當(dāng)成1來(lái)顯示了,有什么辦法來(lái)解決這個(gè)問(wèn)題啊?改為實(shí)數(shù)也有這個(gè)問(wèn)題。 |
|
---|---|---|
|
lanjinghao
師夷洋技以制夷!!!
級(jí)別: 略有小成
|
ac0是不是全局變量?從程序中發(fā)現(xiàn)好像是局部變量啊 |
|
---|---|---|
|
sjm213
有小知識(shí),無(wú)大學(xué)問(wèn)。
級(jí)別: 論壇版主
|
AC0是累加器~~ |
---|---|
|