在结构化文本语法中初始化自定义类型数组
Initialize Array of Custom Types in Structured Text Syntax
在我的项目中,我有这样的类型:
TYPE myDataStruct :
STRUCT
A : UINT;
B : WORD;
C : REAL;
D : Custom_Obj;
END_STRUCT
END_TYPE
而且我需要保留一个这种类型的数组作为持久内存。我不能只使用 VAR RETAIN
,因为这段特殊的内存需要通过下载持续存在。我使用的控制器有办法做到这一点,但为了让它工作,我需要能够将数组设置为等于初始值。所以如果我声明了
myarray := ARRAY[0..20] OF myDataStruct;
然后如何将此数组初始化为空白数组? new
在其他语言中的等价物是什么?
我猜对了
myarray := [21(A := 0,
B := '',
C := 0.0,
D := ??? )];
但这似乎不对。如果只有一层深度的自定义结构并且对于这个应用程序我可以做到这一点,它可以被简化。但是,我仍然认为我的语法不正确。
无法以"x = new struct()"
方式初始化它。据我所知,你也不能在代码中用 myarray = [1, 2, 3] etc
之类的东西分配整个数组。
如果您只是想将其设置为空值,如 0、'' 等,那么我会使用两种方法:
1.使用MEMSET
函数将所有字节设置为0
//Something like
MemSet(
pbyBuffer := ADR(myarray), //Address of the variable
byValue := 0, //Byte that address is filled with
dwSize := SIZEOF(myarray) //How many bytes? (variable size)
)
2。创建一个虚拟变量并将其分配给 myarray
变量始终初始化为零,因此 EmptyArray 值全部为 0/空等。
VAR
EmptyArray : ARRAY[0..20] OF myDataStruct;
END_VAR
//In the code
myarray := EmptyArray;
希望我正确理解了你的问题。
What is the equivalent of new
in other languages?
类似的是
VAR
EmptyArray : ARRAY[0..20] OF myDataStruct;
END_VAR
如果您想使用默认值预填充它
VAR
EmptyArray : ARRAY[0..20] OF myDataStruct := [
(A := 100, B := 200, С := 0.0, D := ???),
(A := 34, B := 45, С := 0.1, D := ???),
..... etc
];
END_VAR
对于 CoDeSys 2.3,删除 [
和 ]
。
你要明白的是 EmptyArray
不是你需要的数据原型,而是已经初始化的变量。
在我的项目中,我有这样的类型:
TYPE myDataStruct :
STRUCT
A : UINT;
B : WORD;
C : REAL;
D : Custom_Obj;
END_STRUCT
END_TYPE
而且我需要保留一个这种类型的数组作为持久内存。我不能只使用 VAR RETAIN
,因为这段特殊的内存需要通过下载持续存在。我使用的控制器有办法做到这一点,但为了让它工作,我需要能够将数组设置为等于初始值。所以如果我声明了
myarray := ARRAY[0..20] OF myDataStruct;
然后如何将此数组初始化为空白数组? new
在其他语言中的等价物是什么?
我猜对了
myarray := [21(A := 0,
B := '',
C := 0.0,
D := ??? )];
但这似乎不对。如果只有一层深度的自定义结构并且对于这个应用程序我可以做到这一点,它可以被简化。但是,我仍然认为我的语法不正确。
无法以"x = new struct()"
方式初始化它。据我所知,你也不能在代码中用 myarray = [1, 2, 3] etc
之类的东西分配整个数组。
如果您只是想将其设置为空值,如 0、'' 等,那么我会使用两种方法:
1.使用MEMSET
函数将所有字节设置为0
//Something like
MemSet(
pbyBuffer := ADR(myarray), //Address of the variable
byValue := 0, //Byte that address is filled with
dwSize := SIZEOF(myarray) //How many bytes? (variable size)
)
2。创建一个虚拟变量并将其分配给 myarray
变量始终初始化为零,因此 EmptyArray 值全部为 0/空等。
VAR
EmptyArray : ARRAY[0..20] OF myDataStruct;
END_VAR
//In the code
myarray := EmptyArray;
希望我正确理解了你的问题。
What is the equivalent of
new
in other languages?
类似的是
VAR
EmptyArray : ARRAY[0..20] OF myDataStruct;
END_VAR
如果您想使用默认值预填充它
VAR
EmptyArray : ARRAY[0..20] OF myDataStruct := [
(A := 100, B := 200, С := 0.0, D := ???),
(A := 34, B := 45, С := 0.1, D := ???),
..... etc
];
END_VAR
对于 CoDeSys 2.3,删除 [
和 ]
。
你要明白的是 EmptyArray
不是你需要的数据原型,而是已经初始化的变量。