程序中这个L16什么作用

请问这段程序中有一句就是这个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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 下午4:29
下一篇 2018年12月2日 下午4:30

相关推荐