变量指针程序如何理解?
郑志武
发布于2012-11-29 18:41
168
0
标签:
a#glass_id_auto//手动=1
//a"横向打开到位"
//a"纵向打开到位1"
//a"纵向打开到位2"
//a"玻璃到位检测(顶柱)"
jcnt31
nop0
o"cnt_read_ok"//编码器数据稳定,可以开始检测
//o"t允许玻璃识别延时"
//o"m3工位自动涂胶准备好"
a"对工工位支撑柱玻璃在位"
jcnnt6
set
r#start_timer
l0
t#loop_cnt
nxt3:nop0
opndb[#productdbtmp]
l#loop_cnt
l34
*i
slw3
lar1
ldbd[ar1,p#20.0]
ldbw[ar1,p#28.0]
+d
t#cnt2_cmp_up
ldbd[ar1,p#20.0]
ldbw[ar1,p#28.0]
-d
t#cnt2_cmp_down
ldbd[ar1,p#24.0]
ldbw[ar1,p#28.0]
+d
t#cnt1_cmp_up
ldbd[ar1,p#24.0]
ldbw[ar1,p#28.0]
-d
t#cnt1_cmp_down
a(
l#cntv2_act
//l"tp_cntv2_save"
l#cnt2_cmp_down
>=d
)
a(
l#cntv2_act
//l"tp_cntv2_save"
l#cnt2_cmp_up
<=d
)
a(
l#cntv1_act
//l"tp_cntv1_save"
l#cnt1_cmp_down
>=d
)
a(
l#cntv1_act
//l"tp_cntv1_save"
l#cnt1_cmp_up
<=d
)
jcnnt30
l#loop_cnt
l1
+i
opndb[#assigndbtmp]
tdbb13
ldb32.dbb13
t#glass_type
junt3
nt30:l#loop_cnt
l1
+i
t#loop_cnt
l16
<i
jcnxt3
l0
t#glass_type
tdbb13
s"对中工位玻璃判别失败"
r"对中工位玻璃判别完成"
junt6
//由于和客户沟通后决定,不需要做在自动情况下的自动取消涂胶工艺,故取消下列功能
//opndb[#assigndbtmp]
//adbx8.2//取消涂胶?
//jcnn301//否
//l100//是,将取消涂胶编号100发给机器人,任务100为空操作,只
//t#glass_type
//tdbb13
//n301:nop0//强制涂胶,等待转换到涂胶手动选择
//l0
//t#glass_type
//tdbb13
//junt6
//nt31:nop0
nt31:nop0//手动选择玻璃型号
opndb[#assigndbtmp]
adbx23.4
a"对中横向对中汽缸原位"
a"对中纵向对中1汽缸原位"
a"对中纵向对中2汽缸原位"
a"对中吸盘升降汽缸1上升位"
a"对中吸盘升降汽缸2上升位"
a"对中工位真空吸附完成"
jcnnt3
ldbb12
t#glass_type
tdbb13
nt3:nop0
s"对中工位玻璃判别完成"
r"对中工位玻璃判别失败"
nt6:nop0
这个语句表从nxt3开始的程序不知道如何理解,什么左移三位,变量指针加ar1,麻烦高手指点下该语句表如何理解。不甚感激。
佳答案
这个语句表从nxt3开始的程序不知道如何理解,什么左移三位,变量指针加ar1,麻烦高手指点下该语句表如何理解?
1、首先了解双字指针:
当使用在区域内寄存器间接寻址中时,我们知道这时的ar中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
ar:
0000000000000bbbbbbbbbbbbbbbb*
例如:当ar=d4(hex)=00000000000000000000000011010100(b),实际上就是等于26.4。
2、为什么左移三位?
据上述双字指针的格式,将一个32位整形数据转为双字指针,即字节指针,将这个个32位整形数据左移3位(即乘8)就是字节指针。例如:
l#l100//装入32为整形数据100
sld3//左移3位(即乘8)
tld0//ld0得到p#100.0的指针常数。
3、楼主的程序:
nxt3:nop0
opndb[#productdbtmp]//打开用#productdbtmp表示数据块号之db。
l#loop_cnt
l34
*i
slw3//#loop_cntch乘以34的结果,再左移3位(即乘8),形成字节指针。
lar1//将上述运算结果装入指针ar1。
ldbd[ar1,p#20.0]//取指针ar1加上偏移量20.0为地址的那个dbd中的数据。
ldbw[ar1,p#28.0]//取指针ar1加上偏移量28.0为地址的那个dbw中的数据。
+d//将上述两者相加
t#cnt2_cmp_up//将上述两者相加存入#cnt2_cmp_up中。
4、建议楼主系统看看下述两个文档,就全明白了:
、见《关于s7-300和s7-400指针寻址的说明与例程(更新版)(2008.03.04)》下载:
https://www.ad.siemens.com.cn/download/searchresult.aspx?searchtext=f0215
、详见《step7编程之地址概念详解》连接:
https://www.plc365.com/jishu/57.html