今天来讲下scl两个关键的点

一、按键事件

比如地址I0.0是某个按钮的状态,他只有True和False两个状态,所以我们要获得按下事件需要我们自己模拟。

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

#LastKey := "Btn1";

这样通过对#KeyPress判断是否为True即可获得一次点击事件,相当于 |P|

把上一次的存起来,然后判断按下,如果你想把按键放在松开时也可以。

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

二、定时器

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

我们写程序的只需要一个计时器就好了,不需要你带这么多乱七八糟的逻辑,我们自己决定到时间了干嘛就好了。

1)     使用TON TORN

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

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

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

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

"IEC_Timer__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 += ;

END_IF;

#TT := "Clock_1Hz";

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

#LastKey := "Btn1";

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

    #TurnOn := TRUE;

    #TurnOff := FALSE;

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

END_IF;

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

    #TurnOn := FALSE;

    #TurnOff := TRUE;

    #Count := ;

END_IF;

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

    "Light1" := TRUE;

    IF #Count >=  *  THEN

        "Light2" := TRUE;

    ELSIF #Count >=  THEN

        "Light3" := TRUE;

    END_IF;

END_IF;

IF #TurnOff THEN

    "Light1" := FALSE;

    IF #Count >=  THEN

        "Light2" := FALSE;

    ELSIF #Count >=  THEN

        "Light3" := FALSE;

    END_IF;

END_IF;

3) 时间函数

其实PLC里面本来也有很多时间函数,比如获取当前机器时间,比较时间差等,我们完全可以很灵活的去使用这些方法,变得和编程无异,这里就不介绍了

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

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

以后会继续挖掘SCL的写法,教大家SCL能代替梯形图的写法,做到是个程序员就无门槛

暂时告一段落

最新文章

  1. 在sql语句中使用 xml for path 格式化字符串的方法总结
  2. 第 29 章 CSS3 弹性伸缩布局[上]
  3. MongoDb 聚合报错
  4. 《java版进制转换》
  5. C语言排序算法
  6. 【nginx运维基础(5)】Nginx的location攻略
  7. MEAN栈开发
  8. PHP中生成验证码
  9. LeetCode 16. 3Sum Closest. (最接近的三数之和)
  10. L342 Air Pollution Is Doing More Than Just Slowly Killing Us
  11. 字符串类型的日期转化为Date类型
  12. JSON构造/解析(by C)---cJSON和json-c
  13. MySQL学习笔记--启动停止服务
  14. RN 上传文件到以及上传文件到七牛云(初步)
  15. L1-056 猜数字
  16. 杭电oj2000-C语言
  17. Android开发之五大布局篇
  18. 封装7z软件实现批量文件或目录压缩
  19. NRF24L01通信频率
  20. scalac:cannot connnect to compile server(idea 编译scala)

热门文章

  1. CSS学习总结4:派生选择器学习总结
  2. hbase-基础架构
  3. 搭建RESTful API来使用Fabric Node SDK 开篇
  4. idea连接操作数据库
  5. delphi三层结构常出现的问题和解决方案
  6. C#sealed和final
  7. 差分模版题(需理解才明白)AT2442 フェーン現象 (Foehn Phenomena)
  8. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
  9. php memcache 基础操作
  10. 设计模式之观察者模式(c++)