0

这就是我现在的样子

TYPE MyType: STRUCT
    name: STRING[20];
    input: INT;
    output: INT;
    END_STRUCT
END_TYPE
PROGRAM PLC_PRG:
    VAR
        struct:  MyType;
        struct_NULL:  MyType;
        error: BOOL;
    END_VAR

    IF error THEN
        struct := struct_NULL;
    END_IF
END_PROGRAM

是否有另一种方法可以使结构无效,而无需清除和使用struct_NULL

4

2 回答 2

3

只需使用SysMemSet(Codesys 库 SysMem)、MemSet(Codesys 库 MemoryUtils)或MEMSET(TwinCAT 3 库 Tc2_System)函数将所有数据设置为 0。

SysMemSet(
    pDest       := ADR(TestStruct), 
    udiValue    := 0, 
    udiCount    := SIZEOF(TestStruct)
);

你可以为它写一个简单的辅助函数:)

FUNCTION F_Clear : BOOL
VAR_INPUT
    Target : ANY;
END_VAR
VAR
END_VAR


SysMemSet(
    pDest       := Target.pValue, 
    udiValue    := 0, 
    udiCount    := Target.diSize
);

用法,适用于各种变量!

F_Clear(TestStruct);
于 2020-02-24T08:59:20.313 回答
1

是的,这会起作用,但你能保证没有人会在代码中写出这样的东西:

struct_NULL.input := 7;

所以我更愿意编写一个简短的函数,将所有值设置为默认值:

FUNCTION F_setToDefault_MyStruct : MyStruct
VAR
    DefaultStruct   : MyStruct;
END_VAR

F_setToDefault_MyStruct := DefaultStruct;

所以在程序中你可以调用:

//set struct to default values
TestStruct:=F_setToDefault_MyStruct();

我知道,还有很多代码,但是没有人可以更改 struct_NULL 中的初始值,而且我认为它更容易阅读和理解

于 2020-02-22T09:11:35.900 回答