技术论坛

 【万泉河】 细扒一下PLC内部变量TEMP

返回主题列表
作者 主题
万泉河
至圣

经验值:28644
发帖数:10887
精华帖:131
楼主    2019-07-06 08:32:48
主题:【万泉河】 细扒一下PLC内部变量TEMP

【万泉河】细扒一下PLC内部变量TEMP

 

这注定是一篇得不到具体结论的文章。

 

所以,你如果对PLC的内部TEMP变量非常懂,那你整篇文章都没必要看,没有意义。

 

而如果你不是很懂,那你不妨和我一样,静下心来,一步步地做一遍,仔细观察、思考其中的规律。了解其性质和使用规则。

 

关于TEMP变量的使用规则,原本很简单。就是在PLC子程序中,在使用它的时候,必须先写值而后再读值。

 

程序从上到下,如果发现有先读取值的情况,那十有八九,程序是写错了。有可能暂时运行结果正确,那是因为调用的结构简单,等程序逐渐复杂起来,这里的隐患就会逐渐长成一个脓包,会影响你整个系统的调试。

 

所以,TEMP变量必须先写后读。这是铁律。

 

由于PLC的OB1是重复无穷循环调用的,在每一次函数调用过程中要求TEMP先写后读,所以,也不要指望任何信息从上一次调用传给下一次。

 

但是,尽管是铁律,但总有人要挑战这个铁律,总要不厌其烦地讨价还价,问这个能不能,那个能不能。

 

其中最多的是问上升沿功能使用中间变量。

 

而那个标准的先读后写的应用场景。

 

所以,索性做个程序,来测试下TEMP变量的特性。

 

程序中,前半部,把TEMP的变量值读出来,送到OUT管脚显示。

后半部,通过累加计算得到数值,赋值给TEMP,同时也送到OUT管脚显示。

 

程序用S7-200 SMART测试。

 

建立子程序SBR0

 

变量表

 


                         

3个OUT,一个temp,都是WORD数据类型

 


 


第一段把temp数值送到O1,

第二段,对MW4进行加1,并送到temp和O2;

 

OB1中调用这个SBR0多次。

同时为了数值重复稳定,在OB1的开始,对MW4进行了清零。

 

运行的结果:


 


可以看到,上一次对TEMP的写操作,在下一次调用中被继承下来了。

 

然后把程序尽量往复杂里去做:

1,SBR0复制为SBR1,并在OB1中同样调用,并与SBR0的调用逐个间隔。

2,建立SBR2,实现同样数据功能的基础上,加入对SBR0, SBR1的多次调用。

3,OB1中重复调用多次SBR2

4,SBR1中对MW4的操作改为MW6

 

运行监控,可以看到,得到的数值很快就混乱起来了,规律难以发现了。所以就不截图了。

 

但可以知道,对于嵌套式的调用, CPU是保存了不同的数据区的。即所谓的堆栈功能。

 

再做一个程序SBR3,管脚和SBR0一样,但逻辑中不写任何内容。


OB1调用时,把O1管脚送到QW0。

 

运行中发现,QW0的输出状态动起来了!而且与调用的位置相关。

 

证明,在S7-200中,函数块的输出区,也是被当作TEMP区管理的。会受到上一个函数的运行结果的影响。

 

对于TEMP变量区域,打一个比方,就好比你外出穷游住一个低档小旅馆,这个旅店住的客人时多时少,但店家不负责给你打扫卫生。所以你住进来需要先自己打扫。在淡季的时候,你早晨离店,第二天晚上回来再入住,期间没有别的客人来住过,所以近来后还是你走的时候的样子。所以你不需要大扫除,自己继续住也挺舒服。而如果在旺季,你晚上回来的时候,就会发现别人住过了,屋里床上尽是别人折腾过的垃圾。你还能忍受直接睡下吗?

 

所以,建议刚做PLC行业的新手,如果对TEMP属性不够明确,不妨在程序块的开始时,把所有TEMP变量清下0。语法上一定没有错误,所以对正确的程序没有影响。但你错误的程序可能就会提前暴露出来了。

 

不必等到旺季。

 



 


微信公众号:PLC标准化编程,ZHO6371995
lf184452
侠圣

经验值:2440
发帖数:467
精华帖:6
2楼    2019-07-07 20:55:11
精华帖  主题:回复:【万泉河】 细扒一下PLC内部变量TEMP

一些编程的基本概念,搞工控好多不是科班编程出身搞不清楚,建议工控人要想搞好工控编程可以去系统的学习下软件编程,推荐谭浩强的C语言编程先入门,再看一些美系的算法和理念书籍。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。