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



这就是我现在的

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

只需使用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);

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

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中的初始值,我认为阅读和理解要容易得多

最新更新