这么一段程
*******************************
L "DB_CMV".iAct
// L 2 // F黵 Test
T #iIndex //z.B. L 11 --> T #iIndex
LOP1: OPN "DB_CMV" //Test f?Datensatz Nr. 1
//Gehe Ende FB Sprungmarke LOP1
T #iIndex //Datensatznummer speichern
OPN "DB_CMV"
L #iIndex
+ -1
L DBW 4 //Datensatzl鋘ge UDT251 in Byte
*I
L DBW 2 //Startadresse CMV Ventil Datensatz Nr.1
+I
SLD 3
T #DBD_Adresse //Startadresse Datensatz
L DBB [#DBD_Adresse] //CMV Zustansbyte 0
T LB 0 //CMV Zustansbyte 0
L #DBD_Adresse
L 8
+D
T #DBD_Adresse
L DBB [#DBD_Adresse] //CMV Zustansbyte 1
T LB 1 //CMV Zustansbyte 1
L #DBD_Adresse
L 8
+D
T #DBD_Adresse
L DBB [#DBD_Adresse] //CMV Zustansbyte 2
T LB 2 //CMW Zustansbyte 2
********************
我想问的是一开始不是把 index 做了好多计算然后 左移三位放到 DBD_Adresse 里了吗,已经是指针了啊,怎么在后面还能对DBD_Adresse做+D运算? 后面每次+8为什么是加一个字节?
初始值 DBW4=64 DBW2=20 那么第一次运算寻址到1360,第一次+8 不是1360+8吗
最佳答案
怎么在后面还能对DBD_Adresse做+D运算?可以对这个存放指针数据的变量进行加法运算,通过正确的计算,就能够得到不同位置的寻址。
后面每次+8为什么是加一个字节?这要是因为 L DBB [#DBD_Adresse] 这条指令是对字节进行间接寻址的 ,+8其实就是字节往后移动一个。
初始值 DBW4=64 DBW2=20 那么第一次运算寻址到1360,第一次+8 不是1360+8吗?
因为程序不是很全,仅从这里看的话,第一次指针的数值应该是(2-1)*64+20=84,#DBD_Adresse的值为84*8=672,
提问者对于答案的评价:
3Q
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc150589.html