在结构化文本语法中初始化自定义类型数组

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

Link to the online help

//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 不是你需要的数据原型,而是已经初始化的变量。