北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章528 浏览8056545

西门子S7系列PLC的寻址方式(1)

所谓寻址方式,是指CPU根据程序中的变量地址,找到其对应的物理地址的方式。西门子S7系列PLC支持多种方式的寻址,给程序开发提供了很大的自由空间。今天这篇文章我们就来谈谈S7系列PLC(300/400/1200/1500)是如何寻址的。

cover.jpgS7系列PLC的寻址方式可以分为直接寻址和间接寻址两大类。

所谓直接寻址,是指在程序中直接访问CPU的存储区的寻址方式。这里的存储区包括输入/输出映像区(Input /Output)、位存储区(M)、定时器(T)、计数器(C)、数据块(DB)及功能块(FB/FC)等。直接寻址又可以分为两种:绝对寻址和符号寻址。

所谓绝对寻址,是指在程序中使用存储区的物理地址的寻址方式。比如:I0.0,Q1.0,M2.0等等。

物理地址不能直观的表达其代表的意义。比如程序中看到“I 1.0”,我们并不知道它是表示哪个按钮的输入,还是哪个接近开关的输入。这种寻址方式不利于程序的阅读、编写及后期的维护。为了增加程序的可读性及可维护性,可以使用另一种寻址方式:符号寻址。

所谓符号寻址,是指给物理地址起一个与其功能相关的符号(名称)。比如上例中的“I 1.0”,我们给它起个符号名“Start ON”,当我们看到这个符号的时候,就知道它代表开机按钮。

符号寻址支持所有的存储区(I、O、M、C、T、DB、L),使程序的可读性及可维护性增强,是大型程序开发中常见的寻址方式。

以上两种寻址方式均属于直接寻址,在高级程序开发中,还会用到另一类的寻址方式:间接寻址。

间接寻址是利用指针或地址寄存器进行的寻址方式,可以在程序运行期间通过改变指针或地址寄存器的值,来动态修改指令的地址。间接寻址的指针包括16位和32位,寻址方式包括存储器间接寻址和寄存器间接寻址,功能强大,对初学者理解起来有一定的困难,本文先讨论存储器间接寻址。

存储器间接寻址使用16位和32位两种指针进行寻址。16位地址指针用于定时器(T)、计数器(C)、程序块(FB/FC)及数据块(DB)的寻址。它以字的形式进行访问,16位指针作为一个无符号数(0~65535),表示相应存储器的编号。

寻址格式:区域标识符[16位地址指针]

比如:减计数器指令  CD     C[MW20] ;“C”是计数器区域标识符,“MW20”表示地址指针;再看看下面这段代码:

16bit_address.png

这里使用MW22作为16位地址指针,其值为20,所以延时定时器为 T20。

32位指针可以对存储器的位、字节、字及双字进行寻址。32位指针作为一个双字,其0~2位(bit)为位地址,3~18位为字节地址,19~31位没有定义。如下图:

32_bit_address.png

存储器32位指针仅用于内部区域寻址,其格式为:区域标识符[32位地址指针]

如果要使用32位指针访问一个字节、字或者双字存储器,要让指针的位地址为0,比如:P#Q10.0。看看下面这段代码:

32bit_pointer.png

上面的例子中,使用指针的方式访问QB6。首先把指针常数P#6.0存放到MD30中,然后使用指令“L QB[MD30]”将QB6的值加载到累加器1,之后传送给变量MB100。这里注意:“p32_1”是MD30的符号名称。

下面这段代码使用32位指针进行位操作:

32bit_pointer_bit_operation.png

MD34作为32位指针,存放常量P#2.5,当“I 2.5”为 “1”时,Q10.1为“1”。

好了,关于西门子S7系列PLC的直接寻址及存储器间接寻址就先介绍到这里了,后续的文章我们介绍下寄存器间接寻址。

官网提供文本PDF版本下载


已经过安全软件检测无毒,请您放心下载。

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论