返回主站|会员中心|保存桌面

AB罗克韦尔服务商    

PLC、变频器、人机界面、传感器

联系方式
  • 联系人:方经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
首页 > 新闻中心 > 怎么实现罗克韦尔PLC自动加减计算,不用高数计数器!
新闻中心
怎么实现罗克韦尔PLC自动加减计算,不用高数计数器!
发布时间:2026-11-07        浏览次数:0        返回列表

不用 HSC 高速计数器,只适合低速 DI 开关量信号(光电、接近、行程、干接点,频率一般<10Hz),两种主流方案:

  1. 方案 A:CTU + CTD 共用同一个 COUNTER 标签

  2. 方案 B:ONS 上升沿 + ADD / SUB 做 DINT 变量加减

5380/5580 新版还有 FBD 块 CTUD,一条功能块 CU 加、CD 减,老版本梯形图不支持 CTUD 梯形图指令

限制:普通扫描型计数,靠 PLC 程序扫描捕捉上升沿;脉冲太快、脉宽小于扫描周期 → 丢脉冲!高速脉冲必须 HSC。


方案 A:CTU+CTD 共用计数器标签

原理:同一个 Counter 标签,CTU 管【加脉冲】,CTD 管【减脉冲】,ACC 自动为净数量,支持负数。 标签类型:COUNTER,标签名例如 Part_Count

  • CU:进料信号(In_Sensor)上升沿 → ACC+1

  • CD:出料信号(Out_Sensor)上升沿 → ACC-1

  • RES:复位按钮(Reset_Btn)→ 清零 ACC、DN、OV、UN

梯形图 rung:

  1. In_Sensor → CTU Part_Count

  2. Out_Sensor → CTD Part_Count

  3. Reset_Btn → RES Part_Count

计数器状态位

  • Part_Count.ACC:当前净数量(可以负数!下限 -2147483648)

  • Part_Count.DN:ACC ≥ PRE 时 ON

  • Part_Count.UN:下溢(负数到头)

  • Part_Count.OV:上溢

 优点:自带边沿检测,不需要 ONS,写起来短;自带溢出 / 下溢位 , 缺点:PRE 是固定预设,不方便实时修改目标值;适合单纯个数统计,不适合工程量换算

补充:新版 Studio5000 FBD 里面直接拖 CTUD 功能块,CUEnable 加、CDEnable 减、Reset 复位,效果一样,一条块搞定


方案 B:ONS 上升沿 + ADD / SUB DINT 变量

适合:不仅单纯计数,还要乘系数、正负偏移、工程量换算

重点:ONS(One Shot)上升沿指令,保证一个脉冲只执行一次加减,不会因为 DI 一直 ON 每个扫描周期反复加

新建 DINT 标签:Net_Count(初始 0,可以为负数)

  1. 进料加 1 梯级:In_Sensor → ONS In_Pulse → ADD Net_Count 1 Net_Count

  2. 出料减 1 梯级:Out_Sensor → ONS Out_Pulse → SUB Net_Count 1 Net_Count

  3. 复位清零:Reset_Btn → MOV 0 Net_Count

扩展:不是 ±1,而是带系数加减

ONS Pos_Pulse → ADD Pos_Value K5 Pos_Value
ONS Neg_Pulse → SUB Pos_Value K5 Pos_Value

 直接支持负数、后面接 MUL 乘法做换算,完美匹配你前面问的负数乘法需求。

 优点:DINT 随便参与四则运算、比较、传到 HMI、配方;逻辑透明;Micro800/Compact/ControlLogix 全系列通用 , 缺点:必须记得加 ONS,漏加 ONS 会疯狂累加


两种方案对比

表格

项目CTU+CTD(COUNTER)ONS+ADD/SUB(DINT)
边沿内部自带,不用 ONS必须 ONS 抓上升沿
数据类型COUNTER 结构体,.ACC 是 DINTDINT,直接数学运算
负数支持,下溢 UN 位报警原生支持负数,无专门溢出位,自己加 CMP 判断
适合场景进出料计数、库存净数量工程量、偏移量、和其它公式联动、需要乘除换算
溢出自带 OV/UN 状态位需要自己写 GRT/LES 判断上下限

  1. 脉冲频率上限:取决于 PLC 任务周期,比如 10ms 任务,稳妥只用到 5~8Hz;超过就丢数,此时必须 HSC 高速计数器

  2. 机械触点抖动:行程开关、继电器触点,哪怕低速,也会多次跳变重复计数 → 加定时器防抖(TON 10~20ms)再送给 ONS/CTU

  3. 不要用下降沿随便计数,现场干扰容易误触发;优先上升沿

  4. ONS 是每个梯级独立,一个信号两个梯级计数,要分开两个 ONS 标签,不能共用同一个 ONS


示例:带防抖的完整 ONS+ADD 逻辑

  • In_Raw:原始 DI 触点信号

  • In_Debounce:TON 防抖,15ms

  • In_Pulse:ONS 上升沿 Rung1:In_Raw → TON In_Debounce Timer:=15Rung2:In_Debounce.DN → ONS In_Pulse → ADD Net_Count 1 Net_Count

收缩
  • 电话咨询

  • 13073017555
  • 添加微信客服