PLC_博图系列☞基本指令”TONR:时间累加器“

头图

PLC_博图系列☞基本指令”TONR:时间累加器“


关键字: PLC西门子博图Siemens TONR

背景介绍

这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专业的PLC编程人员,也不懂电路,所以如果你希望从这里学习PLC编程技术,可能会有些失望。然而,因为工作需要,我开始了解PLC编程,特别是西门子的博图软件,并记录了这些经验。随着我国工业4.0的推进,相信会有更多的人从事类似的工作。如果这篇文章能对你有所帮助,欢迎点赞关注我❥(^_-)。

TONR: 时间累加器

说明

可以使用“时间累加器”指令来累加由参数 PT 设定的时间段内的时间值。当 IN 输入处的逻辑运算结果 (RLO) 从“0”变为“1”(信号上升沿)时,将开始进行时间测量,已组态的时间 PT 开始计时。当 PT 正在计时时,加上在 IN 输入的信号状态为“1”时记录的时间值。累加得到的时间值将写入到输出 ET 中,并可以在此进行查询。当达到当前时间值 PT 时,输出 Q的信号状态为“1”。即使输入 IN 的信号状态变为“0”,输出 Q 仍会保持置位为“1”。

无论启动输入的信号状态如何,输入 R 都将复位输出 ET 和 Q。

“时间累加器”指令可以放置在程序段的中间或者末尾。它需要一个前导逻辑运算。

每次调用“时间累加器”指令,必须为其分配一个用于存储实例数据的 IEC 定时器。

对于 S7-1200 CPU

IEC 定时器是一个 IEC_TIMER 或 TONR_TIME 数据类型的结构,可如下声明:

  • 声明为一个系统数据类型为 IEC_TIMER 的数据块(例如,“MyIEC_TIMER”)
  • 声明为块中“Static”部分的 TONR_TIME 或 IEC_TIMER 类型的局部变量(例如,#MyIEC_TIMER)

对于 S7-1500 CPU

IEC 定时器是一个 IEC_TIMER、IEC_LTIMER、TONR_TIME 或 TONR_LTIME 数据类型的结构,可如下声明:

  • 声明为一个系统数据类型为 IEC_TIMER 或 IEC_LTIMER 的数据块(例如,“MyIEC_TIMER”)
  • 声明为块中“Static”部分的 TONR_TIME、TONR_LTIME、IEC_TIMER 或 IEC_LTIMER 类型的局部变量(例如,#MyIEC_TIMER)

更新实例数据中的实际值

“时间累加器”中的实例数据根据以下规则更新:

  • IN 输入

    “时间累加器”指令将当前 RLO 与保存在实例数据 IN 参数中上次查询的 RLO 进行比较。如果指令检测到 RLO 从“0”变为“1”,则说明出现了一个信号上升沿并继续进行时间测量。如果 RLO 中的指令检测到从“1”到“0”的变化,则说明出现了一个信号下降沿并且会中断时间测量。在“时间累加器”指令处理完毕后,IN 参数的值在实例数据中更新,并作为存储器位用于下次查询。

    请注意,边沿检测将在其他功能写入或初始化 IN 参数的实际值时中断。

  • PT 输入

    当边沿在 IN 输入处改变时,PT 输入处的值将写入实例数据中的 PT 参数。

  • R 输入

    输入 R 处的信号“1”将复位并阻断时间测量。IN 输入处的边沿会被忽略。输入 R 处的信号“0”将再次启用时间测量。

  • Q 和 ET 输出

    Q 和 ET 输出的实际值在以下情况下更新:

    • 当输出 ET 或 Q 互连时,调用该指令。

    • 访问 Q 或 ET。

    如果输出未互连并且还未被查询,则不更新 Q 和 ET 输出的当前时间值。即使在程序中跳过该指令,也不会对输出进行更新。

    “时间累加器”指令的内部参数用以计算 Q 和 ET 的时间值。请注意,时间测量将在其他功能写入或初始化指令的实际值时中断。

危险

**重新初始化实际值的危险 **

在时间测量时,重新初始化 IEC 定时器的实际值会破坏 IEC 定时器的功能。更改实际值可能会导致程序和实际过程之间不一致。这会对财产和人身造成造成严重损害。 以下功能可导致实际值重新初始化:

  • 通过重新初始化加载块
  • 将快照加载为实际值
  • 控制或强制执行实际值
  • “WRIT_DBL”指令

在执行这些功能前,请采取以下预防措施:

  • 在覆盖实际值之前,应确保设备始终处于安全状态。
  • 在初始化 IEC 定时器的实际值前,请确保定时器已计时结束。
  • 如果使用快照覆盖实际值,请确保是在系统处于安全状态时拍摄的快照。
  • 确保程序在传输期间不读写受影响的数据。

参数

下表列出了“接通延时”指令的参数:

参数 声明 数据类型 数据类型 存储区 存储区 说明
S7-1200 S7-1500 S7-1200 S7-1500
IN Input BOOL BOOL I、Q、M、D、L 或常量 I、Q、M、D、L、T、C、P 或常量 启动输入
R Input BOOL BOOL I、Q、M、D、L 或常量 I、Q、M、D、L、P 或常量 复位输入
PT Input TIME TIME、LTIME I、Q、M、D、L 或常量 I、Q、M、D、L、P 或常量 时间记录的最长持续时间。 PT 参数的值必须为正数。
Q Output BOOL BOOL I、Q、M、D、L I、Q、M、D、L、P 超出时间值 PT 之后要置位的输出。

脉冲时序图

下图为“时间累加器”指令的脉冲时序图:

image-20240331110849257

示例

以下示例说明了该指令的工作原理:

image-20240331110905777

下表将通过具体的操作数值对该指令的工作原理进行说明:

参数 操作数
IN Tag_Start 信号跃迁“0”=>“1”
PT Tag_PresetTime T#10s
Q Tag_Status FALSE;10 秒后变为 TRUE
ET Tag_ElapsedTime 信号跃迁“0”=>“1” 时间 T#10s 超出。 5 秒后发生信号跃迁“1”=>“0”: 操作数“Tag_ElapsedTime”中的时间仍在 T#5s 中计时。 大约 2 秒后重新发生信号跃迁“1”=>“0”: 操作数“Tag_ElapsedTime”中的时间继续在 T#5s 中计时。

当“Tag_Start”操作数的信号状态从“0”变为“1”时,PT 参数预设的时间开始计时。只要操作数“Tag_Start”的信号状态为“1”,该时间就继续计时。当操作数“Tag_Start”的信号状态从“1”变为“0”时,计时将停止,并记录操作数 Tag_ElapsedTime 中的当前时间值。当操作数“Tag_Start”的信号状态从“0”变为“1”时,将继续从发生信号跃迁“1”到“0”时记录的时间值开始计时。达到 PT 参数中指定的时间值时,“Tag_Status”操作数的信号状态将置位为“1”。当前时间值存储在“Tag_ElapsedTime”操作数中。

**注:**以上部分内容来之博图V16帮助文档。


博客签名2021

相关推荐

  1. 基础时间线柱状绘制

    2024-07-17 22:16:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 22:16:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 22:16:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 22:16:03       62 阅读
  4. Python语言-面向对象

    2024-07-17 22:16:03       72 阅读

热门阅读

  1. OpenLayers学习笔记-点位聚合

    2024-07-17 22:16:03       23 阅读
  2. c++邻接矩阵

    2024-07-17 22:16:03       24 阅读
  3. Mojo 编程语言简介

    2024-07-17 22:16:03       24 阅读
  4. 量化交易策略的优化与回测

    2024-07-17 22:16:03       24 阅读
  5. 测试面试题(八)

    2024-07-17 22:16:03       23 阅读
  6. IDEA常用配置

    2024-07-17 22:16:03       22 阅读
  7. 分类题解清单

    2024-07-17 22:16:03       27 阅读
  8. sourcetree 下载地址

    2024-07-17 22:16:03       24 阅读
  9. DATE_SUB 的用法

    2024-07-17 22:16:03       23 阅读
  10. 【C++】C++中的堆和栈介绍和区别

    2024-07-17 22:16:03       25 阅读