总体思路: 将static 变量当做 字段
Input output 当做属性
内部程序只使用字段, 用属性接收外部数据
REGION 字段与属性
#_restartCTU总 := #_restartCTU内 OR #RestartCTU外;
#_restartCTU外 := #RestartCTU外;
#_start := #Start;
#Output2 := #_output2;
#Output1 := #_output1;
END_REGION
REGION 主程序
IF #_start THEN
#IEC_Counter_CTU0_Instance(CU := "Clock_5Hz",
R := #_restartCTU总,
PV := 20,
Q => #TmpQCTU0,
CV => #TmpCVCTU0);//CV 当前计数值
#_output1 := #TmpCVCTU0;
IF #TmpQCTU0 THEN
#_output2 += 1;
#_restartCTU内 := 1;
END_IF;
#IEC_Timer_TON0_Instance(IN := #_restartCTU内,
PT := t#0.5s);
IF #IEC_Timer_TON0_Instance.Q THEN
#_restartCTU内 := 0;
;
END_IF;
END_IF;
IF #_restartCTU外 THEN
#_output1 := 0;
#_output2 := 0;
;
END_IF;
END_REGION



测试fc 与fb 的scl stl 工作站状态
1,用input output 形参时,fc,fb结果不同。如果用实参,则效果相同, 这是因为Fc的形参没有占用内存, 会被清空
2,使用fb时候,条件消失(mov,if),不会清空形参输出结果,fc会清空。所以使用形参做函数复用时候,尽量用:= 而不是if,即使if,也要写全else。
3,在使用fb时候,输出q天然带自锁,而fc时则不
:= 可以指定一个q的两个状态。 if 只能指定q一个状态,还要用else规定第二个状态
结论:在使用if时,无论fb,fc都要写else。如果实在要写设备逻辑,则需要一个输出配一个if else,最后一个else最好返回一个int,用来接收错误类型。
用if else改写电机程序
但是一个输出,一个 := 就够了。
本文探讨如何在编程中合理使用形参,尤其是在函数和区域控制中,比较了fc和fb的使用差异,提倡使用`=`操作而非`if`来避免清空问题。还强调了在使用if-else时的注意事项,提供了电机程序的重构示例。重点在于内存管理与逻辑清晰度的提升。
3174

被折叠的 条评论
为什么被折叠?



