找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
以上面一段程序为例。
TAR2 #Adress_Pointer //将地址 AR2 存放的指针存到 #Adress_Pointer中,
//为最后那条语名恢复 AR2 做的准备工作。
LAR1 P#4104.0 //将来32位指针 P#4104.0 装载到 AR1,为源数据的开始地址做准备
LAR2 P#0.0 //将来32位指针 P#0.0 装载到 AR2,为目标地址做准备
OPN DB_Analog_int DB41 //打开DB41,后面循环中使用的目标数据块在此打开了。
L 8 //循环次数初始化
lop1:T #Loop //保存循环变量的当前值,与后面的 LOOP 指令配合使用
L PIW[AR1,P#0.0] //先计算: AR1中的指针+P#0.0,得出源地址,结合 PIW 取到源数
//据 PIWX,如第一次循环取取的数据是 PIW4104;
//第二次循环则会读到 PIW4106 ,依循环次数类推;
T DBW[AR2,P#0.0] //先计算:AR2中的指针+P#0.0将,得到目标地址,将上一行取到的
//PIWX 传到数据块中相应的字变量中。
//如,第一次循环是将 PIW4104 传到 DB41.DBW0
// 第二次循环是将 PIW4106 传到 DB41.DBW2
+AR1 P#2.0 //本次循环执行完了,对源地址指针进行调整,AR1 自加 P#2.0,
//使得下一次循环时指向新的源数据,即为下一次循环做的准备
+AR2 P#2.0 //对目标地址指针进行调整,AR2 自加 P#2.0,
//使得下一次循环时指向新的目标区域,即为下一次循环做的准备
L #Loop //装载循环次数
LOOP Lop1 //LOOP 循环指令,隐含有将上一行的循环变量先减1,然后再判断循环变量
//的值是不是到 0 了,如果没有到就跳转到标号 Lop1,否则退出循环
LAR2 #Adress_Pointer //将#Adress_Pointer的数值传回AR2,恢复AR2在的数据
程序主要用了循环指令和地址寄存器的间接寻址,功能是 PIW4104-PIW4118 共 8 个 字的值依次存储到 DB41.DBW0-DB41.DBW14,每执行一次循环体传送一个字。
参考资料
S7-300和S7-400寻址
https://support.industry.siemens.com/cs/document/79632832
西门子STL间接寻址常问问题集
https://support.industry.siemens.com/cs/document/76492353
使用间接寻址编写循环程序
https://support.industry.siemens.com/cs/document/19345564
SIMATIC S7-300和S7-400编程的语句表
https://support.industry.siemens.com/cs/document/109751814
LAR1 P#4104.0 //对地址寄存器1进行赋值4104.0开始的
LAR2 P#0.0 //对地址寄存器2进行赋值0.0开始的
OPN DB41 //打开DB41
L 8
lop1:T #Loop //对Loop进行赋值
L PIW[AR1,P#0.0]
T DBW[AR2,P#0.0]//将地址寄存器1对应地址数据PIW的数据赋值给地址寄存器2对应的地址里
+AR1 P#2.0 //地址寄存器1自加两个字节的量
+AR2 P#2.0 //地址寄存器2自加两个字节的量
L #Loop
LOOP Lop1 //执行循环指令
LAR2 #Adress_Pointer //将#Adress_Pointer的数值还给地址寄存器2
以上程序,主要用了循环指令和地址寄存器的间接寻址,例如将piw4104的值给DB41.DBW0,PIW4106的值给DB41.DBW2,如此循环8次;
S7-300和S7-400寻址:
https://wenku.baidu.com/view/43b69593650e52ea54189886.html
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!