关于临时变量的问题

程序如下:
 IN:输入变量;TEMP:临时变量;STAT:静态变量
  O     #IN0
      O     #IN1
      O     #IN2
      O     #IN3
      O     #IN4
      O     #IN5
      =     #TEMP25

     O     #TEMP25
      O     #STAT15
      =     DB510.DBX   16.0
请问: 假如 IN0  一直为1 的话,TEMP25 是一直为1还是只有一个扫描周期为1.    (我之前好像做过一个实验,记得是TEMP25只有一个扫描周期为1,不确定,在此再次求证。)重点解释为什么?
2 临时变量的意思我也知道一二,但理解的不是很透彻。请各位老师举例说明,并举例说明使用临时变量的优势所在,谢谢

最佳答案

1:首先不是一直为1
2:PLC有 系统存储区、装载存储区和工作存储区;而程序运行时临时变量TEMP就储存在工作存储器的“临时本地数据存储区(L堆栈)’CPU的MMC卡可以看做是装载存储区。
3:L区的大小是可以组态的的可以单独为某个OB分配L堆栈大小见附件图片。
4:在系统调用其他FC,FB时,实参到形参的赋值也要占用L区,这个是CPU内部自己管理的。
5:使用临时变量也没有特别的优势,对于有些中间变量我们可以使用临时变量。比如你程序中的TEMP25 不需要存取在DB中,但是后面可能多处要用到TEMP 所以将
    O     #IN0
      O     #IN1
      O     #IN2
      O     #IN3
      O     #IN4
      O     #IN5
  的RLO结果临时存到#TEMP25,见下面你的逻辑TEMP25和STAT15 进行了一个或的操作。
      O     #TEMP25
      O     #STAT15
      =     DB510.DBX   16.0
也可能后面还有类似 下面的语句

O     #TEMP25
O #STAT16
 =     DB510.DBX   16.1

现将IN0-IN5 的中间逻辑结果存到TEMP25 临时变量中,可以下面语句用到时不必 在重新进行
IN0-IN5 或的操作,直接引用IN0-IN5逻辑操作的结果TEMP25就可以。

假如   =     DB510.DBX   16.0 语句是你该程序的最后一个语句,在执行完这个语句后,TEMP25就被释放了。但是当CPU的下个扫描周期后,#TEMP25为再次为1,因为IN0是1.

图片说明:

关于临时变量的问题  

提问者对于答案的评价:
多谢老师

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc230214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 上午4:21
下一篇 2018年12月1日 上午4:22

相关推荐