请问这段程序中有一句就是这个L 16有什么作用啊?看下我的理解是不是正确。
L P#5.0 相当于在PIW306后隔两个字传送,也说是从piw310开始?
LAR1
L 4 表示要传送的字长度,就是PIW310到PIW316四个字?
A: T MB 0
L PIW [AR1,P#306.0] 读字的开始位置
T MW [AR1,P#200.0] 写字开始的位置
L 16 就是这句是什么意思?有什么作用??????
+AR1
L MB 0
LOOP A
最佳答案
如果楼主在程序中的注释是想让程序完成的目的,不过该程序实现不了。
1、首先熟悉:
AR1和AR2,每个32位:
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
AR:0000 0000 0000 0BBB BBBB BBBB BBBB Bnnn
执行L P#5.0 , LAR1 后AR1中为0000 0000 0000 0000 0000 0000 0010 1000
2、 L 16
+AR1
就是这句是什么意思?有什么作用?
L 16 // 将数值装入累加器 1 低字中。
+AR1// +AR1:使用该指令,可以将语句中或累加器 1 低字中定义的偏移量加至地址寄存器 1。
首先将整数( 16 位)扩展为带有其正确符号的 24 位数,然后加到地址寄存器 1
的最低有效 24 位(地址寄存器 1 中部分相关地址)。地址寄存器 1 中 ID 区
部分(位 24、25 和 26)保持不变。
,原AR1为0000 0000 0000 0000 0000 0000 0010 1000,加16(即二进制10000)后,AR1为0000 0000 0000 0000 0000 0000 0011 1000,即表示 P#7.0,其后的循环为P#9.0.、P#11.0、P#13.0.。
3、楼主所述: L 4 表示要传送的字长度,?
L 4 表示要传送的字的个数,即传送4个字,这是设定循环的次数。
4、就是PIW310到PIW316四个字?
不对。循环首次AR1为P#5.0, [AR1,P#306.0] 为P#311.0(即306.0+5.0=311.0),其后AR1分别为P#9.0.、P#11.0、P#13.0.,则[AR1,P#306.0] 分别为P#315.0,#317.0,#319.0。
应该是PIW311,PIW315,PIW317、PIW319。
5、相关文档:
《用于S7-300 和S7-400 的语句表(STL)编程手册》下载:
http://www2.ad.siemens.com.cn/download/Upload/AS/manual/1008[1].pdf
见《详解西门子间接寻址.pdf》下载:
http://ishare.iask.sina.com.cn/f/3022080.html
提问者对于答案的评价:
解释的很详细,一看都理解到了,
专家置评
关于指针要谨慎使用,用得好能够简化程序,实现复杂的功能,以下文档对于使用指针入门很有帮助:
西门子STL间接寻址常问问题集
http://www2.ad.siemens.com.cn/download/Upload/AS/faq/F0595_%e8%a5%bf%e9%97%a8%e5%ad%90STL%e9%97%b4%e6%8e%a5%e5%af%bb%e5%9d%80%e5%b8%b8%e9%97%ae%e9%97%ae%e9%a2%98%e9%9b%86.pdf
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc248925.html