You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Codesys为Weintek PLC编写梯形图实时累加批次计数器秒数?

实时累加批次计数器秒数的梯形图方案(Weintek PLC + Codesys)

核心思路是逐扫描周期捕捉批次计数器的增量,仅累加正增量,无需等待批次结束即可实时更新总累加值。以下是具体实现步骤:

1. 定义变量

在Codesys变量表中创建以下变量(可放在全局变量区或自定义功能块内):

  • g_iBatchCounter:INT,映射Weintek PLC的批次计数器实时值(只读)
  • g_iPrevBatchCounter:INT,存储上一扫描周期的批次计数器值
  • g_iTotalAccumulator:DINT,总累加秒数(用双整数避免长时间运行溢出)
  • g_bBatchStartFlag:BOOL,标记新批次启动状态

2. 梯形图梯级逻辑

梯级1:批次切换检测

  • 输入逻辑:g_iBatchCounter < g_iPrevBatchCounter AND g_iBatchCounter <= 10(阈值可根据实际计数器波动调整)
  • 输出动作:置位g_bBatchStartFlag(触发新批次标记)

梯级2:实时增量累加

  • 输入逻辑:NOT g_bBatchStartFlag AND (g_iBatchCounter - g_iPrevBatchCounter) > 0
  • 执行动作:g_iTotalAccumulator := g_iTotalAccumulator + (g_iBatchCounter - g_iPrevBatchCounter)

    仅累加正增量,避免批次切换时的反向扣减

梯级3:更新状态与复位标志

  • 无条件执行:
    1. g_iPrevBatchCounter := g_iBatchCounter(保存当前周期计数器值,供下一周期对比)
    2. g_bBatchStartFlag := FALSE(复位批次启动标志)

3. 优化注意事项

  • 溢出防护:若系统长期运行,建议将g_iTotalAccumulator改为LINT(长整数)类型,彻底避免溢出。
  • 扫描周期适配:如果PLC扫描周期大于1秒,可能遗漏计数器变化,可改用1秒定时中断程序执行累加逻辑,保证每秒捕捉一次计数器值。
  • 阈值校准:批次切换的阈值(如示例中的<=10)需根据现场计数器的初始波动调整,避免误触发批次标记。

内容的提问来源于stack exchange,提问作者Modicon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:12:21