浔之漫智控技术(上海)有限公司总部
主营西门子模块 , PLC模块 , 变频器模块 , 触摸屏模块
黑河西门子模块一级代理商

黑河西门子模块一级代理商黑河西门子模块一级代理商黑河西门子模块一级代理商

浔之漫智控技术上海有限公司 具备以下产品优势,西门子可编程控制器,西门子触摸屏,西门子工业以太网,

西门子数控系统,西门子高低压变频器,西门子电机驱动等等。西门子S7-1500 6ES7510-1SK03-0AB0。西门子S7-1500 6ES7512-1SM03-0AB0

西门子S7-1500 6ES7511-1FL03-0AB0西门子S7-1500 6ES7513-1FM03-0AB0

西门子S7-1500 6ES7515-5FN03-0AB0 

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


图 1-3

在这个程序中我们可以看到,加法的运算结果是先存放到本地数据add3中然后再由add3传送到输出接口add3_3


图1-4

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

微信截图_20221109160617.png2 先赋值后使用

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


图 2-1

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


图 2-2


发布时间:2023-11-04
展开全文