一、西门子s7-300间接寻址的指令
1、立即寻址指令“L 100”表示将100装入累加器1。
2、直接寻址指令“L MW200”表示将编号为MW200这个箱子里的数据装入累加器1。
3、间接寻址指令“L MW[LD300]”表示LD300这个箱子里装的是真正存放数据的箱子的编号(即存放数据的MW的地址),假设LD300这个箱子里放的是MW200的地址,取出这个地址后,再把MW200这个箱子里的数据装入累加器1。
二、 西门子s7-300用于间接寻址的梯形图指令
实例:
OPN DB 1
L L#0
T DBW 170 //序号初始化
T DBW 172 //序号初始化
T DBD 200 //指针初始化
T DBD 204 //指针初始化
lab2: L DBD 200
L 80
>=D
JC lab1
A M [DBD 200]
JCN lab3
L DBD 200
L 1
+I
T DBW 174
L 1
L DBW 170
+I
T DBW 170
L 2
==I
= M 10.7
lab3: L 1
L DBD 200
+D
T DBD 200
JU lab2
lab1: NOP 0
这是一个间接循址的例子,dbd200为指针,dbw170统计m0.0-m9.7中置位的点的个数。dbw174指示最后一个置位点的序号。梯形图不支持间接寻址。
三、西门子s7-300间接寻址
做西门子200较多 通讯 模拟量 间接寻址 for循环都用过,最近有项目需要用到西门子300,看间接寻址的手册,不是很理解。
求指点与西门子s7-300间接寻址的实例。
解答:
1、建议看看:
《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04) 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
、《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=
2、实例:
典型的循环语句编程:
1. 将PIW128- PIW147,共20个字送入DB10中
在OB1:
2. 将PIW256- PIW275,共20个字送入DB20中
建立一FC块:
在FC100:
L 20 // 20个字的循环计数为初值
M001: T MB 10 //计数值 送入MB 10
L PIW [AR1,P#0.0] //按读指针指示的地址读数据
T DBW [AR2,P#0.0] //按写指针指示的地址写数据
+AR1 P#2.0 //读指针指向下一数据地址
+AR2 P#2.0 //写指针指向下一数据地址
L MB 10 //取循环计数值
LOOP M001 //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。
四、西门子S7-1200间接寻址指令的应用
西门子S7-1200的间接寻址需要通过数据块中的数组来实现。指令FieldRead通过索引(又称为下标)变量从数组中读取数值,指令FieldWrite 通过索引变量向数组中写数值,使用这两条指令可以实现间接寻址。
索引变量是间接寻址中的地址指针,它的值是要读写的数组元素的索引值。地址指针就像收音机调台的指针,改变指针的位置,指针指向不同电台。改变地址指针中的索引值,指针“指向”数组不同的元素。间接寻址的优点是可以在程序处理期间,通过改变指针的值动态地修改指令中的地址。
首先,生成一个名为“数据块1”的全局数据块DB2,在数据块中生成名为“数组1”的数组Array[1..10] of Int,其元素的数据类型为Int。
这两条指令没有列入指令列表和高级指令列表,编程时将收藏夹中的空逻辑框插入程序,点击其中红色的“??”,打开下拉式列表框,可以看到列表框底部的指令FieldWrite或FieldRead。点击生成的指令框中的“???”,用列表设置要写入或读取的数据类型为Int(见下图)。两条指令的参数MEMBER的实参必须是数组的第一个元素“数据块1”.数组1[1]。
指令的输入参数索引值“INDEX”是要读写的数组中的元素的下标,数据类型为DINT(双整数)。参数“VALUE”是要写入数组元素的值或要读取的数组元素的值。
下图中的FieldWrite指令将常数25写入数组1中的元素“数组1[3]”。FieldRead指令读取数组元素“数组1[3]”的值,将它保存到MW20。改变INDEX的值,可以读写别的数组元素的值。
本站仅提供信息发布平台,文章仅代表作者个人观点。