在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'。

  1. 删除END_FUNCTION_BLOCK
  2. 删除RETAIN。您可以保留一个功能块。不是功能块中的变量
  3. QMEM底部没有声明为任何东西。
  4. F_TRIG已经是码型中的一种类型。需要声明为别的东西

下面是它应该看起来的一个例子。

FUNCTION_BLOCK CustomTrig  
VAR_INPUT 
    CLK :  BOOL; 
END_VAR 
VAR_OUTPUT 
    Q : BOOL; 
END_VAR 
VAR 
    MEM : BOOL := 1;  
END_VAR 

你能详细解释一下你想要做什么吗?我可能能够帮助你开发一些东西(或者可能已经内置了一些代码)

+0

点3,'Q'和'MEM'被声明为'BOOL'。看起来他们最后会有一个定义的值。 – Mast

+0

我会回来详细说明我在做什么以及您的建议是否有效。 – Mast

+0

我想要做的是建立一个常闭闭合定时闭合(NCTC)继电器。 – Mast