我正在尝试确定脉冲输入的频率,这是泵的转速计反馈。我试图创建两个定时器,每个定时器都是第二个,并且每次有上升沿时都会计数。根据一秒钟的上升沿数,我可以计算出频率。可悲的是,我无法找到功能或功能块。任何有关生成函数的帮助都太棒了!
此外,我附上了我试图使用的代码,但似乎没有用 - 我认为一些新鲜的眼睛可能能够发现我错过的东西。
tonPressureTachoFeedback1(IN:=,PT:=T#1S,Q=>,ET=>); (*Pressure Side Tacho Timer 1*)
tonPressureTachoFeedback2(IN:=,PT:=T#1S,Q=>,ET=>); (*Pressure Side Tacho Timer 2*)
IF stPRessurePump.iTachoFeedbackRAW>900 (*Threshold to cross to be counted as a rising edge*)
AND tonPressureTachoFeedback1.Q=FALSE
AND tonPressureTachoFeedback2.IN=FALSE THEN
tonPressureTachoFeedback2.IN:=FALSE;
iPressureRECount1:=iPressureRECount1+1; (*Increment Counter*)
ELSIF tonPressureTachoFeedback1.Q THEN
tonPressureTachoFeedback2.IN:=TRUE;
rPRessureRPM:=iPressureRECount1*10; (*Generate RPM*)
END_IF
IF stPRessurePump.iTachoFeedbackRAW>900 (*Threshold to cross to be counted as a rising edge*)
AND tonPressureTachoFeedback2.Q=FALSE
AND tonPressureTachoFeedback1.IN=FALSE THEN
tonPressureTachoFeedback1.IN:=FALSE;
iPressureRECount2:=iPressureRECount2+1; (*Increment Counter*)
ELSIF tonPressureTachoFeedback2.Q THEN
tonPressureTachoFeedback1.IN:=TRUE;
rPRessureRPM:=iPressureRECount2*10; (*Calculate RPM*)
END_IF
答案 0 :(得分:0)
首先,你的计时器都没有被激活,因为它们的IN:= TRUE都取决于另一个计时器用完了。 其次,您似乎将计数器链接到一个或两个计时器用完,它们至少应该触发原始值的正转换。 此外,计数器永远不会重置,这意味着如果它们确实触发了,频率就会不断增长。
以下代码就是我如何做到这一点,重用一些变量加上一个新的计时器和一个新的rising_trigger。正如他们的评论所描述的那样,这三个部分各自都有自己相当独立的任务。
我希望这会有所帮助: - )
VAR
tonPulse1s: TON;
trigTachoFeedback: R_TRIG;
END_VAR
tonPulse1s(IN := TRUE, PT := t#1s); (* Always run the timer *)
trigTachoFeedback(CLK := (stPRessurePump.iTachoFeedbackRAW > 900)); (* Always update the trigger on crossed treshold *)
IF trigTachoFeedback.Q THEN
iPressureRECount1 := iPressureRECount1 + 1; (*Increment Counter*)
END_IF
IF tonPulse1s.Q THEN (* One second elapsed, calc RPM, restart timer and counter *)
rPRessureRPM := iPressureRECount1 * 10;
iPressureRECount1 := 0;
tonPulse1s(IN := FALSE);
tonPulse1s(IN := TRUE);
END_IF