1. 存储器间接寻址
顾名思义,存储器间接寻址就是将指针存储于存储器中。存储于存储器中的地址指针分为16位地址指针和32位地址指针,允许存储地址指针的存储器为M(标志位)、L(区域数据)及数据块(DB或DI),过程影像区是不能存储地址指针的,即使没有连接实际的I/O模块。
1.1 存储器16位地址指针
16位地址指针用于定时器、计数器、程序块(DB、FC、FB)的寻址,16位指针被看作一个无符号整数(取值范围0~65535),它指向定时器(T)、计数器(C)、数据块(DB、DI)或程序块(FB、FC)的号,16位指针的格式如图2。
图2
所有的定时器、计数器及程序块都可以使用间接寻址访问,访问时需要使用T、C、DB、DI、FB、FC的等区域标识符,寻址的指针存储于一个16位的字中,地址寻址表示格式为:
区域标识符[16位地址指针]
例如打开一个DB块表示为:
使用16位地址指针访问一个定时器和计数器的示例程序如下:
L 11 //将11传送到累加器1中。
T MW 20 //将累加器1中的数值传送到MW20中。
A I 2.1 //如果I2.1为1,将预置值10秒装载到T11中。
L S5T#10S
SE T [MW 20]
L MW 20
L 1
+I
T MW 22 //MW20再加1。
A I 2.2 //如果I2.2为1,C12向上计数一次。
CU C [MW 22]
数据块可以使用DB打开也可以使用DI打开,如果地址指针为0,CPU不会报错,使用16位地址指针访问数据块的示例程序如下:
L 20
T MW 40
OPN DB [MW 40] //打开DB20。
L 1
+I
T MW 42
OPN DI [MW 42] //打开DI 21。
L DBW20 //装载DB20.DBW20
L DIW20 //装载DB21.DBW20
+I //相加
T DBW40 //结果存储于DB20.DBW40中
使用16位地址指针调用程序块FB、FC时只能使用UC(无条件调用)或CC(有条件调用),而不能使用CALL指令,函数块中不能带有任何接口参数或静态变量,使用指针调用函数及函数块的示例程序如下:
L 12
T LW 20
UC FC [LW 20] //无条件调用FC12
L 13
T MW 20
A I 2.3
CC FB [MW 20] //如果I2.3为1,调用FB13。
FC12和FB13不能带有形参,这是由CC和UC调用指令决定的。
上面就是16位地址指针应用的简单介绍。假设一个控制对象需要使用两个定时器,有20个相同的控制对象,那么我们想一个如何使用16位地址指针进行循环调用?
-----------------------------------------------------------------------------------------------------------
上一篇:【1】看变址寻址的改变——从S7-300_400到S7-1500系列故事之一
下一篇:【3】16位地址指针使用示例——从S7-300/400到s7-1500系列故事之三
汇总帖:技术Π活动故事、视频与案例分享汇总