plc内部是怎么动作(plc内部变量有哪些)
导语:1901「万泉河」 细扒一下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的写操作,在下一次调用中被继承下来了。
然后把程序尽量往复杂里去做:
SBR0复制为SBR1,并在OB1中同样调用,并与SBR0的调用逐个间隔。建立SBR2,实现同样数据功能的基础上,加入对SBR0, SBR1的多次调用。OB1中重复调用多次SBR2SBR1中对MW4的操作改为MW6运行监控,可以看到,得到的数值很快就混乱起来了, 规律难以发现了。所以就不截图了。
但可以知道,对于嵌套式的调用, CPU是保存了不同的数据区的。 即所谓的堆栈功能。
再做一个程序,管脚和SBR0一样,但逻辑中不写任何内容。
OB1调用时, 把O1管脚送到QW0。
运行中发现,QW0的输出状态动起来了!而且与调用的位置相关。
证明,在S7-200中, 函数块的输出区,也是被当作TEMP区管理的。 会受到上一个函数的运行结果的影响。
对于TEMP变量区域,打一个比方,就好比你外出穷游住一个低档小旅馆,这个旅店住的客人时多时少,但店家不负责给你打扫卫生。所以你住进来需要先自己打扫。 在淡季的时候,你早晨离店,第二天晚上回来再入住,期间没有别的客人来住过,所以近来后还是你走的时候的样子。所以你不需要大扫除,自己继续住也挺舒服。 而如果在旺季,你晚上回来的时候,就会发现别人住过了,屋里床上尽是别人折腾过的垃圾。 你还能忍受直接睡下吗?
所以,建议刚做PLC行业的新手,如果对TEMP属性不够明确, 不妨在程序块的开始时,把所有TEMP变量清下0。语法上一定没有错误,所以对正确的程序没有影响。但你错误的程序可能就会提前暴露出来了。
不必等到旺季。
本文内容由小涵整理编辑!