用C# 的编程风格, 实现博途的定时事件

本文探讨如何在编程中合理使用形参,尤其是在函数和区域控制中,比较了fc和fb的使用差异,提倡使用`=`操作而非`if`来避免清空问题。还强调了在使用if-else时的注意事项,提供了电机程序的重构示例。重点在于内存管理与逻辑清晰度的提升。

总体思路: 将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改写电机程序

但是一个输出,一个 := 就够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值