1,如上圖所示,any指針指向的應(yīng)該是一段外部的地址(伺服軸的報文地址),通過這樣編程可以訪問嗎?我記得這樣周期通信地址的讀取大于2個字應(yīng)該用sfc14??!
2,sfc20的使用,我記得看的資料顯示,sfc20只能拷貝映像區(qū)地址,不能考外部地址啊,難道報文地址不屬于外部地址嗎?
這個程序是老外提供給我們的模板程序,應(yīng)該不會錯的,而且這個模板好多塊都是這樣做的,真是有點糊涂了,請各位大俠幫忙指點一下,謝謝了!
答:
老外的程序沒有問題。為了幫助大家理解,給出了any指針的結(jié)構(gòu)圖。
老外程序中any的第一個字表示數(shù)據(jù)類型為字節(jié),第2個字表示字節(jié)數(shù)為12,第3個字為0,表示不是db,第4個字表示i區(qū)。
因為起始地址(idrivebaseinaddress)是字節(jié)地址(上圖中用16個b表示),需要將它左移3位,相當(dāng)于乘以8(一個字節(jié)8位),作為間接尋址的指針的基礎(chǔ),再用od指令疊加上指針最高字節(jié)的地址區(qū)信息16#81。
any用的是i區(qū),不是pi區(qū)。
假設(shè)i區(qū)的起始地址(idrivebaseinaddress)為x,sfc20的輸入?yún)?shù)(any)的實際地址為p#ix.0 byte 12。
當(dāng)然也可以在調(diào)用sfc20時直接寫p#ix.0 byte 12,不過老外這種模板的優(yōu)點是通用、靈活。但是要看懂程序的門檻比較高。