S7_SCL定时器S_ODT的使用

本文讲述了在西门子S7-300PLC中使用SCL编程语言遇到的问题,如定时器T10的输出格式和如何在SCL中编写打开/关闭定时器的函数,以及与博图软件的兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随便记录一下踩的坑……

用于西门子S7-300PLC(这机器的年龄都快赶上我了……)

官方文档给出了一个使用示例:

在这里CurrTime是自己定义的定时器名称,T_NO:T10中的T10是不用进行单独定义的,这个定时器没法像直接梯形图的S_ODT一样使用BCD输出,尝试了一下,输出好像是16进制?就是BI输出。但是不影响计时,只影响我查看具体时间……

FUNCTION FC1 : VOID

// Block Parameters
VAR_INPUT
    // Input Parameters
    //输入期望的接通时间和关闭时间
    OPENTIME:S5TIME;
    CLOSETIME:S5TIME;
END_VAR

VAR_IN_OUT
    // I/O Parameters
END_VAR

VAR_OUTPUT
    // Output Parameters
    OUTPUT:BOOL:=FALSE;
    
    //T1TIME:WORD;
    //T2TIME:WORD;
END_VAR

VAR_TEMP
    // Temporary Variables
    TI1:S5TIME;
    TI2:S5TIME;
    RESET:BOOL;
    TI1Q:BOOL;
    TI2Q:BOOL;
END_VAR

    // Statement Section
    RESET:=FALSE;
    IF (NOT RESET) THEN
        //TI1:=S_ODT(T_NO:=T0,S:=(NOT RESET),TV:=T#5S,R:=RESET,Q:=TI1Q,BI:=T1TIME);
        TI1:=S_ODT(T_NO:=T0,S:=(NOT RESET),TV:=CLOSETIME,R:=RESET,Q:=TI1Q);

        IF TI1Q THEN
            OUTPUT:=TRUE;
            //TI2:=S_ODT(T_NO:=T1,S:=(NOT RESET),TV:=T#5S,R:=RESET,Q:=TI2Q,BI:=T2TIME);
            TI2:=S_ODT(T_NO:=T1,S:=(NOT RESET),TV:=OPENTIME,R:=RESET,Q:=TI2Q);
            IF TI2Q THEN
                RESET:=TRUE;
                OUTPUT:=FALSE;
            END_IF;
        END_IF;
    END_IF;
    
    
END_FUNCTION

比如这个例子(还有CSDN居然没有SCL代码框)

SCL代码中//表示注释

:=表示赋值,

:表示定义

然后就可以编译+下载!!要下载到虚拟机中,要不然会报错无法运行。

上面的代码就是下图程序段2,程序段1是梯形图翻译……

最后,我看很多教程给了#IEC的形式,我不知道为什么,我的无法使用。之所以不用博图,纯粹是电脑太破跑不起来……

其实用代码和梯形图在这个中没啥区别的感觉,但一旦涉及PID啥的,SCL还是挺有优势的……虽然我还写不出来(哭) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值