plc的扫描周期与while(1){...}放弃的代码有什么区别?

时间:2018-07-19 07:51:07

标签: plc

我感到困惑的是,plc的循环执行是否可以看作是一个被无限循环包围的程序。如果没有,它们之间有什么区别?

2 个答案:

答案 0 :(得分:3)

您的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品牌,但通常将在每个扫描周期(即具有相同的周期时间)中完成。

答案 1 :(得分:1)

一个“任务”的PLC执行可能类似于以下内容。您可以认为一个PLC任务循环(while循环)类似于标准编程中的线程。

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

    //Run user PLC code
    Programs();

    //Write hardware outputs
    WriteOutputs();

    //Wait until cycle time has been elapsed
    Wait();
}

当然,也有一些系统自己的程序和诊断程序要运行,但是基本上是这样的:

  1. 读取I / O输入值并将其放入用户程序的内存中
  2. 运行用户程序代码
  3. 将输出变量从内存写入I / O
  4. 等待直到建立循环时间。例如,程序可能需要1毫秒,而循环时间可能是10毫秒。在这种情况下,将等待9毫秒,直到同一件事再次运行。

如果周期时间超过10毫秒,则是否可以抛出异常 。取决于平台和设置。 PLC的想法是每次都以相同的间隔运行“任务”。因此,您(应该)始终知道该程序的最后执行时间是10毫秒前。这样可以帮助您控制时差。

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