数组元素的符号寻址

Symbolic adressing of array elements

我有一个对象数组,可以说 MyArray[1..x] 个对象。

在编程时,我希望有一种更 "readable" 的方式来寻址每个对象。而不是说 MyArray[1] := ...etc。我想说MyReadableName :=...

我查看了参考资料,但我有点担心整个指针的东西。我怎样才能很好地做到这一点并支持在线更改?我应该在哪里放置引用的声明和赋值,它可能有数百个,而且我不想在在线模式下弄乱 Main VAR window?

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

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

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

指针

你不用担心他们。指针不是 IEC-61131 的一部分,因此它的实现因制造商而异。如果你提到你正在使用的 IDE 和数组元素的结构,那就太好了。

我处理此类任务的最佳方式是创建 ACTION,然后将所有变量映射到数组或映射出数组。我 运行 此任务仅在 PLC 加载时执行一次,并调用此操作映射。

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

但通常,在 IDE 中,动作的创建方式不同,而不是使用 ACTION 关键字。在 Codesys 中,右键单击 POU。

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

枚举

正如您所描述的那样。在 Codesys 中,您应该像 Color#red 一样使用 #。但是,如果您使名称唯一,则可以在没有枚举名称的情况下使用它们。此外,如果您将数组的名称缩短,它看起来像 a[MyArrayName].