浮生若夢
級別: 略有小成
|
各位師傅好,我這里有一段西門子300 plc 的程序,看不太明白,望師傅不吝賜教,謝謝。 這段指針和循環,不知道該怎么看? [ 此帖被浮生若夢在2014-04-07 12:22重新編輯 ] |
---|---|
|
浮生若夢
級別: 略有小成
|
圖片共3 張,中間第二張圖片,跳轉標號m003只有一個,不是截圖上的“有2個跳轉標號m003” 不知道我這樣解釋師傅們聽明白了沒。。。。 |
---|---|
|
sjm213
有小知識,無大學問。
級別: 論壇版主
|
OB1中: IN0=P#DB9.DBX0.0 //表示IN0處為指針,指針指向DB9.DBX0.0 FC35中: L P##IN0 LAR1 L W[AR1,P#0.0] T #TEMP2 L D[AR1,P#2.0] LAR1 OPN DB[#TEMP2] 這段程序代表將數據塊號“9”取出來放到#TEMP2中,將指針實際地址取出備用,然后打開數據塊DB9; 接下來的程序都是傳送+四則運算了,可自己分析; 所有間接尋址上的AR1都指DB9.DBX0.0,在它的基礎上加上偏移量就是實際地址; 如DBX[AR1,P#0.1]就是指DB9.DBX0.1, W[AR1,P#8.0]就是指DB9.DBW8。 |
---|---|
|
浮生若夢
級別: 略有小成
|
感謝版主大人的熱心回復! 另外,我這里還有些疑問,fc35,前四行語句,我的理解是: 把指針值 DB9.DBW0放到#TEMP2中去, fc35,第五,六,行語句,是將 DB9.DBD2裝載到地址寄存器AR1中去, fc35,第七行語句,是打開數據塊 DB9.DBW0,但這樣理解好像也不對。 我對300的指針這塊還是不理解。 |
---|---|
|
sjm213
有小知識,無大學問。
級別: 論壇版主
|
前四行是把“9”這個數放到#TEMP2中,所以第七行的OPN DB[#TEMP]實際上就是打開數據塊DB9; 五、六行指針指向DBX0.0,而不是DBX2.0(這個DBX0.0是從OB1調用FC35塊時的P#DB9.DBX0.0得來的)。 看指針的數據結構: |
---|---|
|
浮生若夢
級別: 略有小成
|
版主請看,我這樣的理解對嗎? 另外我還是想不明白,累加器和地址寄存器都是32位的,它們怎么能裝得下48位的pointer 類型的數據呢? |
---|---|
|
浮生若夢
級別: 略有小成
|
另外,我這里還有以前自己分析過的一段程序,對于程序中指針部分的理解,總感覺有問題,還望版主大人指教,在這里先說聲,謝謝了,謝謝版主大人耐心解答,才使得我們這樣的新手少走彎路。 |
---|---|
|
lichenhui333
只有搞不定的人,沒有搞不定的事。
級別: 工控俠客
|
里面不會出現6個字節的,當裝載雙字時,ACUU1里面的原有內容自動轉存到ACUU2里面去了。ACUU2里面原有內容被覆蓋。這樣ACUU1里面的就裝載雙字了。 [ 此帖被lichenhui333在2014-04-10 13:59重新編輯 ] |
---|---|
|
浮生若夢
級別: 略有小成
|
pointer類型的數據是直接裝載到 ACCU1中去的,但 ACCU1是32位,pointer類型數據是48位啊。 |
---|---|
|