西门子PLC SCL语言开发学习笔记(二)

 

 

今天来说下scl两个关键的点程序员

 

1、按键事件

好比地址I0.0是某个按钮的状态,他只有True和False两个状态,因此咱们要得到按下事件须要咱们本身模拟。编程

#KeyPress := "Btn1" AND NOT #LastKey;函数

#LastKey := "Btn1";spa

这样经过对#KeyPress判断是否为True便可得到一次点击事件,至关于 |P|code

把上一次的存起来,而后判断按下,若是你想把按键放在松开时也能够。blog

由于大多数事情都是用按键触发的,掌握这一点才能开始跑代码。事件

 

 

2、定时器

PLC在梯形图中使用定时器很困难,好比TON  5秒,须要输入一直保持True,持续5s后输出变为True,TOF则须要输入从True变成False,而后持续5秒后输出False,自带各类逻辑,一旦碰到复杂的条件判断头都晕了,我是只能作到间隔时间打开几个灯,但要作另外一个按钮还能间隔关上就不会了。ast

咱们写程序的只须要一个计时器就行了,不须要你带这么多乱七八糟的逻辑,咱们本身决定到时间了干吗就行了。class

 

1)     使用TON TORN变量

使用TON很简单,让一个变量保持True,而后判断输出是否时间到了,时间到了既能够作事情了,同时让输入变为False。

 

TORN则还含有Reset功能,他能累计计时,同时能取到计时了多久,下面这个程序展现了一开始就给TimerStart设置为True,开始计时并变灯的状况。

 下面是代码块,不要忘了这是被循环不断执行的,大概功能是第五秒打开一个灯,第10秒再打开一个,到15秒重置, 为了代码简单理解就不加各类为了严谨的判断了

#TimerStart := TRUE; // 随便打开一下,就不写事件了

"IEC_Timer_0_DB".TONR(IN := #TimerStart,

                     PT := T#15S,  // 计时15秒

                     Q => #TmpOut, //计时完毕,咱们不去用这个

                     R:= #Reset,

                     ET => #Time1);//  ET为取出计时了多久

IF #Reset THEN

    #Reset := FALSE;

END_IF;

 

IF #Time1 >= T#5s THEN

    "Light1" := TRUE;

END_IF;

 

IF #Time1 >= T#10s THEN

    "Light2" := TRUE;

END_IF;

 

IF #TmpOut THEN

    "Light1" := FALSE;

    "Light2" := FALSE;

    #Reset := TRUE;

END_IF;

 

 

 

2)时钟存储器位

 

首先右键PLC进入属性

找到时钟存储器位

 

咱们把地址放到100那里去,这样子这几个存储器里,就会有震荡,不断在True  False之间来回变化,比图1HZ会在一秒的开始变为True,到一半变为False,再下一秒开始变True,经过他的变化就能计时了

 

下面这个程序,再按下按钮1后亮一个灯,过5秒再亮一个,再过5秒再亮一个,关闭时也是间隔灭灯,不考虑打开过程当中关闭等状况。

 

 

IF #TT <> "Clock_1Hz" THEN //一个不断根据震荡时间增长的Count 计数器

    #Count += 1;

END_IF;

#TT := "Clock_1Hz";

 

#KeyPress := "Btn1" AND NOT #LastKey;

#LastKey := "Btn1";

 

IF #KeyPress AND NOT "Light1" THEN // 开灯事件

    #TurnOn := TRUE;

    #TurnOff := FALSE;

    #Count := 0;  //重置计数器

END_IF;

 

IF #KeyPress AND "Light1" THEN // 关灯事件

    #TurnOn := FALSE;

    #TurnOff := TRUE;

    #Count := 0;

END_IF;

 

IF #TurnOn THEN // 持续处理开灯

    "Light1" := TRUE;

    IF #Count >= 5 * 2 THEN

        "Light2" := TRUE;

    ELSIF #Count >= 20 THEN

        "Light3" := TRUE;

    END_IF;

END_IF;

 

IF #TurnOff THEN

    "Light1" := FALSE;

    IF #Count >= 10 THEN

        "Light2" := FALSE;

    ELSIF #Count >= 20 THEN

        "Light3" := FALSE;

    END_IF;

END_IF;

 

 

3) 时间函数

其实PLC里面原本也有不少时间函数,好比获取当前机器时间,比较时间差等,咱们彻底能够很灵活的去使用这些方法,变得和编程无异,这里就不介绍了

 

 

结语:咱们能够识别按钮事件,而后得到了好用的计时器后,scl的逻辑处理剩下的就都是写代码了和调方法了,没有什么能难倒咱们程序员了

SCL逻辑比梯形图更严谨明白,复杂逻辑控制更简单,是咱们程序员的好帮手。

之后会继续挖掘SCL的写法,教你们SCL能代替梯形图的写法,作到是个程序员就无门槛

暂时告一段落

相关文章
相关标签/搜索