文章目录

PLC高速计数器的比较中断功能

发布于 2026-03-24 06:09:52 · 浏览 11 次 · 评论 0 条

比较中断是PLC高速计数器中最实用的功能之一,能让设备在特定计数值自动触发动作,无需主程序轮询。本文从原理到实操,手把手教你配置与调试。


一、核心原理:比较中断是什么

普通计数只记录脉冲数量,程序需要不断读取当前值再判断。比较中断则让计数器自己监控自己——当当前值等于预设的比较值时,硬件自动触发中断程序,不占用扫描周期。

关键概念:

术语 含义 典型场景
当前值(CV) 计数器实时累计的脉冲数 编码器反馈的实际位置
比较值(PV) 触发中断的目标数值 目标位置、长度设定点
中断程序 比较匹配时执行的子程序 立即输出、清零、改变速度

核心价值:响应速度达到微秒级,比程序扫描快100倍以上,适合精密定位、定长切割、高速测控。


二、硬件接线:计数脉冲从哪来

2.1 信号源类型

  • 编码器:增量式(A/B/Z相)、绝对式(SSI/BISS)
  • 接近开关:PNP/NPN型,单路脉冲
  • 光栅尺:直线位移转换脉冲

2.2 接线要点(以西门子S7-200 SMART为例)

24V增量编码器接线

编码器线色 接入端子 PLC端口
电源正(棕) L+
电源负(蓝) M
A相(白) I0.0 HSC0的时钟
B相(黑) I0.1 HSC0的方向
Z相(橙) I0.4 外部复位(可选)

关键设置

  • 拨码开关:将I0.0-I0.3对应的滤波时间设为最小(0.2μs),否则滤掉高频脉冲
  • 屏蔽层:单端接地,避免干扰

三、西门子S7-200 SMART配置详解

3.1 启用高速计数器向导

  1. 打开 STEP 7-Micro/WIN SMART软件
  2. 点击 菜单"工具" → "高速计数器向导"
  3. 选择 计数器编号(HSC0-HSC3),点击 "下一步"

3.2 模式选择与参数设置

模式选择页

参数 推荐设置 说明
计数模式 "具有内部方向控制的单相计数器" 或 "正交计数器" 单路脉冲选前者,编码器选后者
计数方向 外部方向控制或内部方向控制 编码器B相决定方向时选外部
初始计数方向 向上计数 通常默认即可

预设值与当前值页

  • 勾选 "预设值等于当前值时产生中断"
  • 输入 比较值(例如 10000 表示10000个脉冲触发)

3.3 生成中断程序

向导最后一步:

  1. 勾选 "生成中断程序"
  2. 命名 中断程序(默认 HSC0_STEP
  3. 点击 "完成",向导自动生成初始化程序

自动生成的主程序片段

// 在主程序中调用一次
CALL HSC_INIT

// HSC_INIT内部包含:
// 1. 定义HSC0的控制字节
// 2. 设置当前值为0
// 3. 设置预设值为10000
// 4. 连接中断事件12(HSC0 CV=PV)到INT_0
// 5. 全局启用中断
// 6. 启动HSC0

3.4 编写中断程序内容

打开 自动生成的中断程序(如 INT_0),在 // 用户代码 区域添加:

// 示例:到达目标位置后立即输出并准备下一次
NETWORK 1
// 立即置位输出Q0.0,控制电磁阀动作
S     Q0.0, 1

NETWORK 2
// 装载新的比较值(当前值+5000,实现等距分段)
LDW>= SM0.0, 1
// 使用MOV_DW指令设置新的预设值
MOVD  VD100, SMD42    // 将VD100中的新值送入HSC0预设值寄存器

NETWORK 3
// 可选:改变计数方向或清零
// 如需连续循环计数,保持当前值累加
// 如需绝对定位,执行:MOVD 0, SMD38(清零当前值)

四、三菱FX5U配置详解

4.1 参数设置

打开 GX Works3,双击 导航栏"参数" → "FX5UCPU" → "模块参数" → "高速I/O":

设置项 路径 推荐值
高速计数器功能选择 输入输出功能设置 → 高速计数器 "使用"
计数器类型 CH1详细设置 "1相1输入(S/W递增/递减)" 或 "2相2输入(A/B相)"
环长设置 CH1详细设置 线性模式或环形模式(循环计数)

4.2 比较匹配中断设置

点击 "中断设置" 标签页:

  1. 勾选 "比较匹配中断"
  2. 设置 比较匹配值(如 K10000
  3. 指定 中断指针(如 I010

4.3 程序编写

主程序

// 启用高速计数器CH1
HIOEN K1    // K1表示CH1

// 设置比较匹配值
DHCMOV K10000 K1 K0    // 将10000写入CH1的比较值寄存器
                       // K0表示当前值=比较值时触发

// 启用比较匹配中断
EI          // 全局允许中断

中断程序(I010)

I010
    SET Y0           // 立即输出Y0
    INC D100         // 中断计数加1
    DHCMOV D200 K1 K0    // 装载下一个比较值(实现多段比较)
IRET

五、多段比较的高级应用

单一比较值只能做一次动作,实际工程中常需连续多段控制

5.1 硬件比较表(以西门子S7-1200为例)

S7-1200支持最多32个比较值的硬件比较表:

// 使用"CTRL_HSC_EXT"指令配置比较表
// 比较表存储在数据块中

TYPE "HSC_CompareEntry"
STRUCT
    Period : DInt;      // 比较值(周期点)
    CountMode : Byte;   // 到达后的动作:0=无,1=输出置位,2=输出复位,3=反向
END_STRUCT;

// 在数据块中创建数组
"CompareTable".Entry[0].Period := 1000;
"CompareTable".Entry[0].CountMode := 1;   // 到达1000时置位输出

"CompareTable".Entry[1].Period := 2500;
"CompareTable".Entry[1].CountMode := 2;   // 到达2500时复位输出

"CompareTable".Entry[2].Period := 4000;
"CompareTable".Entry[2].CountMode := 1;   // 到达4000时再次置位
// ... 最多32个条目

5.2 飞剪/追剪应用实例

工艺要求:物料连续输送,在特定长度切断,剪切机构需与物料同步。

graph LR A["编码器测量
物料长度"] --> B{"当前值 ≥
设定长度?"} B -- "是 (中断触发)" --> C["启动伺服
追剪动作"] C --> D["剪切完成
计数器复位"] D --> A B -- "否" --> A

关键参数计算

  • 编码器分辨率:2500脉冲/转
  • 辊周长:200mm
  • 每毫米脉冲数:$2500 \div 200 = 12.5$ 脉冲/mm
  • 目标长度500mm对应的比较值:$500 \times 12.5 = 6250$ 脉冲

六、常见问题与排查

现象 可能原因 解决方法
中断不触发 比较值设置错误 确认PV寄存器地址,S7-200 SMART HSC0的PV是SMD42
中断频繁误触发 输入信号干扰 检查屏蔽接地,降低计数频率或增加硬件滤波
比较值更新不及时 在比较点附近修改PV 先禁用HSC,修改PV,再启用;或使用"改变当前值"指令避开临界点
多段比较顺序错乱 比较值未按大小排列 硬件比较表要求Period递增排列,软件比较需自行排序
输出响应有延迟 中断程序过长 中断中只做必要的立即输出,复杂逻辑移到主程序

七、性能优化技巧

  1. 比较值预装载:在中断里提前写好下一次的PV,避免主程序计算耗时
  2. 环形计数模式:连续旋转设备(如转盘)使用环形模式,自动归零避免数值溢出
  3. 中断优先级:多路高速计数时,为关键轴分配更高优先级的中断事件号
  4. 诊断监控:用状态表实时查看SM36.0(S7-200 SMART的HSC0当前值等于预设值标志)辅助调试

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文