数组元素的符号地址

时间:2018-04-16 18:08:23

标签: arrays enums st iec61131-3 structured-text

我有一个对象数组,比如对象的MyArray[1..x]

编程时我希望有一种更“可读”的方式来处理每个对象。而不是说MyArray[1] := ...etc。我想说MyReadableName :=...

我查看过引用,但是我对整个指针的内容感到担忧。我怎么能以一种好的方式做到这一点并支持在线变更?我应该在哪里放置引用的声明和赋值,它可能是几百个,我不想在在线模式下混乱Main VAR窗口?

我看到的另一件事是使用具有可读名称的枚举并将其用作数组的索引。然后查找MyArray[Enum.MyReadableName] :=..。但我不确定这是否是一个很好的解决方案。

非常欢迎任何解决方案或提示!谢谢!

1 个答案:

答案 0 :(得分:0)

您已经提到了所有可能的方法。

指针

你不应该担心它们。指针不是IEC-61131的一部分,因此它的实现因制造商而异。如果您提到正在使用的IDE以及数组元素的结构,那将会很好。

我使用这样的任务的最佳方式是,我创建了ACTION,然后我将所有变量映射到数组或数组之外。我只在PLC加载时运行此任务一次并调用此操作映射。

View::composer('*', 'App\Http\ViewComposers\MovieComposer@compose');

但通常情况下,IDE操作的创建方式不同,而不是VAR aA: ARRAY [1..2] OF StructureName; stMyName1: POINTER TO StructureName; stMyName2: POINTER TO StructureName; xInit: BOOL; END_VAR ACTION actMap stMyName1 := ADR(aA[1]); stMyName2 := ADR(aA[2]); END_ACTION IF NOT xInit THEN actMap(); xInit := TRUE; END_IF 关键字。在Codesys中右键单击POU。

我会选择指针,因为它是符合逻辑的方式。它需要更多的应用程序设置,但以后节省编码时间。

枚举

正如你所描述的那样。在Codesys中,您应该使用ACTION,例如#。但是,如果您使名称唯一,则可以使用它们而不使用枚举名称。此外,如果您将数组的名称缩短,它可以看起来像Color#red