我正在与PLC合作,试图设计一个水箱。在设计的一个部分,我被要求创建一个时钟脉冲发生器。我目前正在尝试使用梯形图来做这件事。
我相信我的逻辑是正确的,只是似乎不能把它放在一起。我想要一个计数器来对我产生的时钟脉冲进行计数,然后我将这些脉冲存储在数据存储器中,以确保在系统关闭和打开时保持计数。
问题是我如何设计这个时钟脉冲发生器。
亲切的问候
发布于 2016-01-26 21:46:29
有几种不同的方法来创建脉冲发生器(或者在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

如果你想要计算脉冲的数量并将这个值存储到一个变量中,你可以使用一个简单的CTU (计数器递增)模块,它在所有的plc语言中都可用。

功能的评审
StartPulse变量可以是启动计数器所需的任何值。在我的例子中,我只使用了一个打开的内部bool变量。如果你想让这个定时器在plc启动时自动启动,那么只需将这个变量初始化为true即可。因为StartPulse只在信号的上升沿工作,所以LatchPulseInitial线圈只会被设置一次。LatchPulseInitial变量为真时,这将启动ton1一个Timer On Delay (TON)功能块。这将延迟块的输出在PT时间内打开(在我的情况下,500ms).ton1输出将打开。这将打开Timer1Done变量并关闭Timer2Done和LatchPulseInitial。现在LatchPulseInitial已经被关闭了,它再也不会干扰程序了,因为它只能通过StartPulse的上升沿来打开。注意:一旦块到达PT ,输出将一直保持,直到块的输入为removed.为止

Timer1Done现在在ton2上,因此将开始计数,直到到达PT为止。一旦到达PT,该块的输出就会打开。这将重置Timer1Done并设置Timer2Done这将再次启动ton1,从而重新开始整个过程。PulseOutput,这是您正在寻找的实际脉冲输出,当Timer2Done为true时,我将其设置为true。这是因为当该变量为true时,它是脉冲发生器的高状态。当Timer1Done为true时,它是脉冲的低状态generator.PulseOutput变为true,它将触发CTU上的输入,从而将CV (current value)中的变量计数递增1。如果你打算在你的程序中的许多地方使用这个逻辑,或者你打算在将来重用它,我会把它放到它自己的功能块中,这样你就不需要每次都重复这个逻辑,你想做这种类型的计时器。
发布于 2016-01-27 05:51:25
有一次我不得不创建一个BLINK FB。它是以结构化文本形式编写的。但它适合在梯形逻辑程序中使用,并且IN/OUT变量的命名方式类似于TON样式。闪烁以Q= TRUE开始。如果你想从FALSE开始,只需倒置q并交换Times!
FUNCTION_BLOCK BLINK
VAR_INPUT
IN : BOOL;
PT_ON : TIME;
PT_OFF : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
VAR
rtIN : R_TRIG;
tonBlink : TON;
END_VARrtIN(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发布于 2016-02-19 09:26:21
在我看来,这是最直接的方法,使用1计时器,递增计数器和模运算符:
Blink function in ladder
还要注意的是,如果你的PLC没有模,那么每次都乘以-1。
https://stackoverflow.com/questions/35012891
复制相似问题