加载中…
个人资料
工控老鬼-
工控老鬼-
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,572,255
  • 关注人气:3,865
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【西门子S7-300PLC 编程 】该死的 FC+Temp

(2014-08-11 18:00:41)
标签:

s7-300

s7-400

工控老鬼

启程自动化培训

西门子plc

分类: 启程PLC培训

【西门子S7-300PLC <wbr>编程 <wbr>】该死的 <wbr>FC+Temp

 

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不能自锁!

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

 


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

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

我使用TEMP只有一个原则:

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

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

 

对TEMP的认识都有问题!

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

------------------------------------------------------------------------------------
关注老鬼微信:hispeed 【一起学习技术一起感悟人生】

启程自动化培训,专注于西门子控制系统、PLC、系统集成技术培训

启程自动化培训,相信专注的力量。

网站:http://www.gongkong8.com/ 电话:0755-85292922   

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有