学工控当工人 2024-06-12 17:43 采纳率: 0%
浏览 48

博途V15定时器和计数器应用

img


如图所示,计数器设定值为3,当“start”置1后,两个定时器循环工作,当循环次数等于3,即计数器实际值等于3时,Tag_27为1。为什么循环没有停止,只有当计数器等于4后,循环停止?循环次数为什么是4次,而不是三次?

补充:当第三次循环结束,计数器当前值为3,Tag_27已经为1。第一个计时器IN为0,为什么会进入第四次循环?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-12 17:43
    关注

    引自免费微信小程序:皆我百晓生

    从描述来看,问题的核心在于理解为何计数器的实际值达到设定值+1(这里是4)时,循环才停止,而非在达到设定值(这里是3)时就停止。这通常与计数器的工作原理有关,尤其是在涉及到上升沿触发的场景。

    在博途V15(TIA Portal V15)中,计数器(CTU)的逻辑设计是基于事件的,具体到此例,是基于定时器完成信号的上升沿进行计数。每当一个定时器完成,计数器检测到其输入端(IN)由0变1的上升沿,计数值增加1。因此,要理解为什么循环次数为4次,我们需要深入分析计数器的工作流程:

    1. 初始化状态:计数器的当前值(CV)为0,设定值(PV)为3。
    2. 第一次循环
      • “Start”信号置1,开始第一个定时器T1。
      • T1完成后,输出变为1,触发计数器的上升沿检测,CV从0变为1。
    3. 第二次循环
      • 开始第二个定时器T2。
      • T2完成后,输出变为1,再次触发计数器,CV从1变为2。
    4. 第三次循环
      • 开始第三个定时器T3。
      • T3完成后,输出变为1,第三次触发计数器,CV从2变为3。
    5. 第四次循环
      • 即使PV已经设置为3,计数器在CV达到3时并不会立即停止计数,而是等待下一个上升沿。
      • 开始第四个定时器T4。
      • T4完成后,输出变为1,触发计数器,CV从3变为4。
      • 当CV达到4时,计数器的实际值等于PV+1,此时计数器的状态才满足停止条件,循环结束。

    解决方案

    如果目标是在计数器达到设定值时停止循环,可以调整计数器的设定值(PV)为循环次数减1,或者在软件逻辑中添加额外的条件检查,确保在CV达到PV时停止进一步的计数动作。例如,在CTU之后添加一个比较指令(如CMP),用来比较CV和PV的值,一旦相等,通过控制逻辑停止后续的定时器启动。

    代码示例

    // 假设PV设定为3,目标是在计数器达到3时停止
    // 使用比较指令(CMP)实现
    VAR
        cmpResult: BOOL;
    END_VAR
    
    // 计数器逻辑
    CTU Q:= Tag_27, IN:= Tag_25, PV:= 3, CV:= Tag_29, R:= Tag_24;
    
    // 比较CV和PV的值
    cmpResult := Tag_29 = 3; // 直接比较,无需CMP指令,假设Tag_29为CV
    
    // 控制逻辑,当CV达到PV时,停止定时器
    IF cmpResult THEN
        Tag_25 := FALSE; // 禁止定时器启动
    END_IF
    

    这样,一旦计数器的当前值等于设定值,Tag_25将被置为0,阻止新的定时器启动,从而在计数器达到期望的循环次数时停止整个过程。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 6月12日
  • 创建了问题 6月12日