S7-300 STAT与TEMP用法 点击:12735 | 回复:8



夜猫353

    
  • 精华:0帖
  • 求助:17帖
  • 帖子:34帖 | 151回
  • 年度积分:89
  • 历史总积分:21374
  • 注册:2012年3月10日
发表于:2013-09-07 20:05:22
楼主

问一下S7-300 FB块里面的STAT与TEMP这个变量怎样用一个小案例来证实一下他们的区别啊?求指教???一个是静态变量、一个是临时变量,怎样举一个简单例子来区别这两个,我自己也试过了,感觉是一样的,没变化啊!理论我是明白了,就是实际操作没玩明白,麻烦各位,谢谢






楼主最近还看过



字字实在

  • 精华:5帖
  • 求助:12帖
  • 帖子:219帖 | 1207回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2013-09-08 11:14:55
1楼

 

临时变量就是在本函数内有效,函数外无效,比如LB0,在fc1采用LB0,把10赋给LB0,那么在fc2中LB0并不是10,可以继续采用LB0,并且无任何影响。

 

静态变量就是在函数外也起作用,比如在fc1中把10赋给MB0,那么fc2中MB0也是10,所以MB10最好就不要存储其它的数值了。

 

楼主可能是在同一个函数下试临时变量和静态变量的,这样是试不出来的

夜猫353

  • 精华:0帖
  • 求助:17帖
  • 帖子:34帖 | 151回
  • 年度积分:89
  • 历史总积分:21374
  • 注册:2012年3月10日
发表于:2013-09-12 11:35:26
2楼

回复内容:

对: 字字实在   临时变量就是在本函数内有效,函数外无效,比如LB0,... 内容的回复!


 厉害,一语就中,谢谢

西门子工控技术

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 124回
  • 年度积分:0
  • 历史总积分:886
  • 注册:2010年5月26日
发表于:2013-09-12 11:52:51
3楼

STA变量只有FB里面才有的,在FC,OB里面是没有的;

当调用FB时产生背景块时,STA变量就产生在DB块里面了,所以它是一直存在的,固定地址的。

TEMP变量是所有的块都可以有的,是系统运行时,系统临时分配给功能块的。也就是说,这时分配给功能块1,当功能块1运行完后,可能又分配给功能块2了,也就与C语言的函数内定义的变量有点相似。

例如:

L 90

T #TMP

这时TMP的值是90;

但当功能块执行完后,可能这个TMP的值就不是90了,当然要看内存的多少,内存大的话可能没那么快被覆盖。

lyjhf2006

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 29回
  • 年度积分:0
  • 历史总积分:124
  • 注册:2012年7月27日
发表于:2013-09-17 17:18:14
4楼

西门子这一点比其他的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不能自锁!

如果FC块, 请你使用全局变量(标志位和数据块)来存储数据,实现自锁!
如果FB块, 除了全局变量之外, 你也可以使用静态变量来存储数据,实现自锁!


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

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

我使用TEMP只有一个原则:

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

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

对TEMP的认识都有问题!

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


lyjhf2006

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 29回
  • 年度积分:0
  • 历史总积分:124
  • 注册:2012年7月27日
发表于:2013-09-17 17:18:51
5楼

如果在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值也不会发生改变;结果是程序没有反应。

绝地小天

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 6回
  • 年度积分:87
  • 历史总积分:738
  • 注册:2017年12月06日
发表于:2020-04-12 22:02:17
6楼


回复内容:

对: lyjhf2006 西门子这一点比其他的PLC都灵活,FB的DB作为FB的... 内容的回复!

-------------------------

但是西门子的系统不会对临时区进行清零,


临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失


不矛盾???

function888

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 732回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2007年12月01日
发表于:2020-05-15 22:21:07
7楼

学习一下谢谢分享

高级电工

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 92回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2018年12月13日
发表于:2020-05-16 13:53:02
8楼

这么好的资料。应该下载。多谢


热门招聘
相关主题

官方公众号

智造工程师