SIEMENS西门子模块代理商|6ES7288-3AM06-0AA0
SIEMENS西门子模块代理商|6ES7288-3AM06-0AA0
SIEMENS西门子模块代理商|6ES7288-3AM06-0AA0SIEMENS西门子模块代理商|6ES7288-3AM06-0AA0
西门子SIEMENS授权一级代理商。西门子SIEMENS模块授权代理商
上海SIEMEN西门子触摸屏授权总代理商,上海西门子触摸屏授权一级代理商,金华西门子模块授权一级代理商,宁波西门子CPU模块一级代理商
西门子交换机模块,北京西门子电源模块代理商,杭州西门子逻辑控制模块。深圳西门子伺服电机模块代理商,广州西门子DP电缆代理商,
西门子变频器代理商,荆门西门子PLC模块授权一级代理商,湖北西门子电线电缆授权代理商,上海西门子S7-200CPU系列代理商,西门子
S7-1200CPU系列代理商,SIEMENS西门子模块授权一级代理商,西门子SIEMENS低压断路器一级供应商,西门子低压断路器
代理商,西门子S7-500系列代理商
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
图 1-3在这个程序中我们可以看到,加法的运算结果是先存放到本地数据add3中然后再由add3传送到输出接口add3_3
图1-4
这里我们可以看到本地数据add3的起始地址是0.0由于是Int数据类型,因此add3占用的是FC1的本地数据LW0这个存储空间,由FC1程序可以看出只要add3被赋值,那么FC1就一定会将add3中的内容进行输出,因此当我们在主程序OB1中了段的加法,*二*三段在没有的情况下就跟着将段的一起输出了。2 先赋值后使用
那么该如何避免这种情况的发生呢?这里我们就一定要用到先赋值后使用的方法,来避免这种情况的发生。那么怎么使用才算是先赋值后使用呢?其实非常简单,就是一定要保建立好的本地数据时时刻刻都被占用,这个方法让我总结就是一个萝卜一个坑,先来先占,后到的萝卜PLC会自动给他分配别的本地数据区的位置,这样就不会出现上面那种相互干扰的情况出现了。那么TEMP区的本地数据怎么才算被时时刻刻都被占用呢?下面我们还是用这个加法的程序给大家举例。我们要做的只是把图 1-3中的常开触点start和接口start一并删除即可,删除后如图 2-1所示。
图 2-1
那么为什么我们只需要将段加法指令的常开触点删除就可以达到先赋值后使用的效果呢?其实大家可以仔细想一想,当加法指令前有常开触点的时候,如果当这个常开触点是断开的时候我们这个加法指令是不进行计算的,当不进行计算的时候本地数据add3就不处于被占用的状态,达不到时时刻刻都被占用的效果,而当我们把这个常开触点删除后add3就不存在不被占用的情况了,换句话说就是现在add3已经达到了被时时刻刻占用的效果了,这就是先赋值后使用,由图 2-2可见使用了先赋值后使用以后就不会再出现输出相互干扰的情况了。
图 2-2
SIEMENS西门子模块代理商|6ES7288-3AM06-0AA0 SIEMENS西门子模块代理商|6ES7288-3AM06-0AA0