0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PLC中Static和Temp变量的区别

工控论坛 来源:阿伟码控 2025-09-24 14:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,收到粉丝投稿,让博主讲下Static变量和Temp变量的区别,新入行的兄弟可能会对这两个概念不太能理解。

那么本期通过几个简单的小示例,并且配合PLC程序执行函数功能块的工作原理,来讲透Static和Temp的区别,为什么会有这两种类型的变量,分别用于解决什么样的问题,以及使用时的注意事项。

第一个例子,功能非常非常简单,输入参数req为True时,将变量自增一下,也就是加1,在Static区和Temp区分别建立了UDINT类型的变量来存储总共收到了多少次有效请求。

004158c8-9174-11f0-8c8f-92fbcf53809c.png

来测试一下,可以看到,随着请求信号req的变化,tempCounter一直是0,而statCounter则一直在累加。

00a169d4-9174-11f0-8c8f-92fbcf53809c.gif

这是为什么呢?同样都是在FB功能块内部定义的变量,只是一个在Static区,一个在Temp区,为什么结果会不同?其实tempCounter会在短暂的一段时间里面,值是为1的,可以这样试一下。

00feb742-9174-11f0-8c8f-92fbcf53809c.png

这恰好正是它们的区别所在,我们来从名称上看,Temp的意思是临时的,临时也就意味着定义在它下面的变量,这些变量只是临时存在的,只会在有限的时间内存在,这个有限的时间是多少呢?那就是当前这个块的执行时间,也就是当程序执行到这个块时,才会将Temp区的变量创建出来,当程序执行完这个块以后,就会将Temp区的变量销毁。

而Static的意思是静态,静态也就意味着它是一直存在的,而不是程序执行时创建出来的,Static区的变量,在你将程序下载到PLC时就创建出来,并且一直存在了。

这也正是我们常常说的,Static区的变量是有记忆的,而Temp区的变量是没有记忆。

Temp的人生是在不停的轮回,就像喝了孟婆汤,是没有前世的记忆。而Static是长生不老的,是永恒的。

我们再从工作原理上看一下功能块的执行过程发生了什么?当程序在Main OB中执行到我们定义的功能块时,会在通常叫做栈的存储区给它分配一片区域,标记为给它使用,在这片区域上将Temp区的变量创建出来,然后执行功能块程序,如果这个功能块内部还有函数或是功能块时,在执行到它的时候,同样会在栈的区域上创建Temp区的变量,而在相应的函数或是功能块执行结束时,会将栈上为它分配的区域标记为未使用。

这也正是为什么说Temp区变量在使用时要初始化,因为那片存储区域已经被使用过,脏了,是不干净的,你不知道上次留在里面的值是100还是0。

01579d8a-9174-11f0-8c8f-92fbcf53809c.png

再来看第二个例子,比如我们有几个FB和FC,互相间存在调用,然后我们在资源中的调用结构就可以发现,局部数据,也就是临时变量,是在调用执行期间才会占用空间,而Static区数据是存在DB数据块上的。

01b6b05e-9174-11f0-8c8f-92fbcf53809c.png

0212d974-9174-11f0-8c8f-92fbcf53809c.png

026f3638-9174-11f0-8c8f-92fbcf53809c.png

那为什么要有Temp变量,我全使用Static变量行不行?

当然可以,但这会带来两个问题。我们来看这段程序

02c95104-9174-11f0-8c8f-92fbcf53809c.png

很简单的一段统计产品良率的程序,这只是一小段程序,用了3个Temp变量,当然可以将它们都定义成Static,不影响功能,但是会占用Static区的空间,我们知道PLC的工作空间是有限的,这是第一个问题,会不必要的增加空间占用。第二个问题是,我们去看这个DB数据块时,会多很多这种用于临时计算使用的变量,显得不够简洁,特别是当程序量比较大时。

所以,对于这类只是临时中间计算使用,就把它存到Temp中去。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    5045

    文章

    14443

    浏览量

    483613
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66843
  • 变量
    +关注

    关注

    0

    文章

    615

    浏览量

    29371

原文标题:一文讲透PLC中Static和Temp变量的区别

文章出处:【微信号:gkongbbs,微信公众号:工控论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    static函数与普通函数有什么区别?  

    变量能否和全局变量重名?   如何引用一个已经定义过的全局变量?  全局变量可不可以定义在可被多个.C文件包含的头文件?为什么?
    发表于 12-03 06:15

    static的全局变量与局部变量的使用,看完你就懂了

    不能被其它文件所用;其它文件可以定义相同名字的变量,不会发生冲突。 (1)全局变量和全局静态变量区别 1)全局
    发表于 06-27 08:54

    static作用(修饰函数、局部变量、全局变量

    详细介绍了static作用(修饰函数、局部变量、全局变量)的用法
    发表于 11-17 10:30 4次下载

    c语言static的作用

    全局变量只能在本文件访问,不能在其它文件访问,即便是extern外部声明也不可以。第三、static修饰一个函数,则这个函数的只能在本文件
    发表于 11-03 09:36 1.6w次阅读

    C语言register变量和extern及static等知识总结

    register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。但是,有些机器的寄存器也能存放浮点数。 register变量可能不存放在内存,所以不能用取址符运算符 。 只有局部
    发表于 11-21 10:20 5次下载

    C语言中static和extern的区别介绍

    一、在Cstatic主要定义全局静态变量、定义局部静态变量、定义静态函数。 1、定义全局静态变量:在全局
    发表于 11-21 10:23 6次下载

    基于static变量来实现一个模块的封装

    static变量的一个显著的作用就是可以实现一个模块的封装。 static存储类别的特性决定了static声明的全局变量只能被本源文件
    的头像 发表于 01-05 10:54 5919次阅读
    基于<b class='flag-5'>static</b><b class='flag-5'>变量</b>来实现一个模块的封装

    什么是PLC变量

    都通过变量来操作。 为指令分配变量后,即会使用指定变量的值来执行该指令。 变量在 TIA Portal 中集中管理。 在程序编辑器创建
    的头像 发表于 10-11 11:53 2w次阅读
    什么是<b class='flag-5'>PLC</b><b class='flag-5'>变量</b>

    西门子PLC变量定义变量

    。 程序多数指令都通过变量来操作。  为指令分配变量后,即会使用指定变量的值来执行该指令。 变量在 TIA Portal 中集中管理。 
    的头像 发表于 12-23 16:25 2.2w次阅读
    西门子<b class='flag-5'>PLC</b><b class='flag-5'>变量</b>表<b class='flag-5'>中</b>定义<b class='flag-5'>变量</b>

    西门子PLC的局部变量使用技巧

    临时变量是临时存储在本地数据区的变量。只有在执行POU时,才使用定义的临时变量,而在执行POU后,不再使用临时变量的值。在主程序或中断程序
    发表于 12-13 18:07 6306次阅读

    为什么C++单例模式不能直接全部使用static变量static函数呢?

    通过getInstance()函数获取单例对象,这种模式的关键之处不是在于强迫你用函数来获取对象。关键之处是让static对象定义在函数内部,变成局部static变量。看下这种实现方式的经典demo:
    的头像 发表于 06-05 14:14 1992次阅读

    Static变量和Local变量区别

    变量可以分为3类,即Static、Automatic、和Local。如下表所示。
    的头像 发表于 10-12 09:35 1996次阅读

    JAVAstatic、final、static final如何区分

    当我们在使用java写类的属性时总会用到很多的类型去修饰它,比如字符串String,整数型int,但是我们偶尔也会遇到 static、final、static final,那么他们的区别是什么呢?
    的头像 发表于 02-14 14:55 1563次阅读
    JAVA<b class='flag-5'>中</b><b class='flag-5'>static</b>、final、<b class='flag-5'>static</b> final如何区分

    Javastatic关键词的介绍

    可以说是该关键字最常用的一个功能,通常将用 static 修饰的成员变量称为类成员或者静态成员,那么静态成员和不用 static 修饰的非静态成员有什么区别呢? 我们先看看不用
    的头像 发表于 10-11 15:26 929次阅读
    Java<b class='flag-5'>中</b>对<b class='flag-5'>static</b>关键词的介绍

    什么是变量PLC变量哪些部分组成?

    变量在 TIA Portal 中集中管理。 在程序编辑器创建 PLC 变量与在 PLC 变量
    发表于 10-15 11:31 7203次阅读
    什么是<b class='flag-5'>变量</b>?<b class='flag-5'>PLC</b><b class='flag-5'>变量</b>哪些部分组成?