LAR1 P##IO2
L 0
T B [AR1,P#7.0]
T B [AR1,P#6.0]
L LB 7
T B [AR1,P#5.0]
L LB 6
T B [AR1,P#4.0]
L LB 5
T B [AR1,P#3.0]
L 0
T B [AR1,P#2.0]
L 14
T #IO2
AR1是一个8个字节长度的寄存器地址。把word型的IO2装载到AR1上,然后给AR1的每一个字节赋值,是不是等同于在给IO2赋值?IO2直接取AR1最低的两个字节的值?赋值程序并没有给AR1的最低两字节赋值,而是给IO2赋了一个14,是不是说明AR1的最低俩字节应该是0000000000001110?
请问我的理解对不对?
最佳答案
1、把word型的IO2装载到AR1上,然后给AR1的每一个字节赋值?IO2直接取AR1最低的两个字节的值?
LAR1 P##IO2,如果#IO2为word型的,是给AR1低字(最低的两个字节)赋值。
规范的编程#IO2应为双字型,因为AR1为32位指针。
指令LAR1 <D>:使用该指令,可以将寻址双字<D>的内容或指针常数装入地址寄存器 AR1。累加器 1 和累加器 2 保持不变。
2、是给IO2赋了一个14,是不是说明AR1的最低俩字节应该是0000000000001110?
这个理解是正确的,但是AR1为32位指针,不是word(16位)!
为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此: 0000 0000 0000 0000 0000 0000 0000 1110 = 1.6。这样形成了地址1.6。
L 14
T #IO2
上述程序规范应为:
L L#+14 // L#+14表示32位常数。
T #IO2// #IO2应为双字数据。
有关数据类型见:
见《S7-300数据类型》连接:
http://blog.gkong.com/more.asp?name=zhyo720211&id=2005
3、有关指针指令:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04) 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
详见《step7编程之地址概念详解》连接:
http://ishare.iask.sina.com.cn/f/22746895.html
http://www.gongkong365.com/bbs/job.php?action=download&aid=96
《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=
提问者对于答案的评价:
谢谢帮忙,弄明白了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc236379.html