详情

西门子 [S7-300]Step7 FC功能中的Temp变量的学习

来源:上海乔辉工控设备有限公司2022/6/18 8:09:20122
导读:

  西门子 [S7-300]start和driver是外部输入输出接口。

 

       例:如果在TEMP接口中新建一个变量A,数据类型为BOOL,地址0.0

 

       1,正确的FC程序如下:

 

       |  #start  #A

       |--| |---------()

       |       

       |  #A  #driver

       |--|/|---------()

 

       2,错误的例子:

 

       |  #A  #driver

       |--|/|---------()

       |

       |  #start  #A

       |--| |---------()

 

       分析:


       程序的扫描是从上到下。S7 FC中的接口TMEP中的变量必须遵守:先赋值后使用的原则。

 

       1、程序,当start的值从0变为1,A也将从0变为1。扫描到一段程序时,因为A的值已经发生改变,程序将成功扫描到A的常闭触点从1变为0,那么driver线圈将成功得从原来的1改变为0。

 

       2、程序,因为扫描到一段程序的时候CPU没有发现A的值改变。之后A值将一直保持不变,即使start的值从0变为1,A值也不会发生改变;结果是程序没有反应。


       下面是大家的一些心得体会


       西门子这一点比其他的PLC都灵活,FB的DB作为FB的变量的固定存放地址,而Temp则是有系统分配临时区L地址。

       比如:存在FC1,FC2两个功能,它们都有两个Temp,那么当调用FC1时,系统分配L区域地址给FC1的Temp,如分配了LB0,LB1,那么当FC1调用完成后,系统认为LB0,LB1已经不需要,但是西门子的系统不会对临时区进行清零,只是继续分配,当调用FC2时,系统将LB0,LB1重新分配给FC2的Temp,此时如果不遵循先赋值后使用的准则,那么FC2的Temp使用的值将是FC1的Temp的值。

 

       临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。因此, 在PLC扫描运行时, FC块中的临时变量TEMP不能自锁!

 

       TEMP变量不能自锁的原因显而易见:


       每个扫描周期开始时,TEMP变量的值并不像Q或M那样可以保持上个周期的值。除非明确对其赋值,否则它的值是不确定的。


       我使用TEMP只有一个原则:


       一次出现某个TEMP变量,必须是对其赋值(或线圈刷新)的写指令,而不能是读指令。


       如果出现问题,建议使用STAT变量替代。


       对TEMP的认识都有问题!


       我的建议是做逻辑不用TEMP,只在做运算是用TEMP,会省去很多麻烦

 

版权与免责声明:凡本网注明“来源:全球资源网”的所有作品,均为浙江兴旺宝明通网络有限公司-全球资源网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:全球资源网”。违反上述声明者,本网将追究其相关法律责任。 本网转载并注明自其它来源(非全球资源网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

展开全部
相关技术