plc扫描周期和while(1){...}包围的代码之间有什么区别?


如果
2024-11-01 12:44:53 (4月前)
  1. 我很困惑,plc的循环执行是否可以看作是由无限循环包围的程序。如果没有,它们之间有什么区别?

3 条回复
  1. 0# 爱我真好 | 2019-08-31 10-32



    你的while(1)类比是对PLC的一个很好的解释

    循环执行
    </强>
    作品。



    首先,您通常不需要进行while(1)循环,因为PLC可以设置为循环调用特定的主任务,功能或块。然后,此任务应该轮流调用程序的所有其他必要部分,就像while循环一样。

    如何设置主要任务取决于您的PLC品牌,例如西门子S7将调用’OB1’块,基于Codesys的PLC将调用每个中的’MAIN’程序块

    扫描周期
    </强>


    让我们假设你希望你的程序运行一个

    周期
    </强>
    不超过10毫秒。



    有些PLC有

    以恒定间隔触发扫描周期
    </强>
    。这将允许您像您的要求一样10毫秒的恒定循环时间。

    如果程序的执行总是花费的时间少于循环时间,那么一切都很好,并且PLC将在剩余的扫描周期中处于空闲状态,直到下次调用它为止。有效/空闲比率将很好地指示PLC的加载量。

    如果超过循环时间,PLC可能会跳过一个循环,在下一个循环中立即尝试赶上,发出故障信号或停止PLC。或者上面的任何组合,所以你可能需要知道如何对它作出反应。



    其他PLC有

    上一个循环结束后立即触发扫描周期
    </强>
    。这将为您提供更快但可变的执行。例如,扫描周期可以在4-6ms之间变化,因为空闲时间被切除,这再次低于10ms周期时间的要求。

    在这种情况下,您还应该监控周期时间,并制定一个计划,以确定如何应对它超出您的要求。如果PLC达到极限,可能会设置PLC以发出故障信号。



    还要考虑,PLC需要读取输入和写入输出作为扫描周期的一部分或与扫描周期相关。如何再次设置取决于PLC品牌,但通常它将在每个扫描周期中完成,即具有相同的周期时间。


  2. 1# 如果 | 2019-08-31 10-32



    一个“任务”的PLC执行可能看起来像下面这样。您可以认为一个PLC任务循环(while循环)类似于标准编程中的线程。




    1. while(1)
      {
      //Read hardware inputs etc.
      ReadInputs();

    2. //Run user PLC code
    3. Programs();
    4. //Write hardware outputs
    5. WriteOutputs();
    6. //Wait until cycle time has been elapsed
    7. Wait();
    8. }

    9. </code>


    当然,还有一些系统自己的程序和诊断程序可以运行,但基本上这个想法如下:




    1. 读取I / O输入值并将其放入内存中以供用户程序使用




    2. 用户
      </强>
      程序代码


    3. 将输出变量从内存写入I / O.


    4. 等到周期时间确定。例如,程序可能需要1毫秒,循环时间可能是10毫秒。在那种情况下,等待9毫秒,直到同样的东西再次运行。

    5. </醇>


      如果循环时间超过10毫秒,则异常

      可以
      </强>
      抛出或不抛出。取决于平台和设置。 PLC的想法是每次都以相同的间隔运行“任务”。那么你 (

      应该

      )总是知道程序执行的最后一次是10毫秒前。这有助于控制,因为你知道时差。



      对于一些非自动化程序员来说,似乎很难理解基本的PLC程序流程。重要的是要了解您可以在程序中多次覆盖输出变量,并且只有最后一个值将保存到I / O内存中。


登录 后才能参与评论