• 沒有找到結果。

PLC 概念 3

TIME 32 位 存储形式

6.1.3 计数器

6.1.3.1 计数器

可使用计数器指令对内部程序事件和外部过程事件进行计数:

● CTU 是加计数器。

● CTD 是减计数器。

● CTUD 是加减计数器。

每个计数器都使用数据块中存储的结构来保存计数器数据。 用户在编辑器中放置计数器 指令时分配相应的数据块。 这些指令使用软件计数器,软件计数器的最大计数速率受其 所在的 OB 的执行速率限制。 指令所在的 OB 的执行频率必须足够高,以检测 CU 或 CD 输入的所有跳变。 要了解更快的计数操作,请参见 CTRL_HSC 指令。

在功能块中放置计数器指令后,可以选择多重背景数据块选项,各数据结构的计数器结构 名称可以不同,但计数器数据包含在单个数据块中,从而无需每个计数器都使用一个单独 的数据块。 这减少了计数器所需的处理时间和数据存储空间。 在共享的多重背景数据块 中的计数器数据结构之间不存在交互作用。

从功能框名称下的下拉列表中选择计数值数据类型。

可创建自己的“计数器名称”来命名计数器数据块,还可以描述该计数器 在过程中的用途。

参数 数据类型 说明

PV SInt、Int、DInt、USInt、

UInt、UDInt

预设计数值

Q、QU Bool CV >= PV 时为真

QD Bool CV <= 0 时为真

CV SInt、Int、DInt、USInt、

UInt、UDInt

CTD: 参数 CD 的值从 0 变为 1 时,CTD 使计数值减 1。如果参数 CV(当前计数值)

6.1.3.2 CTRL_HSC 指令

CTRL_HSC 指令可控制高速计数器,这些高速计数器通常用来对发生速率比 OB 执行速 率更快的事件进行计数。 CTU、CTD 和 CTUD 计数器指令的计数速率受其所在的 OB 的 执行速率限制。 要了解 HSC 最大时钟输入频率,请参考 CPU 技术规范 (页 327)。

高速计数器的典型应用是对由运动控制轴编码器生成的脉冲进行计数。

每个 CTRL_HSC 指令都使用数据块中存储的结构来保存 数据。 在编辑器中放置 CTRL_HSC 指令时即可分配该数 据块。

可创建自己的“计数器名称”来命名计数器数据块,还可以 描述该计数器在过程中的用途。

参数 参数类型 数据类型 说明

HSC IN HW_HSC HSC 标识符

DIR IN Bool 1 = 请求新方向

CV IN Bool 1 = 请求设置新的计数器值

RV IN Bool 1 = 请求设置新的参考值

PERIOD IN Bool 1 = 请求设置新的周期值

(仅限频率测量模式)

NEW_DIR IN Int 新方向:

1= 向上 -1= 向下

NEW_CV IN DInt 新计数器值

NEW_RV IN DInt 新参考值

NEW_PERIOD IN Int 以秒为单位的新周期值: 0.01、0.1 或 1

(仅限频率测量模式)

BUSY OUT Bool 功能忙

必须先在项目设置 PLC 设备配置中组态高速计数器,然后才能在程序中使用高速计数 器。 HSC 设备配置设置包括选择计数模式、I/O 连接、中断分配以及是作为高速计数器 还是设备来测量脉冲频率。 无论是否采用程序控制,均可操作高速计数器。

许多高速计数器组态参数只在项目设备配置中进行设置。 有些高速计数器参数在项目设 备配置中初始化,但以后可以通过程序控制进行修改。

CTRL_HSC 指令参数提供了计数过程的程序控制:

● 将计数方向设置为 NEW_DIR 值

● 将当前计数值设置为 NEW_CV 值

● 将参考值设置为 NEW_RV 值

● 将周期值(仅限频率测量模式)设置为 NEW_PERIOD 值

如果执行 CTRL_HSC 指令后以下布尔标记值置位为 1,则相应的 NEW_xxx 值将装载到 计数器。 CTRL_HSC 指令执行一次可处理多个请求(同时设置多个标记)。

● DIR = 1 是装载 NEW_DIR 值的请求,0 = 无变化

● CV = 1 是装载 NEW_CV 值的请求,0 = 无变化

● RV = 1 是装载 NEW_RV 值的请求,0 = 无变化

● PERIOD = 1 是装载 NEW_PERIOD 值的请求,0 = 无变化

CTRL_HSC 指令通常放置在触发计数器硬件中断事件时执行的硬件中断 OB 中。 例如,

如果 CV=RV 事件触发计数器中断,则硬件中断 OB 代码块执行 CTRL_HSC 指令并且可 通过装载 NEW_RV 值更改参考值。

在 CTRL_HSC 参数中没有提供当前计数值。 在高速计数器硬件配置期间分配存储当前计 数值的过程映像地址。 可以使用程序逻辑直接读取该计数值并且返回到程序的值将是读 取计数器瞬间的正确计数。 但计数器仍将继续对高速事件计数。 因此,程序使用旧的计 数值完成处理前,实际计数值可能会更改。

CTRL_HSC 参数的详细信息:

● 如果不请求更新参数值,则会忽略相应的输入值。

● 仅当组态的计数方向设置为“用户程序(内部方向控制)”(User program (internal direction control)) 时,DIR 参数才有效。 用户在 HSC 设备配置中确定如何使用该参 数。

● 对于 CPU 或信号板上的 S7-1200 HSC,BUSY 参数的值始终为 0。

条件代码: 发生错误时,ENO 设置为 0,并且 STATUS 输出包含条件代码。

STATUS 值 (W#16#...)

说明

0 无错误

80A1 HSC 标识符没有对 HSC 寻址 80B1 NEW_DIR 的值非法

80B2 NEW_CV 的值非法 80B3 NEW_RV 的值非法 80B4 NEW_PERIOD 的值非法

6.1.3.3 高速计数器的使用方法

高速计数器 (HSC) 可用作增量轴编码器的输入。 该轴编码器每转提供指定数量的计数值 以及一个复位脉冲。 来自轴编码器的时钟和复位脉冲将输入到 HSC 中。

先是将若干预设值中的第一个装载到 HSC 上,并且在当前计数值小于当前预设值的时段 内计数器输出一直是激活的。 在当前计数值等于预设时、发生复位时以及方向改变时,

HSC 会提供一个中断。

每次出现“当前计数值等于预设值”中断事件时,将装载一个新的预设值,同时设置输出的 下一状态。 当出现复位中断事件时,将设置输出的第一个预设值和第一个输出状态,并 重复该循环。

由于中断发生的频率远低于 HSC 的计数速率,因此能够在对 CPU 扫描周期影响相对较 小的情况下实现对高速操作的精确控制。 通过提供中断,可以在独立的中断例程中执行 每次的新预设值装载操作以实现简单的状态控制。 (或者,所有中断事件也可在单个中 断例程中进行处理。)

选择 HSC 的功能

所有 HSC 在同种计数器运行模式下的工作方式都相同。 HSC 共有四种基本类型:

● 具有内部方向控制的单相计数器

● 具有外部方向控制的单相计数器

● 具有 2 个时钟输入的双相计数器

● A/B 相正交计数器

用户可选择是否激活复位输入来使用各种 HSC 类型。 如果激活复位输入(存在一些限 制,请参见下表),则它会清除当前值并在您禁用复位输入之前保持清除状态。

● 频率功能: 有些 HSC 模式允许 HSC 被组态(计数类型)为报告频率而非当前脉冲 计数值。 有三种可用的频率测量周期: 0.01、0.1 或 1.0 秒。

频率测量周期决定 HSC 计算并报告新频率值的频率。 报告频率是通过上一测量周期 内总计数值确定的平均值。 如果该频率在快速变化,则报告值将是介于测量周期内出 现的最高频率和最低频率之间的一个中间值。 无论频率测量周期的设置是什么,总是 会以赫兹为单位来报告频率(每秒脉冲个数)。

● 计数器模式和输入: 下表列出了用于与 HSC 相关的时钟、方向控制和复位功能的输 入。

同一输入不可用于两个不同的功能,但任何未被其 HSC 的当前模式使用的输入均可 用于其它用途。 例如,如果 HSC1 处于使用内置输入但不使用外部复位 (I0.3) 的模 式,则 I0.3 可以用于沿中断或 HSC2。

说明 默认输入分配 功能

访问 HSC 的当前值

CPU 将每个 HSC 的当前值存储在一个输入 (I) 地址中。 下表列出了为每个 HSC 的当前 值分配的默认地址。 可以通过在设备配置中修改 CPU 的属性来更改当前值的 I 地址。

高速计数器 数据类型 默认地址

HSC1 DInt ID1000

HSC2 DInt ID1004

HSC3 DInt ID1008

HSC4 DInt ID1012

HSC5 DInt ID1016

HSC6 DInt ID1020

无法强制分配给 HSC 设备的数字量 I/O 点

在设备配置期间分配高速计数器设备使用的数字量 I/O 点。将数字 I/O 点分配给这些设备 之后,无法通过监视表格强制功能修改所分配的 I/O 点的地址值。

6.1.3.4 组态 HSC

CPU 允许用户组态最多 6 个高速计数器。 用户可编 辑 CPU 的“属性”(Properties) 来组态各个 HSC 的参 数。

通过编辑 CPU 的“属性”(Properties) 来组态高速计数 器的参数。

启用 HSC 之后组态其它参数,例如计数器功能、初 始值、复位选项和中断事件。

组态 HSC 之后,在用户程序中使用 CTRL_HSC 指 令控制 HSC 的运行。

6.1.4 比较

LAD FBD

使用比较指令可比较两个数据类型相同的值。 该 LAD 触 点比较结果为 TRUE 时,则该触点会被激活。 如果该 FBD 功能框比较结果为 TRUE,则功能框输出为 TRUE。

在程序编辑器中单击该指令后,可以从下拉菜单中选择比较类型和数据类型。

关系类型 满足以下条件时比较结果为真:

== IN1 等于 IN2

<> IN1 不等于 IN2

>= IN1 大于或等于 IN2

<= IN1 小于或等于 IN2

> IN1 大于 IN2

< IN1 小于 IN2

参数 数据类型 说明

IN1, IN2 SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal, String, Char, Time, DTL, Constant

要比较的值

范围内和范围外指令

LAD FBD

使用 IN_RANGE 和 OUT_RANGE 指令可测试 输入值是在指定的值范围之内还是之外。 如果 比较结果为 TRUE,则功能框输出为 TRUE。

输入参数 MIN、VAL 和 MAX 的数据类型必须相 同。

在程序编辑器中单击该指令后,可以从下拉菜单 中选择数据类型。

关系类型 满足以下条件时比较结果为 TRUE:

IN_RANGE MIN <= VAL <= MAX OUT_RANGE VAL < MIN 或 VAL > MAX

参数 数据类型 说明

MIN、VAL、

MAX

SInt、Int、DInt、USInt、UInt、UDInt、

Real、Constant

比较器输入

OK 和 Not OK 指令

LAD FBD

使用 OK 和 NOT_OK 指令可测试输入的参考数据是否为 符合 IEEE 规范 754 的有效实数。如果该 LAD 触点为 TRUE,则激活该触点并传递能流。 如果该 FBD 功能框 为 TRUE,则功能框输出为 TRUE。

如果 Real 或 LReal 类型的值为 +/- INF(无穷大)、NaN(不是数字)或者非标准化的 值,则其无效。 非标准化的值是非常接近于 0 的数字。 CPU 在计算中用 0 替换非标准 化的值。

指令 满足以下条件时 REAL 数测试结果为 TRUE:

指令 满足以下条件时 REAL 数测试结果为 TRUE: