这就是我想要的(这是 FB 对象的构造函数):
METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL;
bInCopyCode : BOOL;
//My variables:
typeOfVariable : TYPE; // This obviously doesn't work
END_VAR
size := 1;
myArray := __NEW(typeOfVariable, size); // Create dynamic array with 'typeOfVariable' variables.
END_METHOD
typeOfVariable
例如REAL
,并且该方法将产生的阵列REAL
与大小的变量1
。type
我声明了什么,typeOfVariable
以便它可以存储type
另一个变量的数据。工作示例是__NEW()
动态创建数组的方法。
此方法接受一个参数,例如REAL
or INT
。
这是它的代码:
myArray := __NEW(REAL, 10); //Create array with type REAL variables with the size of 10
好的,这是一个如何解决这个问题的小例子:
首先创建一个枚举:
TYPE E_Type :
(
eNO_TYPE := 0,
eINT,
eREAL
);
END_TYPE
在开关盒中使用它:
METHOD createArray : POINTER TO BYTE
VAR_INPUT
eType : E_Type;
size : UINT;
END_VAR
CASE eType OF
eINT:
//Remember to __DELETE
createArray := __NEW(INT, size);
eREAL:
createArray := __NEW(REAL, size);
END_CASE
检查空指针并记住在不再需要数组时使用 __Delete。
这实际上是我现在正在使用的实现。但是,如果有另一种方法可以做到这一点,我仍然很好奇-因此我把这个问题放在这里希望能得到回答:)
+1
但我不会接受。你也会考虑提出这个问题+1
吗?到目前为止(在 IEC61131-3 的背景下)从来没有人问过这个问题......我真的希望有人能找到解决方案或解释为什么它不能完成。简单的答案:您不能直接传递 Type,编译器不会允许它。但是你可以用上面的实现来解决它。必须说,在为工业机器开发代码时,你应该意识到你所处的特殊环境。在极少数情况下使用创建动态内存,应该避免没有必要的时候。在广泛用于军用和民用航空的 ADA 语言(83 或 95)中,您有一个非常相似的哲学。
啊好的谢谢!不知道!:)