行业快讯


先赋值后使用

 1、TEMP区的问题
在《本地数据TEMP》这篇文章中我们用一个简单的加法程序向大家演示了TEMP区的使用,但是我们在主程序OB1中只调用了1次,当我们多次调用这个程序的时候大家就会发现一个问题,无论我们调用几次,做几次加法运算都只能算出一个结果,如1-1所示我们在主程序中调用了三次FC1,虽然只是在第一次的调用中激活了加法运算,但是可以发现程序段2和程序段3虽然并没有进行计算但是却得出了和程序段1相同的结果。

                                      

 

1-1
那么问题出在哪里呢,其实问题的关键就出在了本地数据TEMP区,让我们一起来回顾一下FC1的程序吧。
接口
 
1-2
接口数据类型
接口
数据类型
add1
INT
add2
INT
add3
INT
add3_3
INT
start
BOOL
 
1
FC1
在这个程序中我们可以看到,加法的运算结果是先存放到本地数据add3中然后再由add3传送到输出接口add3_3
 
1-4

这里我们可以看到本地数据add3的起始地址是0.0由于是Int数据类型,因此add3占用的是FC1的本地数据LW0这个存储空间,由FC1程序可以看出只要add3被赋值,那么FC1就一定会将add3中的内容进行输出,因此当我们在主程序OB1中激活了第一段的加法,第二第三段在没有激活的情况下就跟着将第一段的结果一起输出了。

2、先赋值后使用
那么该如何避免这种情况的发生呢?这里我们就一定要用到先赋值后使用的方法,来避免这种情况的发生。那么怎么使用才算是先赋值后使用呢?其实非常简单,就是一定要保证建立好的本地数据时时刻刻都被占用,这个方法让我总结就是一个萝卜一个坑,先来先占,后到的萝卜PLC会自动给他分配别的本地数据区的位置,这样就不会出现上面那种相互干扰的情况出现了。那么TEMP区的本地数据怎么才算被时时刻刻都被占用呢?下面我们还是用这个加法的程序给大家举例。我们要做的只是把13中的常开触点start和接口start一并删除即可,删除后如21所示。
 
2-1

那么为什么我们只需要将第一段加法指令前面的常开触点删除就可以达到先赋值后使用的效果呢?其实大家可以仔细想一想,当加法指令前有常开触点的时候,如果当这个常开触点是断开的时候我们这个加法指令是不进行计算的,当不进行计算的时候本地数据add3就不处于被占用的状态,达不到时时刻刻都被占用的效果,而当我们把这个常开触点删除后add3就不存在不被占用的情况了,换句话说就是现在add3已经达到了被时时刻刻占用的效果了,这就是先赋值后使用,由22可见使用了先赋值后使用以后就不会再出现输出结果相互干扰的情况了。
 
2-2
-------------------------------
作者:马乐
版权所属: 技成培训网