CODESYS开发教程8-定时、触发和计数

news2024/11/25 1:04:02

今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。

前面一期我们介绍了CODESYS的字符串及其操作。这一期主要介绍CODESYS的定时器及触发的相关功能块特性及用法,注意本文介绍的定时器、触发器和计数器均包含在CODESYS的Standard库中。

一、定时器

CODESYS的计时器功能块有TOF、TON、TP和RTC三种。

1.时间常量

使用定时器首先需要了解CODESYS的时间常量。可以使用TIME常量来操作标准计时器模块。TIME常数的长度为32位,因此分辨率为毫秒。

<time keyword> # <length of time>

<time keyword>:TIME | time | T | t

<length of time>:( <…>d )? ( <…>h )? ( <…>m )? ( <…>s )? (<…>ms)? // ( ...)? 可选

时间单位如下:

D | d:天

H | h:小时

M | m:分钟

s | s:秒

MS | ms:毫秒

注意:

(1)时间常量前面需要加入标识T#,否则不会当做时间处理。

(2)低位的时间常量要符合时间的范围要求,即在前面有更大的时间单位时,分和秒最多为60。

(3)时间常量的给定要按照从大到小的顺序,即天(d)-小时(h)-分(m)-秒(s)-毫秒(ms),颠倒后会报错。

(4)

使用示例:

T1 : TIME := T#14ms;

T2 : TIME := T#100s12ms;   //最大时间单位处允许溢出

T3 : TIME := T#12h34m15s;

timLongest := T#49D17H2M47S295MS; // 4294967295

错误示例:

timIncorrect := t#5m88s;    //低位溢出(秒大于60)

timIncorrect1 := 15ms;        //缺少时间标识T#

timIncorrect2 := t#5ms8d;  //时间单位的顺序错误

此外,时间常数LTIME可作为高分辨率计时器的时间基础。LTIME常数的长度为64位,因此分辨率为纳秒。其使用格式与TIME类似,只是关键词为“LTIME”或“ltime”,还有附加的时间单位:US | us-微秒,NS | ns-纳秒。

示例:

ltim1 := LTIME#888d8h8m8s8ms8us8ns;

ltim2 := LTIME#999m1999999999999ns;

2.TON

具有开启延迟的计时器。

IN:输入,上升沿启动延迟计时器,下降沿重置计数器。

PT:输入,延迟计数器的时间,默认为ms。

Q:输出,IN为FALSE,输出为FALSE;IN为TRUE且延迟时间PT已过,输出为TRUE。

ET:输出,从IN出现上升沿起到Q输出所经过时间。

TON的时序如下图所示:

注意:

(1)TON的输出状态与IN的状态相关。如果延时导通之后IN一直保持为TRUE,则输出Q的值一直为TRUE;如果在延迟开启后IN变为FALSE,则输出变为FALSE。

(2)PT的默认单位为ms,可以使用INT_TO_TIME()函数将INT类型转换为时间类型。

使用示例:延时5s输出

delay : TON ;

delay (IN := TRUE, PT:= T#5s);

out := delay.Q

3.TOF

具有关闭延迟的计时器。

IN:输入,下降沿启动延迟计时器,上升沿重置计数器。

PT:输入,延迟计数器的时间,单位默认为ms。

Q:输出,IN为TRUE,输出为TRUE;IN为FALSE且延迟时间PT已过,输出为FALSE。

ET:输出,从IN出现上升沿起到Q输出所经过时间。

TOF的时序如下图所示:

注意:当IN由FALSE变为TRUE时,输出Q由于FALSE变为TRUE,并开始保持Q输出为TRUE;当IN由TRUE变为FALSE时,捕获到下降沿,开始延迟关闭,输出Q保持为TRUE,直到延迟关闭时间到,输出Q才变为FALSE。IN的高电平需要保持一定的时间才能保证TOF重置成功。

使用示例:延时5s关闭

delay : TOF ;

delay (IN := TRUE, PT:= T#5s);

out := delay.Q

4.TP

脉冲计时器。

IN:输入,上升沿启动脉冲计时器并将Q设置为TRUE。

PT:输入,时间上限。

Q:输出,脉冲信号,IN为上升沿则在PT时间内设置为TRUE。当延迟时间PT已过,则为FALSE。

ET:脉冲计时器启动后所经过时间,单位ms。到达PT后,ET值保持恒定。

TP的时序如下图所示:

4.RTC

计算自给定开始时间以来的经过时间。当PDT设置为DT#1970-01-01-00-00:00或未连接时,此功能块可用作工作小时计数器。

EN:输入,TRUE则将CDT设置为PDT,CDT以秒为单位开始计时,并且只要EN为TRUE,就以CDT返回。FALSE则CDT设置为初始值DT#1970-01-01-00:00:00。

PDT:输入,预设日期和时间。

Q: 输出,只要CDT正在计数则为TRUE,否则为FALSE。

CDT:输出,从PDT以来经过的时间。EN为FALSE时为从DT#1970-01-01-00:00:00以来的时间,即当前日期和时间。

使用示例:返回自2023-01-10-14:00:00以来经过的时间。

RTC(EN:=bFlag, PDT:=DT#2023-01-10-14:00:00, Q=>bOut, CDT=>VarTimeCur);

二、触发器

CODESYS的触发器功能块有下降沿触发F_TRIG和上升沿触发R_TRIG两种。

1.F_TRIG-下降沿触发

检测布尔信号的下降沿。

CLK:输入,待检测的布尔信号。

Q:输出,TRUE为检测到下降沿。

注意:检测到CLK有下降沿(TRUE->FALSE)时变为TRUE,持续一个周期,下一周期变为FALSE。

使用示例:

trig : F_TRIG ;

trig(CLK:= bIn);

bOut:= trig.Q;

2.R_TRIG-上升沿触发

检测布尔信号的上升沿。

CLK:输入,待检测的布尔信号。

Q:输出,TRUE为检测到上升沿。

注意:检测到CLK有上升沿(FALSE->TRUE)时变为TRUE,持续一个周期,下一周期变为FALSE。

使用示例:

trig : R_TRIG ;

trig(CLK:= bIn);

bOut:= trig.Q;

三、计数器

CODESYS的计数器功能块有递减计数器CTD、递增计数器CTU和双向计数器CTUD三种。

1.CTD-递减计数器

CD:输入,检测到上升沿则CV值减1直至为0。

LOAD:输入,为TRUE时则重置计数器,将CV设为初始值PV。

PV:输入,计数器的初始值。

Q:输出,CV为0时输出TRUE。

CV:输出,当前计数值。

使用示例:从100递减计数

decCnt : CTD ;

decCnt (CD:= bIn, LOAD:=bReset , PV:= 100);

bOut := decCnt.Q ;

curCnt := decCnt.CV;

2.CTU-递增计数器

CU:输入,检测到上升沿则CV值加1直至大于等于PV。

RESET:输入,为TRUE时则重置计数器,将CV设为0。

PV:输入,计数器的上限。

Q:输出,CV>=PV时输出TRUE。

CV:输出,当前计数值。最大值为65535(16#FFFF)。

使用示例:从0开始计数,最大1000。

cnt: CTD ;

cnt(CD:= bIn, LOAD:=bReset , PV:= 1000);

bOut := cnt.Q ;

curCnt := cnt.CV;

3.CTUD-双向计数器

CU:输入,检测到CU上升沿则CV值加1。

CD:输入,检测到CD上升沿则CV值减1。

RESET:输入,为TRUE时则重置计数器,将CV设为0。

LOAD:输入,为TRUE时则重置计数器,将CV设为初始值PV。

PV:输入,计数器的初始值或者计数上限。

QU:输出,CV>=PV时输出TRUE。

QD:输出,CV为0时输出TRUE。

CV:输出,当前计数值。

注意:CODESYS中用于PV的数据类型WORD与IEC标准不匹配,IEC标准为PV定义了数据类型INT。

cnt: CTD ;

cnt(CU := bCU, CD:= b,CD RESET := bReset, LOAD:=bLoad , PV:= 1000);

bQU := cnt.QU ;

bQD := cnt.QD ;

curCnt := cnt.CV;

四、结论

定时器和触发器应该说是PLC里面使用频率很高的功能。定时器功能比较好理解,对于初学者需要弄清楚的其实是怎么输入定时时间,以及如何判断定时时间到了。触发器功能主要用来检测信号的变化,需要搞清楚信号持续时间,以及触发后的状态变化。计数器功能也比较好理解,但是实际上用的不是很多(ST里面很多时候都是用变量代替了)。这些功能块都可以在仿真模式下运行,写个小程序仿真跑一下基本就清楚怎么用了^-^。

------------------

原创不易,感兴趣的多支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c-note:字符串常量初始化存放位置

两行代码&#xff0c;分别以数组形式和指针形式&#xff0c;先说结论。 对于字面量"he"的存放位置&#xff1a; 1、数组形式&#xff0c;字面量直接存放进栈给temp处开辟的空间 2、指针形式&#xff0c;字面量"he"是一个常量&#xff0c;在编译之初便存在于…

如何在mac上使用idea做大数据开发

1 软件包下载jdk1.8 (jdk1.8.0_231)idea(包括2018,2019) (ideaIC-2019.3.3/ideaIC-2018.3.5)汉化包:汉化包.rarmaven3.6.3 (apache-maven-3.6)2 jdk的安装第一:把包直接放到自定义目录下第二:配置环境变量a) 打开终端 输入 sudo vi /etc/profile 或者 sudo vi .bash_profile解释…

联合证券|滴滴出行即日起恢复!A股嗨了!券商扛起领涨大旗

A股今天全线走高&#xff0c;沪指涨超1%克复3200点&#xff0c;深成指、创业板指盘中涨超2%&#xff1b;港股午后回落走低&#xff0c;恒生科技指数一度跌超2%。 详细来看&#xff0c;A股方面&#xff0c;两市股指盘中强势拉升&#xff0c;沪指涨超1%站稳3200点&#xff0c;深成…

『速查手册』MIME 多用途互联网邮件扩展

『速查手册』MIME 多用途互联网邮件扩展 文章目录『速查手册』MIME 多用途互联网邮件扩展一、多用途互联网邮件扩展 / 互联网媒体类型二、MIME 命名规则&#x1f60e;三、MIME 类型列表&#x1f349;1)、Type 类型形式2)、Application 应用文件3)、Text 文本4)、Video 视频文件…

elasticsearch(三)-- 理解ES的索引操作

一、前言 上一章我们主要学习了es的几个客户端&#xff0c;那么我们后面也主要通过kibana客户端、HighLevelClient高级客户端这两个来学习es. 这一章的学习我们主要是学习一些Elasticsearch的基础操作&#xff0c;主要是深入一些概念&#xff0c;比如索引的具体操作&#xff0…

三、WEB框架介绍以及设计模式

web框架介绍 什么是web框架 应该叫web应用框架(web application framework)&#xff0c;它是一种开发框架。 通俗点来讲&#xff0c;就是用来开发web应用的程序。 为什么要使用框架来开发 互联网行业流行一句话叫“不要重复造轮子”&#xff0c;特别是对于新手和应用层开发…

day22-JDK新特性

接口中的新特性 接口我们之前已经学过了&#xff0c;那么接口中内部主要就是封装了方法&#xff0c;包含抽象方法&#xff08;JDK 7及以前&#xff09;&#xff0c;默认方法和静态方法&#xff08;JDK 8&#xff09;&#xff0c;私有方法 &#xff08;JDK 9&#xff09;。 接口…

使用Navicat导入和导出sql语句

创建mysql数据库 创建数据库之前&#xff0c;肯定要先连接上数据库&#xff0c;如果不知道怎么使用navicat连接mysql数据库&#xff0c;可以参考之前的文章哦 https://blog.csdn.net/weixin_43860634/article/details/128716733 接下来进入正题 1、首先要双击test &#xff0…

命令注入与dvwa中的Command Injection

一、什么是命令注入&#xff1f;即 Command Injection&#xff0c;是指通过提交恶意构造的参数破坏命令语句结构&#xff0c;从而达到执行恶意命令的目的。此攻击与代码注入不同&#xff0c;因为代码注入允许攻击者添加自己的代码&#xff0c;然后由应用程序执行。 在命令注入中…

用队列实现栈

题目&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;准备工作这题明确说明了需要用队列来实现栈&#xff0c;介于C语言没有队列的库&#xff0c;所以在此之前我们需要用调用之前学的队列&#xff0c;详见队列typedef int QDataType;typedef struct Queu…

Ubuntu上安装 Hadoop 3详细过程(验证+填坑总结)

Ubuntu上安装 Hadoop 3 前提条件&#xff1a; Python 推荐3.8JDK 推荐1.8 解压安装 sudo tar -zxvf hadoop-3.3.0.tar.gz -C /usr/local cd /usr/local sudo mv hadoop-3.3.0 hadoop sudo chown -R hadoop ./hadoop 配置环境变量 vim ~/.bashrc # hadoop export H…

云原生安全系列 5:ETCD 安全加固

引言 etcd是一个强一致性的分布式键值存储&#xff0c;它提供了一种可靠的方式来存储需要被分布式系统或机器集群访问的数据。通过 raft 算法它能在网络分区期间优雅地处理领导者的选举&#xff0c;并能容忍机器故障&#xff0c;甚至在领导者节点上。除此之外&#xff0c; etc…

存储过程的基础知识

本文来简单说下存储过程的基础知识 文章目录概述什么是存储过程存储过程的优缺点概述 mysql官网提供的储存过程&#xff1a;https://www.mysqlzh.com/doc/225/499.html 什么是存储过程 简单的说&#xff0c;存储过程是一条或者多条SQL语句的集合&#xff0c;可视为批文件&…

Windows下更改yarn的安装位置,减小C盘占用

Windows下更改yarn的安装位置&#xff0c;减小C盘占用 绷不住了&#xff0c;yarn的C盘占用太高了&#xff0c;我这C盘感觉以后会受不了&#xff0c;太大了~~&#xff08;捂脸~~ nnd&#xff0c;撸他&#xff0c;更改yarn的位置开始&#xff01; 先看看yarn目前的位置 检查当前…

「自控原理」2.4 信号流图与梅逊公式、闭环传递函数

本节引入了信号流图以及梅逊增益公式&#xff0c;可以据此快速对系统进行化简 本节引入了闭环传递函数的概念&#xff0c;并介绍了常用的闭环传递函数 文章目录信号流图的基本概念信号流图与方框图的关系从结构图绘制信号流图从信号流图绘制结构图梅逊(Mason)增益公式Mason公式…

Workfine5.0扩展功能——如何识别身份证信息?

哈喽&#xff0c;我是办公助手小W&#xff0c;又到了跟大家分享办公小技巧的时候啦&#xff01; 最近Workfine5.0最新版本上线后&#xff0c;大家最感兴趣的就是它的扩展功能了&#xff0c;今天要跟大家分享的就是如何实现身份证信息的提取。 首先咱们先要知道如何下载安装扩…

(第五章)OpenGL超级宝典学习:缓冲

缓冲 前言 本篇在讲什么 关于OpenGL数据缓冲的相关内容 本篇适合什么 适合初学OpenGL的小白 想了解OpenGL缓冲对象的同学 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文…

使用OpenCV透视变换技术实现坐标变换实践

1. 概述 1.1. 需求 在局部空间&#xff08;无GPS定位&#xff09;视频监控过程中&#xff0c;把视频识别到物体位置&#xff0c;投射到空间平面坐标系中&#xff0c;获取物体在局部空间的平面坐标。 1.2. 解决方案 使用图像透视变换技术。 1.3. 透视变换概念 透视变换是指…

链路追踪组件Skywalking使用

前言Skywalking是一个国产开源框架&#xff0c;2015年由吴晟开源 &#xff0c; 2017年加入Apache孵化器&#xff0c;其用于追踪多微服务模块调用之间日志的追踪&#xff0c;协助程序员进行排除问题Skywalking架构Skywalking架构图大概如下SkyWalking OAP&#xff1a; SkyWalkin…

如何格式化U盘?以及优盘格式化的恢复方法

我们经常使用U盘来进行存储和传输数据&#xff0c;使用时间久了&#xff0c;可能需要我们进行优盘格式化。需要注意&#xff01;优盘格式化之前&#xff0c;记得对里面的数据进行备份&#xff0c;防止数据清空造成不必要的损失。 如何进行U盘格式化&#xff1f;格式化优盘后&a…