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 设备配置中组态高速计数器,然后才能在程序中使用高速计数
● 仅当组态的计数方向设置为“用户程序(内部方向控制)”(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:
OK 输入值为有效 REAL 数 NOT_OK 输入值不是有效 REAL 数
参数 数据类型 说明
IN Real, LReal 输入数据
长沙工控帮教育科技有限公司整理
6.1.5 数学
加法、减法、乘法和除法指令
使用数学功能框指令可编写基本数学运算程序:
ADD: 加法 (IN1 + IN2 = OUT)
SUB: 减法 (IN1 - IN2 = OUT)
MUL: 乘法 (IN1 * IN2 = OUT)
DIV: 除法 (IN1 / IN2 = OUT)
整数除法运算会截去商的小数部分以生成整数输出。
在功能框名称下方单击,并从下拉菜单中选择数据类型。
说明
基本数学指令参数 IN1、IN2 和 OUT 的数据类型必须相同。
参数 数据类型 说明
IN1, IN2 SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal, Constant
数学运算输入
OUT SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal 数学运算输出
启用数学指令 (EN = 1) 后,指令会对输入值(IN1 和 IN2)执行指定的运算并将结果存储 在通过输出参数 (OUT) 指定的存储器地址中。 运算成功完成后,指令会设置 ENO = 1。
ENO 状态 说明 1 无错误
0 数学运算结果值可能超出所选数据类型的有效数值范围。 返回适合目标大 小的结果的最低有效部分。
0 除数为 0 (IN2 = 0): 结果未定义,返回 0。
0 Real/LReal: 如果其中一个输入值为 NaN(不是数字),则返回 NaN。
0 ADD Real/LReal: 如果两个 IN 值均为 INF,但符号不同,则这是非法运 算并返回 NaN。
长沙工控帮教育科技有限公司整理
ENO 状态 说明
0 SUB Real/LReal: 如果两个 IN 值均为 INF,且符号相同,则这是非法运 算并返回 NaN。
0 MUL Real/LReal: 如果一个 IN 值为零而另一个为 INF,则这是非法运算 并返回 NaN。
0 DIV Real/LReal: 如果两个 IN 值均为零或 INF,则这是非法运算并返回 NaN。
6.1.5.1 MOD 指令
MOD(求模)指令用于 IN1 以 IN2 为模的数学运算。 运算 IN1 MOD IN2 = IN1 - (IN1 / IN2) = 参数 OUT。
在功能框名称下方单击,并从下拉菜单中选择数据类型。
说明
IN1、IN2 和 OUT 参数的数据类型必须相同。
参数 数据类型 说明
IN1 和 IN2 Int、DInt、USInt、UInt、UDInt、Constant 求模输入
IN1 和 IN2 Int、DInt、USInt、UInt、UDInt、Constant 求模输入