0

在我的项目中,我有一个类型:

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 := ??? )];

但这似乎不对。如果只有一层深度的自定义结构,它可以被简化,对于这个应用程序,我可以做到这一点。但是,我仍然认为我的语法不正确。

4

2 回答 2

2

new其他语言中的等价物是什么?

这个的类比是

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

于 2019-02-01T07:06:52.163 回答
1

没有办法以方式初始化它"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;

我希望我正确理解了你的问题。

于 2019-02-01T06:33:42.327 回答