32位存储器间接寻址举例
//DB 块间接寻址举例
OPN DB 1 //打开DB1??
OPN DI 3 //打开DB3,最多可以同时打开两个DB块
L 4 //装载4到累加器1 中
SLD 3 //累加器1中数值左移3位
T MD 20 //将逻辑操作结果传送到MD20中,MD20包含地址指针为P#4.0
L P#20.0 //将地址指针P#20.0装载到MD24中
T MD 24
L 320 //320转换指针为 P#40.0并装载到MD28中??
T MD 28
L DBW [MD 20] //装载DB1.DBW4??
L DBW [MD 24] //装载DB1.DBW20??
+I //相加????
L DIW [MD 28] //装载DB3.DBW40??
-I //相减?? ????
T DIW 2 //将运算结果传送到DB3.DBW2 中????
JC m1 (这里的跳转指令是什么意思,跳转条件是什么)
//M存储器连续区域操作??????????????????
L 0 //初始化MW100和MD4??
T MW 100
T MD 4
OPN DB 1 //打开DB1??
L 100 //循环操作的次数100 次????
NEXT: T MW 100 //将循环100次装载到MW100 中,固定格式??????????????
L MW 2 //进行比较的数值存储于MW2??
L DBW [MD 4] //与DB块中存储的值进行比较,开始地址为DBW0??
==I //如果数值相等跳到m1??
JC m1
L MD 4 //将地址指针加2(每个相邻的字地址相差2)。
L P#2.0
+D
T MD 4
L MW 100 //次数减1,跳回next如果MW100等于0跳出循环操作LOOP指令LOOP 指令固定格式??????????????
LOOP NEXT
m1: FP M 10.0 //如果数值相当,记录MD4指针的数据将转换为数组的位置
((地址值/P#2.0)+1)值存储于MD8中 (上面这段注释怎么理解,指针数据转换为数组的位置是什么意思,还有他这个计算的公式是根据什么来的)
JCN m2 (这个跳转是在没跳到m1的时候 也就是说m10.0上升沿没有激活的时候跳转吗)
L MD 4
L P#2.0
/D
+ 1
T MD 8
m2: NOP 0 (最后这个NOP不理解什么意思,如果不加这一段程序会怎样)
以上这段程序是在s7-300的寻址文档里给的示例程序,有好几处看不懂,都标在括号里了,还有一个问题是loop循环程序 比如循环一百次,是每个扫描周期都循环一百次,下个扫描周期又循环一百次吗?
有没有成熟的冒泡程序,比如一百个数找到最大值,最小值的那种
最佳答案
1、还有一个问题是loop循环程序 比如循环一百次,是每个扫描周期都循环一百次,下个扫描周期又循环一百次吗?
是每个扫描周期都循环一百次!
2、有没有成熟的冒泡程序,比如一百个数找到最大值,最小值的那种 ?
、假定100个整型数据,放在DB1中,安放顺序如下:
DWD0
DWD2
…
DBD198.
下面是西门子的程序
OPN DB 1 /////打开DB1这个数据块
L 100 //装载100到MB0中,因为有100个数据,要进行100次排序.
LL0: T MB 0
L P#0.0 ////装载地址指针,这是关键,不要搞错了
LAR1
L 99
LL1: T MB 2 ////内部循环,进行99次,直到把最大值排到最后
L DBW [AR1,P#0.0]
L DBW [AR1,P#4.0]
<I
JC LL2 ////比较前后两个值,如果前面大于后面的,则前后数据交换
L DBW [AR1,P#0.0]
T #m_temp
L DBW [AR1,P#2.0]
T DBW [AR1,P#0.0]
L #m_temp
T DBW [AR1,P#2.0]
LL2: +AR1 P#2.0 ////指针自动进行加2,因为是整型数,所以要跳过2个字节
L MB 2
LOOP LL1 ///这个指令自动的将A寄存器里的值减1
L MB 0
LOOP LL0
2、有关指针寻址的资料:
、《关于S7-300和S7-400指针寻址的说明与例程 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
、《step7编程之地址概念详解》连接:
http://wenku.baidu.com/view/b2b4d3375a8102d276a22fd3.html
或
http://www.chinakong.com/rencai/disp.asp?id=1633&leibie=4
、《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=
提问者对于答案的评价:
谢谢阿铭老师,#m_temp是什么意思
最佳答案作者回复:
#m_temp是编程者自己定义的一个变量名,一般定义标有temp,通常是一个临时的存储单元,具体表示什么?要看相应的程序了。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345185.html