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