存储器 间接 寻址 试验 立即寻址 ;直接寻址 ;间接寻址 16位指针间接寻址 32位指针间接寻址

存储器间接寻址

 

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 了

 

百度网盘录制的视频链接在此。

你可能感兴趣的:(存储器 间接 寻址 试验 立即寻址 ;直接寻址 ;间接寻址 16位指针间接寻址 32位指针间接寻址)