CPU315-2PN/DP 在程序中的一个FC块中增加一个Temp变量,下载该FC后不起作用

CPU315-2PN/DP 在程序中的一个FC块中增加一个Temp变量(bool),下载该FC后新增加的那个Temp区布尔变量不起作用
删除这个Temp变量,替换为一个M100.0,下载该FC块后逻辑起作用。
增加的那个Temp变量逻辑是正确的,如何才能让他起作用呢,我是在OB1中调用的这个修改的FC,我把OB1也传了一遍也不起作用。怎么才能让FC中新增加的temp变量起作用呢?难道要重新传整个CPU站?我不想让CPU陷入stop状态

问题补充:
补充一下,我对FC FB 临时存储堆栈temp区 以及stat变量的定义以及各自区别是了然的,而且不会用错
再一个,我新增加的这个temp变量只用在这个FC中,而且是中间变量,是先赋值后使用的,见附图(注意图中M632.1都要替换为#temp,而且整个工程仅有这三处使用了#temp)

图片说明:

CPU315-2PN/DP 在程序中的一个FC块中增加一个Temp变量,下载该FC后不起作用   

最佳答案

1、首先,这个TEMP变量的理解。这个只是临时变量。只能用于函数内部中间变量(区域数据区L),不参与参数传递,临时变量在函数调用时生效,函数执行完后临时变量区的数据释放,所以临时变量不能存储中间数据。

2、你用的M100.0这个变量,对整个项目都是有作用的。
3、你可以利用FB块当中的STAT静态变量来实现你想要的功能!
4、避免下载的时候出现停机,可以在项目当中插入空的组织块:
OB80\OB81\OB82\OB85\OB86\OB100\OB121\OB122
这些组织块的功能你看看:
《OB组织块的说明书》
http://www.google.com.hk/url?sa=t&rct=j&q=OB%E7%BB%84%E7%BB%87%E5%9D%97%E7%9A%84%E8%AF%B4%E6%98%8E%E4%B9%A6&source=web&cd=1&ved=0CCMQFjAA&url=http%3A%2F%2F58.193.0.20%2Fec%2Fc23%2Fdl%2Fxxzl%2F%25E7%25BB%2584%25E7%25BB%2587%25E5%259D%2597%25E4%25BD%25BF%25E7%2594%25A8%25E8%25AF%25B4%25E6%2598%258E.pdf&ei=UR79Tt2ADKmUiQfCvbm7AQ&usg=AFQjCNFVWqoEoJlj_13vKzvxsteObEEQlA

问题的补充:
  看了你的附图,感觉问题出在你的程序编制上面。当你换成临时变量。你程序的M632.1的置位条件没有显示出来。当置为条件满足后,这个M632.1置位,延时一段时间又复位。这个M632.1是一个固定的存储区。当你换为临时变量后,上个扫描周期执行正确,但是再下一个扫描周期中,你的置位条件满足后,这个临时变量的存储区的内容已经变化了。这个时候譬如说里面的内容变为0,你置位也没用。导致了逻辑上面计算处理错误。
  你先赋值后调用是对的。但是你赋值的条件不能改变。不能运行过程中,条件满足了,再赋值。下个扫描周期,条件又满足了 再赋值,这样临时变量的作用就不能正常的发挥!个人拙见。

提问者对于答案的评价:
左传解释的太传神了,我也做了实验,确实我置位那个临时存储变量的条件只通一次,也就是说临时存储变量在延时时间内的所有调用都是自保持的,这种逻辑用L存储区的话会造成逻辑混乱。
同时,阿鸣推荐的《Step7编程常见错误.pdf》这本册子非常有用,为我解答了许多困惑,在这里一并感谢哦!
对于L堆栈下列用法都是错误的:
1、将临时变量用于上升/下降沿指令
2、将临时变量用于自保持逻辑
3、临时变量未在所在程序段中赋值,直接使用
通过读Step7编程常见错误.pdf,解答的我另一个问题,做过一个项目,用4台FM353控制4台伺服放大器,用4个FC分别控制4台FM353. 测试的时候只调用一个FC,里面用的L存储变量是先使用后赋值的,也没出现问题。但是上实际机器的时候,4个FC都调用,因为4个FC的逻辑是一样的,L变量的位置也一样,电机动作就都出现了问题!后来还是把这些L都替换成DB区了。现在看原因是在OB1里面调用的这4个FC,他们的L区指针是相同的,造成了逻辑的混乱。这就说明先赋值后使用的重要性了!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc250462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 下午5:34
下一篇 2018年12月2日 下午5:34

相关推荐