发布于 2011-06-13 06:45:58
17楼
上升沿、下降沿检测指令的功能需要至少两个扫描循环周期才能完成,即通过比较前后两个扫描周期同一BOOL变量或RLO的状态来判断是否是上升沿、下降沿。
同一级的逻辑块的临时局部数据区是公用的,结束对FB1的调用后,它的临时变量的值可能被FC2的临时变量覆盖掉,网友youhm的测试很说明问题。因此用块的临时变量作上升沿、下降沿检测指令的边沿存储位是极其危险的,稍有不慎,可能会出现灾难性的后果。
边沿存储位的确允许使用L区,但是请注意,块的局部变量区(L区)中有静态变量和临时变量,允许用L区并不说明用临时变量作边沿存储位的合法性。
编程的最高境界是在FB、FC中全部使用局部变量,不使用像M这样的全局变量。这样的块不需作任何修改,就可以移植到其他项目。为此可以使用功能块的静态变量来作上升沿、下降沿检测指令的边沿存储位。这样不会出现使用临时变量带来的问题,也解决了块的可移植性问题。
楼主既然知道“使用这样的程序有很多注意事项的”,“应用不好确实有很多副作用,还有就是应用的场合”,你明明知道这条路上有地雷,还叫人走这条路,并且又不说明怎样才不会踩到地雷,这有点不厚道。我怀疑你自己也不清楚要注意些什么(如果清楚就不会有这篇帖子了),请你当心自己不要踩到地雷了。
追求完美