对于 FC的使用,另一个的常见的错误是对输出的错误处理:导致这个错误的原因还是对FC认识的不清楚。
再次强调:相比较于 FB,FC是一个没有存储空间的逻辑块。
如果没有数据被写至 FC 的 OUT参数,FC将会输出一个随机值!对于 FB, 因为其可以使用背景数据块来存储 OUT参数的数值,即使某次调用没有对 OUT参数进行写操作,OUT参数依然可以输出上一次的旧值。
下面的程序将说明这一点:程序原本目的:
在 OB1中调两次 FC22,将 MW0,MW2作为输入参数,DB1.DBX0.0,DB1.DBX0.1分别作为输出参数赋给 FC22
FC22检测当输入大于 10时,置位输出为 1FC22检测当输入小于-10时,复位输出为 0 FC22的输出的动作死区为-10至 10
此程序乍看是没有错误的,但是,如果 OB1中调用了两次 FC22,而且 MW2位于死区(-10 至10)之间时,MW0的数值改变将不仅仅改变 DB1.DBX0.0的状态,同时会影响输出 DB1.DBX0.1的数值。
故障分析:在上面的例子,OB1中调用了两次 FC22,而且 MW2位于死区(-10至 10)之间时,其输出在FC22没有被赋值,DB1.DBX0.1正常情况下不应当改变数值。
本例中,MW0的数值改变将不仅仅改变DB1.DBX0.0的状态,同时会影响输出 DB1.DBX0.1的数值。如下图。
对于 FC的输出变量,必须要在每次执行 FC时赋给一个确定的值,否则输出有可能会输出一个随机值。下列用法都是错误的:
将输出变量用于上升/下降沿指令
将输出变量用于自保持逻辑
输出变量未在所在程序段中赋值
警告:不要因为在 FC编程中遇到没有对输出赋值,而程序执行正确,就忽略了对 FC输出编程的注意事项,否则将承担这个错误有可能带来的风险。
建议:
用 IN/OUT 变量代替 OUTPUT 变量
不论何时调用块,FC中的OUT参数都必须被赋值。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !