在Codesys中定义一个下降沿检测
问题描述:
对于我的一个程序,我需要一个梯形图中的常闭,定时关闭(NCTC)继电器。在Codesys中定义一个下降沿检测
我不知道实现这样的标准方法,所以我试图自己构建一个。我目前的方法需要一个下降沿检测。我在一本书的后面找到了这样一个检测器的代码:“IEC 61131-3: 编程工业 系统”(第2版,第327页)。看起来是这样的:
FUNCTION_BLOCK F_TRIG (* falling edge *)
VAR_INPUT
CLK : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR RETAIN
MEM : BOOL := 1; (* initialise edge flag *)
END_VAR
Q := NOT CLK AND NOT MEM; (* recognise falling edge *)
MEM := NOT CLK; (* reset edge flag *)
END_FUNCTION_BLOCK
这给了我整整5错误(忽略构建因为那些失败的):POU的另一个 'ST' 的语句或结束:
错误4250:F_TRIG(1)预期
ERROR 4250:F_TRIG(4):POU的另一个 'ST' 的语句或结束预计
ERROR 4250:F_TRIG(7):POU的另一个 'ST' 的语句或结束预计
ERROR 4250:F_TRIG(10) :另一个'ST'声明或POU结束预计
ERROR 4250:F_TRIG(13):POU的另一个“ST”的语句或结束预计
我正确配置POU的类型是一个功能块和POU的是ST的语言。我怀疑我的语法是生锈的,但我愿意提供建议。特别是如果我以一种错误的方式解决这个问题。
它看起来对我来说没问题。出了什么问题?
运行Codesys 2.3。
答
如果我理解正确的话,你所要的输出是:
- TRUE空闲时(常闭)计时器期间
- FALSE
- 时间到期时
这是真的与内置的TP(定时脉冲)功能块相反。只需反转TP输出'Q'。
答
- 删除
END_FUNCTION_BLOCK
- 删除
RETAIN
。您可以保留一个功能块。不是功能块中的变量 -
Q
和MEM
底部没有声明为任何东西。 -
F_TRIG
已经是码型中的一种类型。需要声明为别的东西
下面是它应该看起来的一个例子。
FUNCTION_BLOCK CustomTrig
VAR_INPUT
CLK : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
MEM : BOOL := 1;
END_VAR
你能详细解释一下你想要做什么吗?我可能能够帮助你开发一些东西(或者可能已经内置了一些代码)
点3,'Q'和'MEM'被声明为'BOOL'。看起来他们最后会有一个定义的值。 – Mast
我会回来详细说明我在做什么以及您的建议是否有效。 – Mast
我想要做的是建立一个常闭闭合定时闭合(NCTC)继电器。 – Mast