我感到困惑的是,plc的循环执行是否可以看作是一个被无限循环包围的程序。如果没有,它们之间有什么区别?
答案 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();
}
当然,也有一些系统自己的程序和诊断程序要运行,但是基本上是这样的:
如果周期时间超过10毫秒,则是否可以抛出异常 。取决于平台和设置。 PLC的想法是每次都以相同的间隔运行“任务”。因此,您(应该)始终知道该程序的最后执行时间是10毫秒前。这样可以帮助您控制时差。
对于一些非自动化程序员来说,似乎很难理解基本的PLC程序流程。重要的是要理解,例如,您可以在程序中多次覆盖输出变量,并且只有最后一个值将被保存到I / O内存中。