[西门子] 西门子 200smart全局变量和局部变量

[复制链接]
查看349 | 回复0 | 2024-7-10 19:46:02 | 显示全部楼层 |阅读模式
>
01
全局变量符号表中定义的变量是全局变量,在所有的程序中都有效。在程序中用符号寻址变量时,全局变量的符号直接显示。



变量”,指在程序的运行时,变量的值可以根据某些条件而发生改变。变量的名字叫做“变量名称”。与“变量”相对的是“常量(Constant)”,常量的值在整个程序的运行中保持不变。


全局变量的生命周期是整个程序的运行周期。只要PLC还运行用户程序,全局变量就一直有效。

在西门子S7系列PLC编程中,存放在公共存储区的变量都属于全局变量。公共存储区包括输入缓存区I、输出缓存区Q、位存储区M、全局数据块DB、定时器T、计数器C等。
02
局部变量局部变量(Local variables)是相对于全局变量而言的。局部变量分配给每个子程序临时存储区,当子程序被调用时,系统分配局部变量区给子程序。子程序执行完成后,该局部变量区被释放。释放时其中存贮的值也同时丢失,不能在下一扫描周期再被子程序使用。只有在执行程序时,才使用定义的局部变量。


1、IN类型,将指定位置的参数传入子程序。
2、OUT类型:从子程序来的结果值(数据)传到指定的参数位置。

3、IN/OUT 类型:将指定位置的参数传到子程序,从子程序修改后的结果值被返回到同样的地址。

4、TEMP类型:临时变量只用作子程序内部的暂时存储器,不能用来传递参数,一旦程序完成执行,临时变量数值则无法再用。在两次POU执行之间,临时变量不保持其数值。也可以不定义临时变量符号直接使用L存储器绝对地址。



IN、OUT、IN_OUT变量会与外部进行数据交换,不需要与外部数据交换时应使用TEMP变量。


在局部变量表中赋值时,只需指定声明的局部变量的类型(TEMP、IN、IN_OUT或OUT)和数据类型,不需要指定内存地址。程序编辑器自动为L存储区中的所有局部变量指定存储位置。起始地址为L0,字节、字和双字在本地内存中按字节顺序分配,如LBx、LWx或LDx。局部变量区的大小为64个字节,其中最后4个字节被系统所占用,实际可供子程序使用的为60个字节。



由于局部变量区的数据不能带到下一扫描周期,因此只能用于存储程序运算中的中间值,可以减少对全局变量区的占用。局部变量区在子程序被调用时才被分配,且分配时并不对数据区进行初始化,所以其初始值是不确定的。因此在程序中用到这些存储区的值前,必须要对该存储区地址赋值操作,否则可能会出现错误的执行结果。尤其在子程序中存在大量的跳转指令时,很容易出现漏掉对局部变量赋值的情况。



每个子程序最多可以调用16个输入/输出参数。如果超过16个,将返回一个错误。
局部变量可以用来传递到子程序的参数,增加子程序的通用性和可移植性。局部变量的前面带有#号以示区别。在编程过程中需要再添加变量,一定要把显示方式切换成:“仅符号”否则插入变量后地址全部变化,程序中原本使用的地址将报错。
03
利用局部变量编程案例利用子程序局部变量编程实现2台电动机的起保停控制。






通过对局部变量和子程序形式参数的指定,可以避免对相同逻辑的工作进行重复编程,大大提高了程序的编写效率。



责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则