存储器间接寻址
S7-300/400 有3种寻址方式
立即寻址
直接寻址
间接寻址
立即寻址和直接寻址用的最多。
间接寻址中用的最多的是存储器间接寻址。
(一 )立即寻址举例
立即寻址 :立即寻址的操作数直接在指令中
L -35 //将16位整数装载到累加器1的低字
L L#5 //将32位双整数装载到累加器1
L W#16#3E4F //将16进制常数字装载到累加器1的低字。
L 25.38 //将32位浮点数常数装载到累加器1
L S5T#2S //将16位S5T定时器常数装载到累加器1的低字 (2秒钟)
L P#10.0 //将32位内部区域指针装载到累加器1 (先记住)
(二)直接寻址
直接寻址在指令中直接给出存储器或者寄存器的地址,地址包括区域 长度 和位置信息
A Q 0.5 //输出Q寄存器0的第5位
L DBW // DB表述DATA BLOCK 数据块 将数据块中的16位字装载到累加器1的低字
L LD 22 //将32位局部数据双字装载到累加器1 中
T QB10 //将累加器1最低字节的数据传送到过程映像输出字节QB0
(三)存储器间接寻址
例如:
在指令"A M[LD20]" 中 方括号表示间接寻址
如果LD20中的指针值是 P#5.2, P表示pointer 指针
则M[LD20]对应的地址是M5.2
(三.1) 16位指针的间接寻址
定时器 计数器 DB FB 和 FC 的编程范围 小于65535 可以16位指针
定时器存储器间接寻址的例子
已经拍摄成视频 I0.2 用于启动定时器T3 用PLCSIM 观测T3 的变化 发现 T3在倒计时5秒 证明 T[MW8] 确实是 T3
SD T[MW8]表示 接通延时定时器 线圈
(三.2)
S7-300/400 可以对 I ; Q ; M ;DB 等地区区的位。字节和双字 进行间接寻址。
地址指针包含了地址中的 字节 和 位 信息
这些地址区的间接寻址采用双字指针。
指针格式如下图所示
第0~2位 是被寻址的地址中的位编号
第3~18位 是被寻址的地址的字节编号 (0~65535)
31 24 |
23 16 |
15 8 |
7 0 |
0000 0000 |
0000 0bbb |
bbbb bbbb |
bbbb bxxx |
如果要用双字格式的指针 访问一个字节,字,双字 存储器,必须保证指针的位编号为0
例如P#20.0 P表示该常数是指针的地址。
我已经将32位指针的存储器间接寻址录制成视频 上传到百度网盘。
需要注意的是:
该视频 用LD 10 (LD10 位 Long型 32位) LD0变量来存储地址
LD20是一个局部变量,若用"[ ]"框起来 就表示了LD20 是一个指针变量,内部存放的变量是一个地址型数据。
视频的程序如下:
程序段1
L P#4.0 //指针的位编号为0 字节编号为4 由于后面L QB[LD 10] 把4.0给
//指针变量LD10 所以必须是4.0 位编号为0
T LD 10 //将累加1的值装载给LD10 LD10是 P#4.0 P表示是指针常量
L QB[LD10] //QB表示是位寻址
T MB6
改段程序视频 实现的 功能是
因为 L QB[LD 10] 指令是字节寻址, 所以LD10 必须用 P#4.0 赋值。
同时 在PLCSIM 中打开变量, QB4 给多少 则 MB6 就是多少
证明了 QB[LD 10 ] 访问的额就是 QB[4]
程序 段2
L P#4.3
T LD20
A M[LD 20]
=Q 5.0
此程序实现的是 当把 M4.3 置位为1 则Q5.0 线圈得电。
验证了 M[LD 20] 就是 M4.3
因为不是访问的字节 字 或者 双字 指针变量 LD 20 可以赋予值 P4.3
注意:
使用32位指针对数据块内的地址寻址时,首先必须用OPN指令打开要寻址的数据块
然后才能寻址,
例如
DBW [MD10] 在程序中输入指令 L DB2.DBW[LD 20] 该指令为 红色 表示 格式错误
修改为
OPN DB2
L DBW [LD 20 ] 就 OK 了
百度网盘录制的视频链接在此。