【问题标题】:Defining a falling edge detection in Codesys在 Codesys 中定义下降沿检测
【发布时间】:2017-07-13 02:10:33
【问题描述】:

对于我的一个程序,我需要梯形图中的常闭、定时关闭 (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 结束
ERROR 4250: F_TRIG (4): 另一个“ST”语句或 POU 结束
ERROR 4250: F_TRIG (7): 另一个“ST”语句或 POU 结束
错误 4250:F_TRIG (10):另一个“ST”语句或 POU 结束
ERROR 4250:F_TRIG (13):另一个“ST”语句或 POU 结束

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

我觉得没问题。怎么了?

运行 Codesys 2.3。

【问题讨论】:

    标签: timer plc codesys structured-text


    【解决方案1】:
    1. 删除END_FUNCTION_BLOCK
    2. 删除RETAIN。您可以保留功能块。不是功能块中的变量
    3. 底部的QMEM 未声明为任何内容。
    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 中)

    【讨论】:

    • 第 3 点,QMEM 被声明为 BOOL。看起来它们最后会有一个定义的值。
    • 我会回来详细说明我在做什么以及您的建议是否有效。
    • 我要做的是构建一个常闭定时关闭 (NCTC) 继电器。
    • 我试图复制你提出的函数,看看它做了什么,但在 1、4、7 和 10 上也失败了。
    • 看来您需要 TOF 块。 NCTC 是什么意思?第一次听到这个词。你需要休息时间吗?您需要在信号发送给此联系人一段时间后关闭联系人吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 2014-01-08
      • 2011-09-15
      相关资源
      最近更新 更多