程序如下:
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