Clock PLC的时钟脉冲发生器
我正在与PLC合作,试图设计一个水箱。在设计的一部分,我被要求创建一个时钟脉冲发生器。我目前正在尝试使用梯形图来实现这一点 我相信我的逻辑是正确的,只是似乎不能把它放在一起。我需要一个计数器来计算我产生的时钟脉冲,然后我将这些脉冲存储在数据存储器中,以确保在系统关闭和打开时保留计数 问题是我如何设计这个时钟脉冲发生器Clock PLC的时钟脉冲发生器,clock,plc,Clock,Plc,我正在与PLC合作,试图设计一个水箱。在设计的一部分,我被要求创建一个时钟脉冲发生器。我目前正在尝试使用梯形图来实现这一点 我相信我的逻辑是正确的,只是似乎不能把它放在一起。我需要一个计数器来计算我产生的时钟脉冲,然后我将这些脉冲存储在数据存储器中,以确保在系统关闭和打开时保留计数 问题是我如何设计这个时钟脉冲发生器 有几种不同的方法来创建脉冲发生器(或在plc世界中通常称为闪烁计时器)。事实上,许多plc编程软件都在其功能块库中内置了此功能块。但如果他们不这样做,或者你只是想做你自己的,你可以
有几种不同的方法来创建脉冲发生器(或在plc世界中通常称为闪烁计时器)。事实上,许多plc编程软件都在其功能块库中内置了此功能块。但如果他们不这样做,或者你只是想做你自己的,你可以这样做
VAR
ton1: TON;
ton2: TON;
StartPulse: BOOL;
startPulseTrig: R_TRIG;
LatchPulseInitial: BOOL;
PulseOutput: BOOL;
Timer1Done: BOOL;
Timer2Done: BOOL;
PulseWidth:TIME:=t#500ms;
END_VAR
如果要计算脉冲数并将该值存储到变量,可以使用所有plc语言中可用的简单CTU(计数器)块
功能审查
StartPulse
变量可以是启动计数器所需的任何变量。在我的例子中,我只是使用了一个我打开的内部bool
变量。如果您希望此计时器在plc启动时自动启动,则只需将此变量初始化为true
。由于StartPulse
仅在信号的上升沿工作,因此LatchPulseInitial
线圈只能设置一次LatchPulseInitial
变量变为真时,将启动ton1
aTimer On Delay(TON)
功能块。这将在PT
的时间内延迟块的输出打开(在我的情况下,我有500毫秒)ton1
输出将开启。这将打开Timer1Done
变量,并关闭Timer2Done
和LatchPulseInitial
。既然LatchPulseInitial
已关闭,它将不再干扰程序,因为它只能通过StartPulse
的上升沿打开注意:一旦块达到PT
时,输出将保持打开,直到块的输入被删除。Timer1Done
现在处于打开状态,因此ton2
将开始计数,直到达到PT
。一旦达到PT
,该块的输出将打开。这将重置Timer1Done
并设置Timer2Done
这将再次启动ton1
,从而重新启动整个过程PulseOutput
,这是您正在寻找的实际脉冲输出,当Timer2Done
为真时,我将其设置为真。这是因为当该变量为true
时,它是脉冲发生器的高电平状态。当Timer1Done
为真时,脉冲发生器处于低电平状态PulseOutput
变为true
时,它将触发CTU
上的输入,从而将CV(当前值)
中变量的计数增加1如果你打算在你的程序中的许多地方使用这个逻辑,或者你打算在将来重用它,我会把它制作成它自己的功能块,这样你就不必每次都重复这个逻辑来制作这种类型的计时器。有几种不同的方法来创建一个脉冲发生器(或在plc世界中通常被称为闪烁计时器)。事实上,许多plc编程软件的功能块库中都内置了此功能块。但是,如果它们没有,或者您只想自己创建,您可以这样做
VAR
ton1: TON;
ton2: TON;
StartPulse: BOOL;
startPulseTrig: R_TRIG;
LatchPulseInitial: BOOL;
PulseOutput: BOOL;
Timer1Done: BOOL;
Timer2Done: BOOL;
PulseWidth:TIME:=t#500ms;
END_VAR
如果要计算脉冲数并将该值存储到变量,可以使用所有plc语言中可用的简单CTU(计数器)块
功能审查
StartPulse
变量可以是任何您想要的启动计数器的变量。在我的例子中,我只是使用了一个内部bool
变量,我打开了该变量。如果您想在plc启动时自动启动计时器,那么只需将该变量初始化为true
。因为StartPulse
仅在e信号上升沿闭锁脉冲初始线圈将只设置一次
LatchPulseInitial
变量变为真时,将启动ton1
aTimer On Delay(TON)
功能块。这将延迟块的输出,使其在PT
时间内不打开(在我的情况下,我有500毫秒)ton1
输出将打开。这将打开Timer1Done
变量,并关闭Timer2Done
和LatchPulseInitial
。现在LatchPulseInitial
已关闭,它将不再干扰程序,因为它只能由StartPulse的上升沿
注意:一旦块达到PT
时,输出将保持打开,直到块的输入被删除。Timer1Done
现在处于打开状态,因此ton2
将开始计数,直到达到PT
为止。一旦达到PT
,该块的输出将打开。这将重置Timer1Done
并设置Timer2Done
这将再次开始ton1
,从而重新开始整个过程PulseOutput
,这是您正在寻找的实际脉冲输出,当Timer2Done
为true时,我将其设置为true。这是因为当此变量为true
时,它是脉冲发生器的高电平状态。当Timer1Done
为true时,它是t
rtIN(CLK := IN);
IF tonBlink.Q OR rtIN.Q THEN
(*Toggle Output*)
Q := NOT Q;
(*Timer Reset call, important to call timer twice in same cycle for correct Blink Time*)
tonBlink(IN:= FALSE);
(*Set corresponding Time*)
IF Q THEN
tonBlink.PT := PT_ON;
ELSE
tonBlink.PT := PT_OFF;
END_IF
END_IF
(*Timer Run call*)
tonBlink(IN:= IN);
IF IN THEN
ET := tonBlink.ET;
ELSE
ET := T#0S;
Q := FALSE;
END_IF