在Codesys中定义下降沿检测

时间:2017-02-22 20:19:00

标签: timer plc codesys structured-text

对于我的一个程序,我需要在梯形图中使用常闭,定时关闭(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'声明或预期结束预期的   错误4250:F_TRIG(4):另一个' ST'声明或预期结束预期的   错误4250:F_TRIG(7):另一个' ST'声明或预期结束预期的   错误4250:F_TRIG(10):另一个' ST'声明或预期结束预期的   错误4250:F_TRIG(13):另一个' ST'声明或预期结束预期

我正确地将POU的类型配置为功能块,并将POU的语言配置为ST。我怀疑我的语法是生锈的,但我可以提出建议。特别是如果我以一种错误的方法解决这个问题。

对我来说没问题。出了什么问题?

运行Codesys 2.3。

2 个答案:

答案 0 :(得分:2)

  1. 删除RETAIN
  2. 删除Q。您可以保留功能块。不是功能块中的变量
  3. 底部的
  4. MEMF_TRIG未被声明为任何内容。
  5. FUNCTION_BLOCK CustomTrig VAR_INPUT CLK : BOOL; END_VAR VAR_OUTPUT Q : BOOL; END_VAR VAR MEM : BOOL := 1; END_VAR 已经是codeys中的一种类型。需要声明为别的东西
  6. 这是一个关于它应该如何看的例子。

    import java.util.Scanner;
    public class Bigger{
    
    public static void main(String [] args)
    {
    // declare variables
    Scanner keyboardIn = new Scanner(System.in);
    String userName = new String();
    String fName = new String();
    int numberLetters = 0;
    int bigLetters=0;
    char firstLetter;
    
    // get user name from the user
    System.out.print("Please enter your user name: ");
    userName = keyboardIn.nextLine();
    
     // get second name from the user
    System.out.print("Please enter your second name: ");
    
     fName = keyboardIn.nextLine();
    
     // use an appropriate method to find the number of letters
     numberLetters = userName.length();
     bigLetters = fName.length();
    
    if(numberLetters > bigLetters)
    {
        System.out.print("String 1 Is the longest string ");
    }
    else
    {
        System.out.print("String 2 Is the longest string "); 
     }
     }
     }
    

    您能详细解释一下您正在尝试做些什么吗?我或许可以帮助你开发一些东西(或者代码中可能已经内置了一些东西)

答案 1 :(得分:1)

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

  • 空闲时关闭(常闭)
  • 计时器期间错误
  • 时间到期时为TRUE

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