【发布时间】:2020-06-20 17:18:35
【问题描述】:
我需要创建一定数量的 struct type 对,这些对将进一步用作 const 参数,并且具有基本相同的一组值,但按比例缩放一半,如下所示(给定一个 n 常量):
TYPE ADDR_1 :
STRUCT
PARAMETER_A: INT :=0;
PARAMETER_B: INT :=2;
PARAMETER_C: INT :=4;
- - -
PARAMETER_n: INT :=n; (* being n any number *)
END_STRUCT
END_TYPE
以及相关对:
TYPE ADDR_2 :
STRUCT
PARAMETER_X: INT :=0/2;
PARAMETER_Y: INT :=2/2;
PARAMETER_Z: INT :=4/2;
- - -
PARAMETER_n/2: INT :=n/2; (* being n any number *)
END_STRUCT
END_TYPE
通过分别创建两个结构,它工作得很好,我使用它们创建一个 CONST 数组以在 SWITCH... 处使用CASE 语句 - 正如我们所熟知的,它只接受其索引处的常量,而不接受变量。
但是,在一个结构中所做的每一项更改都必须在另一个结构中进行重构,这在“最佳实践”设计方面确实不是一种安全的方法。
我现在面临的问题是,如果我在全局变量列表 (GVL) 中创建 CONST 值,它在编译时间线中没有优先级,我的意思是,首先评估结构。
另一种选择是使用 Pragmas,但它仅在特定范围内有效,这意味着它不会充当“全局参数”。
我只想在编译之前定义上述每个参数,这样我就可以定义一次,将一个除以 2。
【问题讨论】:
-
> 然而,在一个结构中所做的每个更改都必须在另一个结构中重构,就“最佳实践”设计而言,这确实不是一种安全的方法。如果您在那里进行更改,那么这些是常量吗?
-
您使用的是 Codesys 2 还是 3?
-
我使用 Twincat 3(它使用 Codesys 3 编译器)和来自 GVL 的常量测试了您的设置,并且没有编译错误。
-
嗨@Filippo,我正在使用 Codesys 3
-
嗨@Sergey,我在编程阶段的上下文中提到了“更改”,而不是在运行时。我想说的是,例如,如果我在一个结构中添加参数,我还需要在另一个结构中添加,具有相同的 (x2) 比例,如果我在这个计算中犯了错误,这将代表当前方法的弱点.
标签: plc codesys structured-text iec61131-3