找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3311

积分

0

好友

432

主题
发表于 昨天 17:31 | 查看: 4| 回复: 0

在工业自动化领域,精确捕捉高频脉冲信号是实现精准定位、速度测量和高速同步的关键。汇川H5U/Easy系列PLC内置的高速计数器(High-Speed Counter, HSC)模块,正是为此类需求而设计的利器。与传统计数器不同,高速计数器通过独立的硬件通道处理信号,不受PLC程序扫描周期限制,能够实现微秒级的快速响应。

高速计数器与编码器轴概述

在汇川H5U/Easy系列PLC中,高速计数器被抽象为“编码器轴”进行统一管理。一旦一个高速计数器与一个轴关联,它便成为编码器轴,可以像伺服轴一样进行位置监控和运动控制指令的调用,这大大简化了基于位置反馈的应用编程。

H5U/Easy系列高速计数器核心规格如下:

规格项 H5U系列 Easy系列
高速计数器数量 4轴 4轴(部分机型)
计数器位数 32位 32位
计数范围 -2,147,483,648 ~ +2,147,483,647 同左
最高计数频率 200kHz(部分机型支持更高) 根据机型不同

支持的计数模式:

模式 描述 输入端子要求
AB相1倍频 A、B相信号,每周期计数1次 X0/A相,X1/B相
AB相2倍频 A、B相信号,每周期计数2次 X0/A相,X1/B相
AB相4倍频 A、B相信号,每周期计数4次 X0/A相,X1/B相
CW/CCW模式 正转脉冲/反转脉冲 X0/CW,X1/CCW
脉冲+方向模式 脉冲信号+方向信号 X0/脉冲,X1/方向
单相计数 单脉冲输入,可加方向 X0/脉冲(X1可选方向)

计数信号的来源可以选择为外部脉冲输入(通过X0~X7端子)或内部时钟(如1ms时钟),后者常用于仿真或低速测试场景。

编码器轴的创建与配置

配置高速计数器功能,核心是创建一个“本地编码器轴”。

创建步骤

在编程软件中,通常在工程管理区右键“运动控制轴”并选择“添加轴”。

  1. 基本设置:在弹出的轴配置窗口中,于“基本设置”选项卡下,选择轴类型为“本地编码器轴”。需要指定轴号(例如轴3),并在“输入设备”下拉菜单中选择要关联的高速计数器,如“高速计数器0”。“输出设备”通常选择“未分配”。此外,还可以根据需求勾选“虚轴模式”、“轮询模式”等选项。
  2. 单位换算设置:切换到“单位换算设置”选项卡,这是将脉冲数转换为工程单位(如毫米、度)的关键。需要设置“电机/编码器旋转一圈的脉冲数”(例如16#2710,即十进制10000),以及“工作台旋转一圈的移动量”(例如1.0度)。软件会自动根据这两个参数计算脉冲当量。若传动系统中有减速机,可启用“变速装置”并设置齿轮比。
  3. 模式/参数设置:最后在“模式/参数设置”选项卡中,完成核心功能配置。这包括:
    • 模式选择:线性模式(计数值在正负范围内累加)或旋转模式(计数值在0到设定周期内循环)。
    • 软件限位:设置轴的负向和正向软限位值(例如0.00度和1000.00度)。
    • 计数器模式设置:选择具体的计数模式,如“A/B相1倍频”,并指定信号源端子(如X0-A相, X1-B相)。
    • 复位与探针设置:可以启用硬件复位功能,指定复位输入端子(如X4)及其触发边沿。同样,可以配置探针(触发锁存)功能的输入端子。

配置完成后,将工程下载至PLC即可。

单位换算参数示例与公式:

参数 说明 示例
每转脉冲数 编码器每圈输出的脉冲数 10000
每转移动量 工作台每旋转一圈的移动距离 10.0 mm
用户单位 最终使用的单位 mm
变速比 如有减速机,设置分子/分母 1:1

计算公式为:

用户单位值 = 脉冲数 × (每转移动量 ÷ 每转脉冲数)

核心应用指令详解 (以H5U为例)

创建好编码器轴后,便可通过一系列专用功能块进行控制和数据读取。

1. 位置与速度读取:HC_Counter

此指令用于实时获取编码器轴的当前位置和速度。

HC_Counter(
    Axis:= EncoderAxis1,     // 编码器轴名称
    Position=> rPosition,    // 输出:当前计数值(用户单位)
    Velocity=> rVelocity     // 输出:当前速度(用户单位/秒)
);

2. 位置预置(清零):HC_Preset

常用于将当前计数值设为一个特定值,最典型的应用是清零。

HC_Preset(
    Execute:= bPresetCmd,    // 触发信号(上升沿有效)
    Axis:= EncoderAxis1,     // 编码器轴
    EdgeMode:= 0,            // 0=上升沿触发,1=外部X上升沿,2=X下降沿,3=双边沿
    Position:= 0.0,          // 预置的目标位置(设为0即为清零)
    Done=> bPresetDone,      // 输出:预置完成
    Error=> bPresetError,    // 输出:错误标志
    ErrorID=> iPresetErrID   // 输出:错误代码
);

3. 探针锁存:HC_Probe

当外部传感器(探针)信号触发时,高速锁存当前的精确位置。每个轴支持2路独立的探针。

HC_Probe(
    Execute:= bProbeCmd,      // 触发使能
    Axis:= EncoderAxis1,      // 编码器轴
    ProbeID:= 1,              // 探针编号(1或2)
    Mode:= 0,                 // 0=单次触发,1=连续触发,2=双边沿触发
    Done=> bProbeDone,        // 输出:锁存完成
    ProbePos=> rProbePosition, // 输出:锁存的位置值
    Error=> bProbeError,      // 输出:错误标志
    ErrorID=> iProbeErrID     // 输出:错误代码
);

4. 位置比较与输出

这是实现高速响应的核心功能,分为单点、多点数组和等间距比较。

  • 单位置比较 HC_Compare:当轴位置到达设定值时,可触发硬件输出或中断。

    HC_Compare(
        Execute:= bCompareCmd,
        Axis:= EncoderAxis1,
        Position:= 100.0,        // 比较位置
        OutputEnable:= 1,        // 1=使能硬件输出
        OutputPin:= 0,           // 输出端子号(对应Y0~Y7)
        InterruptMap:= 1,        // 关联的中断事件号(1~16)
        Done=> bCompareDone,
        Match=> bMatch,          // 输出:比较匹配标志
        Error=> bCompareError,
        ErrorID=> iCompareErrID
    );

    重要限制:同一个编码器轴同一时间只能激活一个HC_Compare指令,否则会产生类似“双线圈”的冲突。

  • 多位置数组比较 HC_ArrayCompare:适用于需要依次触发多个位置点的场景。

    VAR
        aComparePos: ARRAY[1..10] OF REAL := [50.0, 100.0, 150.0, 200.0, 250.0];
    END_VAR
    
    HC_ArrayCompare(
        Execute:= bArrayCmd,
        Axis:= EncoderAxis1,
        pArray:= ADR(aComparePos), // 比较位置数组首地址
        iArrayLen:= 5,             // 数组有效长度
        OutputEnable:= 1,
        OutputPin:= Y0,
        InterruptMap:= 2,
        NextIndex=> iNextIdx,      // 输出:已完成比较的数组索引
        Done=> bArrayDone,
        Match=> bArrayMatch,
        Error=> bArrayError
    );
  • 等间距比较 HC_StepCompare:适用于角度分割、等距触发等场合。

    HC_StepCompare(
        Execute:= bStepCmd,
        Axis:= EncoderAxis1,
        StartPos:= 0.0,       // 起始位置
        EndPos:= 360.0,       // 结束位置
        Step:= 30.0,          // 步长(间距)
        OutputEnable:= 1,
        OutputPin:= Y1,
        InterruptMap:= 3,
        NextIndex=> iStepIdx,
        Done=> bStepDone,
        Match=> bStepMatch
    );

高速比较中断的应用

为了实现微秒级的快速响应,必须启用硬件比较输出并配合中断使用。其稳定性和低延迟特性,是保障复杂 工业自动化 系统可靠运行的关键一环。

配置步骤:

  1. 在主程序开始处使用EI指令打开全局中断使能。
  2. 在编码器轴的“模式/参数设置”中勾选“比较输出”功能,并指定输出端子及脉冲宽度。
  3. 在软件中新建中断程序,并关联到对应的比较中断事件(编号1~16,需与指令中InterruptMap参数一致)。
  4. 在比较指令(如HC_Compare)中设置InterruptMap参数,将其与中断程序绑定。

中断程序示例:

// 中断程序 INT_CMP1(对应比较中断1)
IF _EncAxis[0].Match[0].Position > 1000.0 THEN
    // 位置超过1000时的紧急处理逻辑
    bOverLimit := TRUE;
    // ... 执行其他高速响应操作
END_IF;

典型应用场景与代码片段

1. 飞拍(运动中拍照)

将伺服电机的编码器反馈信号接入PLC高速计数口,在运动到预设位置时精确触发相机。

HC_Compare(
    Execute:= bFlyShot,
    Axis:= EncoderAxis_FB,       // 关联伺服编码器反馈的编码器轴
    Position:= rCameraPos,       // 预设的拍照位置
    OutputEnable:= 1,            // 启用硬件输出
    OutputPin:= Y2,              // Y2端子输出信号至相机触发器
    InterruptMap:= 5,
    Done=> ,
    Match=> bShotTrig            // 拍照触发信号
);

2. 圆盘多工位控制

对于旋转圆盘需要多个位置同步比较输出的场景,可以采用HC_ArrayCompare指令顺序触发,或者通过将一个编码器信号绑定到多个不同的高速计数器编号上,实现多个输出点的独立、并行比较。

3. 传送带产品长度测量

利用两个传感器和探针功能测量产品长度。

HC_Counter(Axis:= EncoderAxis_Length, Position=> rCurrentPos, Velocity=> );

// 产品前沿遮挡传感器时,锁存开始位置
IF bProductDetect AND NOT bDetectOld THEN
    HC_Probe(
        Execute:= TRUE,
        Axis:= EncoderAxis_Length,
        ProbeID:= 1,
        Mode:= 0,
        Done=> ,
        ProbePos=> rStartPos
    );
END_IF;

// 产品后沿离开传感器时,锁存结束位置并计算长度
IF NOT bProductDetect AND bDetectOld THEN
    HC_Probe(
        Execute:= TRUE,
        Axis:= EncoderAxis_Length,
        ProbeID:= 2,
        Mode:= 0,
        Done=> ,
        ProbePos=> rEndPos
    );
    rLength := ABS(rEndPos - rStartPos); // 计算产品长度
END_IF;

常见问题与优化建议

问题 可能原因 解决方法
计数不准确 1. 计数模式(AB相/脉冲方向)配置错误<br>2. 输入脉冲频率超过硬件上限<br>3. 信号线干扰 1. 检查并更正计数模式设置<br>2. 确认信号频率在规格范围内<br>3. 使用双绞屏蔽线,并确保屏蔽层单端接地
多个HC_Compare指令冲突 同一编码器轴同时激活了多个比较指令 1. 改用HC_ArrayCompare实现多点比较<br>2. 将同一编码器信号绑定到不同的高速计数器,复用信号<br>3. 使用外部硬件比较模块
比较输出响应慢 未启用硬件比较输出功能 在比较指令中务必设置OutputEnable:=1,并关联正确的硬件输出端子
中断不触发 1. 程序中未执行EI指令<br>2. 中断事件号映射错误 1. 在程序初始化段添加EI指令<br>2. 检查指令中InterruptMap参数与中断程序关联的事件号是否一致
探针锁存失败 探针触发模式或输入端子设置错误 检查探针的触发边沿(上升沿/下降沿)和模式(单次/连续)设置

硬件与性能优化建议:

  • 接线:务必使用双绞屏蔽线连接编码器,屏蔽层在PLC侧单端接地。长距离传输时,在末端添加合适的终端电阻。
  • 电源:建议编码器电源与PLC电源进行隔离,以减少干扰。
  • 响应速度优先使用硬件比较输出,其响应时间可达微秒级,远快于软件扫描。
  • 中断使用:合理规划中断程序,避免过于复杂或频繁的中断影响主程序性能。
  • 指令选择:对于多点比较,使用HC_ArrayCompare时,数组长度不宜过大,以平衡性能与灵活性。

结语

汇川H5U/Easy系列PLC的高速计数器功能,通过编码器轴的概念提供了高度集成和易用的开发体验。从基础的脉冲计数、速度测量,到高级的探针锁存、硬件比较输出与中断联动,它能够覆盖从简单计量到复杂飞拍同步的广泛工业应用。深入理解其配置逻辑和指令特性,是构建高精度、高响应自动化系统的坚实基础。更多工控技术实践与深度讨论,欢迎访问 yunpan.plus 与其他开发者交流。

参考资料

[1] 汇川PLC的高速计数器功能, 微信公众号:mp.weixin.qq.com/s/wdOPjy7m7rv28sIN2BOkuA

版权声明:本文由 云栈社区 整理发布,版权归原作者所有。




上一篇:Firefox指纹分析工具实战:逆向风控检测与日志AI解析
下一篇:从CRT到汽车电子:Crowbar过压保护电路的工作原理与现代应用
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-26 00:16 , Processed in 0.358149 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表