随便记录一下踩的坑……
用于西门子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还是挺有优势的……虽然我还写不出来(哭)