在PLC的编程过程中,数据的寻址是一项很重要的工作,以便于每次程序执行时能够捕捉到正确的程序数据。
![c6a542f7aa2c8b4299f4ee252a502f3f.png](https://img-blog.csdnimg.cn/img_convert/c6a542f7aa2c8b4299f4ee252a502f3f.png)
寻址概述
通过绝对或符号方式识别程序中的指令操作数。绝对参考使用存储区和位或字节位置识别地址。符号参考使用字母数字字符组合
程序编辑器如何显示地址的示例
识别某地址(符号地址)或数值(符号常数)。
I0.0 绝对地址由存储区和地址编号指定
INPUT1 全局符号名称
??.?或???? 红色问号表示未定义的地址(必须先定义,程序才能编译)
![966e5a4058d54232bb48024beb036a19.png](https://img-blog.csdnimg.cn/img_convert/966e5a4058d54232bb48024beb036a19.png)
- 全局范围与局部范围
符号表中赋值的符号值具有全局范围。变量表中赋值的符号变量具有全局范围。
- 全局符号
可使用符号表进行全局符号赋值。在程序程序中使用符号之前,不必执行符号赋值;您可以在任何时间进行符号赋值。
- 局部变量
局部变量在各自POU的变量表中赋值,且局限于创建局部变量的POU。每个POU都有自己的单独变量表。
示例:
在称作SBR1的子例程的变量表中定义称作INPUT1的变量。当从SBR1内参考INPUT1时,程序编辑器将其识别为SBR1的一个局部变量。
然而,如果从程序中的其它位置(例如,从MAIN或从第二个子例程)参考INPUT1,程序编辑器不将其视作局部变量(因为它位于SBR1之外),而将INPUT1视作未定义的全局符号。
- 范围规则
如果在局部和全局级别使用一个相同的地址名,局部用法优先。即,如果程序编辑器在变量表中发现某一特定程序块的名称定义,则使用该定义。如果未发现定义,程序编辑器会检查符号表。
示例:
在“符号表”中将PumpOn定义为全局符号。在SBR2(而不是SBR1)的变量表中将其定义为局部变量。编译程序时,局部定义用于SBR2中的PumpOn;全局定义用于SBR1中的PumpOn。
- 本地存储器使用
局部变量使用临时PLC的L存储器,而不要求PLC程序存储空间。仅使用局部变量参数(或根本不使用参数)的子例程可移植,且可在多个程序中重复使用。如果要在多个POU中使用一个参数,最好在“符号表”中将其定义为全局符号,而不要将其定义为局部变量,因为必须为每个POU的变量表分别赋值。
因为局部变量使用临时存储器,每次调用POU时,请务必在POU中初始化局部变量。局部变量不会将其数据值从一次POU调用保留到下一次调用。
说明:符号表支持全局符号常数(直接将符号名称分配给数值常数),变量表不支持符号常数。
![6c7fbd539e8c7b86070bef32bdf66a4d.png](https://img-blog.csdnimg.cn/img_convert/6c7fbd539e8c7b86070bef32bdf66a4d.png)
S7-200 SMART的寻址方式分为直接寻址与间接寻址,我们下次继续学习PLC的编程方式。
感谢您的阅读,希望能帮到您。让我们共同学习,共同进步。