从楼主的描述,看来是刚接触模块化编程遇到很多人都有过的问题。
FB:IEC611131-3 全称 FUNCTION_BLOCK ,具有静态变量能存储运算结果,前提是多地调用需声明不同的存储区(当然也有将FB
当做FC用的)当本次扫描【A:=A+1; 执行完成A=2】 ,再次扫描到该FB时,还能取出上一次存储的运算结果【A:=A+1,这时执
行完成A=3】参与本次扫描继续运算。
FC:IEC611131-3 全称 FUNCTION ,具我以前书本中了解的是没有静态区域只有临时区域(Temp),但现在基于Codesys平台很多
是可以声明静态变量。
FC的静态变量用途还是比较有限,比临时变量(Temp)要用途大,它能等到你的第二次扫描不至于执行到其它的FC时扔掉静态
变量。
但是你说的定时器在FC中为什么多次调用就会出错,就是因为你再多个地方调用了它,但是它又不能存储上一次被调用值。
如果它上一个地方调用的时候条件TON(EN)为TRUE,这个地方调用时的输入条件TON(FALSE),那么定时器的时间就被刷新成0
了,也就可以解释为什么会出错了。如果你硬要用FC做,那只能在一个地方调用。
当本次扫描1完成【TON 当前时间为 10ms ,扫描2 因为条件不满足TON 当前时间变为 0ms,再次回到扫描1完成时与目标值比
较,目标值:20ms,当前值:10ms,所以第一个调用时间到了为什么却不输出。
[此贴子已经被作者于2020/2/23 21:20:38编辑过]