scl语言用plc脉冲做定时器_scl语言用plc脉冲做定时器_西门子PLC SCL语言开发学习笔记(二)…

scl语言用plc脉冲做定时器_scl语言用plc脉冲做定时器_西门子PLC SCL语言开发学习笔记(二)…今天来讲下scl两个关键的点一、按键事件比如地址I0.0是某个按钮的状态,他只有True和False两个状态,所以我们要获得按下事件需要我们自己模拟。#KeyPress:=”Btn1″ANDNOT#LastKey;#LastKey:=”Btn1″;这样通过对#KeyPress判断是否为True即可获得一次点击事件,相当于|P|把上一次的存起来,然后判断按下,如果你想把按键放在松开时…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

今天来讲下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_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进入属性

67772

找到时钟存储器位

67772

我们把地址放到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 * 2THEN

“Light2” :=TRUE;

ELSIF #Count>= 20THEN

“Light3” :=TRUE;

END_IF;

END_IF;

IF #TurnOff THEN

“Light1” :=FALSE;

IF #Count>= 10THEN

“Light2” :=FALSE;

ELSIF #Count>= 20THEN

“Light3” :=FALSE;

END_IF;

END_IF;

3) 时间函数

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

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

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

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

暂时告一段落

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185140.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WPFAvalonDock基本用法

    WPFAvalonDock基本用法本文简单介绍AvalonDock2.0基本用法,下载AvalonDock2.0dll及主题http://avalondock.codeplex.com/AvalonDock基本类介绍DockingManager:停靠管理类,xaml中AvalonDock的根节点LayoutRoot:布局根节点,有四个属性LeftSide,RightSide,TopSide,ButtomSide展示四

    2022年7月20日
    15
  • grid web_DataGrid

    grid web_DataGrid首先安装Infragistics.NetAdvantage.for.ASP.NET.2007.Vol.2,然后在选择项中添加UltraWebGrid,使用方法如下:1、添加“总计”值绑定完数据后,添加如下代码UltraWebGrid1.Rows.Add();UltraWebGrid1.Rows.Add();…

    2022年10月6日
    0
  • 构造哈夫曼树的算法_哈夫曼树的应用数据结构

    构造哈夫曼树的算法_哈夫曼树的应用数据结构一、什么是赫夫曼树给定n个权值作为n个叶子节点,构造一课二叉树,若该树的带权路径长度和(wpl)达到最小,称这样的二叉树为最优二叉树,也就是赫夫曼树。要理解这句话,我们需要了解几个关键词:路径:

    2022年8月16日
    3
  • idea创建java项目_使用IDEA创建java项目(hello word)

    idea创建java项目_使用IDEA创建java项目(hello word)前提:已安装好jdk,配置好环境变量。我使用的是java8首先在自己的D盘下建一个文件夹,用来存放我们待会新建的项目,我创建了IdeaProject:1,第一步打开idea2,第二步选择创建java项目,并选择自己的jdk(我自己本地已经配置了所以有),没有可以点击new去自己的安装目录下找,一般默认安装C:\ProgramFiles\Java,然后选择next下一步3,第三步将“Creat…

    2022年7月9日
    54
  • 利用 SSDP 协议生成 100 Gbps DDoS 流量的真相探秘「建议收藏」

    利用 SSDP 协议生成 100 Gbps DDoS 流量的真相探秘「建议收藏」原文地址https://www.4hou.com/technology/5979.html上个月我们分享过一些反射型DDoS攻击数据,SSDP攻击的平均大小是12Gbps,我们记录的最大的反射式DDoS攻击是:1.30Mpps(每秒数百万个数据包)2.80Gbps(每秒数十亿位)3.使用940k反射器的IP几天前,我们注意到了一个不寻常的SSDP超级放大情况的发生…

    2022年10月10日
    0
  • vmware虚拟机联网设置(win10自带虚拟机安装win7)

    1.右键“我的电脑”,选择“管理”,双击进入2.找到“”服务“”这个选项,双击进入服务3.找到如下两个服务,将这两个服务启动4.打开VMware软件,打开虚拟机的编辑=>虚拟网络配置器5.点击更改配置6.配置如下图所示,配置完后,点击确定7.随便点击一台已有虚拟机,在右侧的弹框中,选择编辑虚拟机配置8.配置如下图所示,网络适配器=>选择自定义特定虚拟网=…

    2022年4月12日
    97

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号