首页 > 解决方案 > Codesys 将元素添加到派生结构

问题描述

是否可以将元素添加到 struct.

TYPE StructBase:
STRUCT
   Start : INT;
   Complete : INT;
END_STRUCT
END_TYPE

StructDerived : StructBase;

StructDerived.StateInit : INT;
StructDerived.StateMoveFwd : INT;

StructDerived 的元素将在“枚举”函数中编号。完成后,StructDerived 元素用于 case 语句。

这个想法是准备一个完整的抽象函数,并准备好我需要的基本功能。当这个功能被扩展时,应该清楚在哪里添加什么。因此,例如机器中的所有单元都具有相同的布局。

我正在研究的是这样的:

TYPE BaseState:
STRUCT
   EnumVal : INT;
   Name : STRING;
END_STRUCT
END_TYPE

TYPE StructBase:
STRUCT
   StateArray : ARRY [..] OF BaseState;
END_STRUCT
END_TYPE

StructDerived : StructBase;
StructDerived[0].Name := 'StateInit';
StructDerived[1].Name := 'StateMoveFwd';

So if i would use it in a case:
CASE AbortingState OF
    StructDerived[0].EnumVal:
        ....

记录“名称”以进行状态跟踪。看起来像列表字典之类的东西会做很多工作。

感谢您对此事的任何建议。

标签: structdynamiccodesys

解决方案


结构化文本是一种强类型语言,无法在运行时动态地将元素添加到结构中。

数据结构不是函数,因此如果您打算拥有一个数据结构,则应该设计一个功能块而不是结构

具备我需要的基本功能的完整抽象功能

case of ” 指令有一个条件变量,该变量根据一个或多个条件指令(整数文字)进行检查。

您不能将变量用作条件指令

您可以使用继承来扩展结构和功能块,以便创建不同模块的层次结构,并在不同场合将它们实例化以用于不同目的。


推荐阅读