清除结构化文本中整个结构的最佳方法是什么

tom*_*ift 1 plc st structured-text iec61131-3

这就是我现在的情况

TYPE MyType: STRUCT
    name: STRING[20];
    input: INT;
    output: INT;
    END_STRUCT
END_TYPE
Run Code Online (Sandbox Code Playgroud)
PROGRAM PLC_PRG:
    VAR
        struct:  MyType;
        struct_NULL:  MyType;
        error: BOOL;
    END_VAR

    IF error THEN
        struct := struct_NULL;
    END_IF
END_PROGRAM
Run Code Online (Sandbox Code Playgroud)

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

Qui*_*rzo 7

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

SysMemSet(
    pDest       := ADR(TestStruct), 
    udiValue    := 0, 
    udiCount    := SIZEOF(TestStruct)
);
Run Code Online (Sandbox Code Playgroud)

您可以为其编写一个简单的辅助函数:)

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


SysMemSet(
    pDest       := Target.pValue, 
    udiValue    := 0, 
    udiCount    := Target.diSize
);
Run Code Online (Sandbox Code Playgroud)

用法,适用于各种变量!

F_Clear(TestStruct);
Run Code Online (Sandbox Code Playgroud)