对于我的一个程序,我需要在梯形图中使用常闭,定时关闭(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。
答案 0 :(得分:2)
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
已经是codeys中的一种类型。需要声明为别的东西这是一个关于它应该如何看的例子。
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)
如果我理解正确,您希望输出为:
这与内置TP(定时脉冲)功能块相反。只需反转TP输出'Q'。