SD T[MW0] //T1开始计时 // 上述指令可等同于: A I0.0 L S5T#10S SD T1
//用于打开DB块 L 20 T LW20
OPN DB[LW20] //打开DB20
//程序调用 L 2 T LW20
UC FC[LW20] //调用FC2 L 41 T DBW30
UC FB[DBW30] //调用FB41
?32位指针:32位地址指针用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32位的地址指针可以使用一个双字表示,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:
图 2
存储器32指针仅用于内部区域寻址。
寻址格式表示为: 地址存储器标识符 [ 32位地址指针 ]
例如写入一个M的双字表示为: T MD [ LD0 ]
‘MD’为区域标识符及访问宽度,而LD0为一个32位指针。
32位内部区域指针可用常数表示, 表示为P# 字节.位 。如常数 P# 10.3
为指向第10个字节第3位的指针常数。
若把一个32位整型转换为字节指针常数,从上述指针格式可以看出,应要把该数左移3位(或是乘8)即可。
如: L L#100 //Accu0装入32位整形100
SLD 3 //左移3位
T LD0 //LD0得到P#100.0指针常数
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中。 JZ 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 NEXT //出循环操作LOOP指令,LOOP指令固定格式。 m1: FP M 10.0 //如果数值相当,记录MD4指针的数据,将转换为数组
JCN m2 //的位置((地址值/P#2.0)+1)值存储于MD8中。 L MD 4 L P#2.0 /D + L#1
T MD 8 m2: NOP 0
2.2.2寄存器间接寻址
通过CPU的地址寄存器AR1和AR2寻址方式称为寄存器间接寻址,分为内部区域间接寻址和交叉区域寻址。使用寄存器间接寻址方式的程序语句包含以下部分:
指令,地址标识符,地址寄存器标识符,偏移量
AR1,AR2均为32位寄存器,寄存器间接寻址只使用32位指针。 与ARx相关的指令有:
LAR1, LAR2, TAR1, TAR2, +AR1, +AR2, LAR1 AR2, CAR等。
以上指令使用请参考手册:开始 -> (所有)程序 -> SIMATIC -> Documentation -> English -> STEP 7 – Statement List for S7-300 and S7-400。 或点击下载该手册中文版