抖音粉丝群1
『7x24小时有问必答』

---

在工业自动化项目中,编码器可以说是最常见的信号源之一。无论是测量电机转速、定位传送带位置,还是计算旋转角度,编码器都扮演着"眼睛"的角色。
但很多电气工程师在第一次使用S7-1200的高速计数器时,经常会遇到这样的问题:
信号接了,程序也写了,计数器就是不动?
今天这篇文章,我用一个完整的实际案例,把S7-1200高速计数器的配置和用法讲清楚。

---

一、项目背景:贴标机的速度检测

先说说实际应用场景。
某食品厂的包装贴标机,需要在传送带运行过程中实时检测当前速度,并根据速度调节标签的出标长度。
1.png
硬件配置:

  - PLC:西门子 S7-1200 CPU 1214C DC/DC/DC(固件V4.2)

  - 编码器:欧姆龙 E6B2-CWZ6C,600线增量型编码器

  - 传送带电机:变频器驱动,额定线速度 0.5m/s
工艺要求:

  - 实时速度显示在HMI上

  - 速度低于0.1m/s时报错停机

  - 速度信号参与出标长度的PID调节

---

二、编码器信号到底怎么接?

这是第一个坑。
增量型编码器通常有三路输出:A相、B相、Z相(零位脉冲)。

2.1 接线方式

S7-1200 CPU 1214C自带了4路高速计数器输入(I0.0~I0.3),支持差分信号24V PNP信号
编码器线色
信号
接PLC端子
A相
I0.0
B相
I0.1
Z相(可选)
I0.2
0V
24V GND
+24V
24V+
  注意:如果你用的是NPN型编码器,需要加信号转换模块,不能直接接!

2.2 为什么推荐A、B两相接法?

只接A相可以吗?可以,但只能测速度。
接A、B两相有什么好处?
可以判断旋转方向
(A相超前B相90°为正转,反之为反转)
支持4倍频
——同样的编码器分辨率,精度翻4倍
600线的编码器:

  - 单相计数:600脉冲/转

  - A+B正交计数:600×4 = 2400脉冲/转
我们选A+B正交计数,接法如图所示:
2.png

---

三、HSC参数配置——这一步是关键!

接线只是第一步,高速计数器的配置才是核心

3.1 启用高速计数器

在博途(TIA Portal)中打开CPU属性,找到"高速计数器":
CPU属性 → 高速计数器(HSC) → HSC1 → 启用

3.2 计数类型选择

这里有多个模式可选,根据实际需求选择:
模式
适用场景
计数
纯计数,不判断方向
频率
测量脉冲频率(转速)
运动档
配合工艺对象做运动控制
我们选"计数"模式,子类型选"线性计数"

3.3 计数方向

选择"用户程序中的计数器"——这样我们可以用程序来控制计数器的启动和复位。

3.4 输入滤波

硬件输入通道有滤波时间,默认是0.1μs。对于高速信号,这个值已经足够,一般不需要改。

---

四、实例:速度计算其实很简单

4.1 硬件组态配置

在HSC1中配置如下参数:
参数
设置值
计数类型
线性计数
计数方向
用户程序控制
计数频率
100kHz(CPU 1214C支持最高100kHz)
初始状态
禁用

4.2 程序实现

第一步:分配高速计数器地址
在OB1中,调用CTRL_HSC指令:
3.png
第二步:计算速度
编码器安装在主动辊上,已知:

  - 编码器线数:600 PPR

  - 主动辊周长:0.314m(直径100mm)

  - 4倍频后脉冲数:600 × 4 = 2400脉冲/转
速度计算公式:
速度(m/s) = 脉冲数/采样周期 ÷ (编码器线数×4) × 主动辊周长
对应PLC程序(采样周期0.5s):
// 读取HSC1当前计数值 #CurrentCount := "HSC1_DB".COUNT;   // 计算速度 #PulsePerHalfSec := #CurrentCount - #LastCount; #Speed_mps := INT_TO_REAL(#PulsePerHalfSec) / 0.5 / 2400.0 * 0.314; #LastCount := #CurrentCount;   // 转换为分钟速度(显示用) #Speed_mpm := #Speed_mps * 60.0;   // 速度限位检测 IF #Speed_mps < 0.1 THEN       "Alarm_BeltStop" := TRUE; ELSE       "Alarm_BeltStop" := FALSE; END_IF;
第三步:结果验证
配置好之后,在HMI上显示速度值。传送带正常运行速度显示约  30m/min,和实际测量值一致。

---

五、常见问题排查

Q1:计数器数值不变,一直是0

检查清单:

  - [ ] 编码器是否通电?(测棕线和棕线间有无24V)

  - [ ] A、B相信号是否接反?(换一个相信号试试)

  - [ ] HSC是否已在程序中启用?(CTRL_HSC的DIR参数)

Q2:计数数值乱跳

原因通常是信号干扰

  - 编码器线是否用了屏蔽线?

  - 屏蔽层是否单端接地?

  - 编码器和PLC的GND是否共地?

Q3:频率超过100kHz怎么办?

S7-1200 CPU 1214C最高支持100kHz。如果频率更高,需要:

  - 选更高频率的CPU(如CPU 1215C支持200kHz)

  - 或者使用信号模块(SB 1223)扩展高速计数通道

---

六、总结

回顾整个配置过程,其实核心就这几步:
① 编码器接线(A相→I0.0,B相→I0.1) ② 硬件组态中启用HSC1,配置为"计数模式" ③ 调用CTRL_HSC指令启用计数器 ④ 读取计数值,按公式换算成速度
高速计数器本身并不复杂,很多问题出在接线或组态配置上。只要按上面的步骤检查,一般都能搞定。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码