本以为升级版的200 smart 有了FB块,不会像子程序那样不能用沿指令(多次调用的子程序,如果只调用一次是可以的)。结果,还是不能用。
手册中的原话:
“在同一周期内多次调用功能块时,不应使用上升沿、下降沿、定时器、ALT、ALTP 和计数器指令。”
那我在一个扫描周期中,只调用一个FB实例行吗?不行。
执行结果是一直触发。

其中“启动”是公共变量。我试着将它放到 Static变量中也不行。
所以得出的结论是:当有多个FB块实例的时候。FB块中不能使用沿指令。
那怎么能实现沿指令的功能呢?
我的方法是:在FB块中建立一个Static变量用来保存其上一个状态。使用时,如果上一个状态是1,现在的是0,就是下降沿;反之,上一个状态是0,现在状态是1就是上升沿。
亲自测试,有效。
为什么不能在FB块中使用沿指令呢?
我想应该是将上一次的扫描结果,存放到某个标志位中,这块内存只是程序访问,用户访问不到。而这个标志是公共的,不是每个FB实例所独有的。
我没找到更权威的解释。
欢迎各位不吝赐教。