接触西门子PLC也十多年了,长久以来调用FB功能块的时候一直的做法就是在一行程序中同时调用两三个同样的FB,以便同时看多个调用的执行情况。今天在调用一个比较复杂的程序时发生了异常,程序内的上升沿触发不工作,还不是所有调用FB都不工作,只有部分FB执行不正常,这就排除了FB本身的问题。经过仔细核对输出输出接口发现没有问题,最后把并行调用的FB改成一行程序只调用一个问题解决了。
每个FB块都有一个EN输入和ENO输出,我一直以为只要EN为1则ENO也同时为1,所以每行程序调用多个FB和只调用一个FB没有区别。但是发生了今天的问题我才去搜索相关信息,发现ENO只在程序执行正常结束后才使能,那么区别就出现了:同一行第一个FB是一直使能的,但在第一个FB的执行过程中第二个FB不会使能,在第一个FB执行正常后第二个才使能。如果FB中没有边沿触发可能也不会影响什么,所以这么些年也没有发现程序异常。但是如果有触发就暴露问题了,第二个FB中的周期边沿触发就是不工作。
同样的做法我在使用AB的PLC时没有发现问题,不知道是不是两家对于ENO的处理不一样呢?