1

对于我的一个程序,我需要梯形图中的常闭、定时关闭 (NCTC) 继电器。

我不知道实现这种方法的标准方法,所以我正在尝试自己构建一个。我目前的方法需要一个下降沿检测。我在一本书的后面找到了这种检测器的代码:“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 个错误(忽略构建失败):

错误 4250:F_TRIG (1):另一个“ST”语句或 POU 结束
错误 4250:F_TRIG (4):另一个“ST”语句或 POU 结束
错误 4250:F_TRIG (7):另一个“ST”语句或预期 POU 结束
错误 4250:F_TRIG (10):预期另一个“ST”语句或预期 POU 结束
错误 4250:F_TRIG (13):预期另一个“ST”语句或 POU 结束

我正确地将 POU 的类型配置为功能块,并将 POU 的语言配置为 ST。我怀疑我的语法生疏了,但我愿意接受建议。特别是如果我用一种完全错误的方法来解决这个问题。

在我看来没问题。怎么了?

运行 Codesys 2.3。

4

2 回答 2

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

这是一个关于它的外观的示例。

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

你能更详细地解释一下你想要做什么吗?我也许可以帮助您开发一些东西(或者可能已经在 codesys 中内置了一些东西)

于 2017-02-22T22:24:38.253 回答
1

如果我理解正确,您希望输出为:

  • 空闲时为 TRUE(常闭)
  • 计时器期间为 FALSE
  • 时间到期时为 TRUE

这与内置的 TP(定时脉冲)功能块相反。只需反转 TP 输出“Q”。

于 2017-02-22T20:32:48.820 回答