A "对中纵向对中2汽缸原位"
A "对中吸盘升降汽缸1上升位"
A "对中吸盘升降汽缸2上升位"
A "对中工位真空吸附完成"
JCN nt3
L DBB 12
T #glass_type
T DBB 13
nt3: NOP 0
S "对中工位玻璃判别完成"
R "对中工位玻璃判别失败"
nt6: NOP 0
这个语句表从nxt3开始的程序不知道如何理解,什么左移三位,变量指针加AR1,麻烦高手指点下该语句表如何理解。
答:这个语句表从nxt3开始的程序不知道如何理解,什么左移三位,变量指针加AR1,麻烦高手指点下该语句表如何理解?
1、首先了解双字指针:
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
AR:
0000 0000 0000 0BBB BBBB BBBB BBBB B*
例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。
2、为什么左移三位?
据上述双字指针的格式,将一个32位整形数据转为双字指针,即字节指针,将这个个32位整形数据左移3位(即乘8)就是字节指针。例如:
L #L100 //装入32为整形数据100
SLD 3 //左移3位(即乘8)
T LD0 //LD0得到P#100.0的指针常数。
3、楼主的程序:
nxt3: NOP 0
OPN DB [#ProductDBTmp] //打开用#ProductDBTmp表示数据块号之DB。
L #loop_cnt
L 34
*I
SLW 3 // #loop_cntch乘以34的结果,再左移3位(即乘8),形成字节指针。
LAR1 //将上述运算结果装入指针AR1。
L DBD [AR1,P#20.0]//取指针AR1加上偏移量20.0为地址的那个DBD中的数据。
L DBW [AR1,P#28.0]//取指针AR1加上偏移量28.0为地址的那个DBW中的数据。
+D // 将上述两者相加
T #cnt2_cmp_up//将上述两者相加存入 #cnt2_cmp_up中。