这就是我现在所拥有的
TYPE MyType: STRUCT
name: STRING[20];
input: INT;
output: INT;
END_STRUCT
END_TYPEPROGRAM PLC_PRG:
VAR
struct: MyType;
struct_NULL: MyType;
error: BOOL;
END_VAR
IF error THEN
struct := struct_NULL;
END_IF
END_PROGRAM是否有其他方法可以将结构设为空,而无需清除和使用struct_NULL
发布于 2020-02-24 16:59:20
只需使用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-22 17:11:36
是的,这是可行的,但你能保证没有人会在代码中写下这样的代码吗:
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中的初始值,而且我认为它更容易阅读和理解
https://stackoverflow.com/questions/60312509
复制相似问题