问题描述
这就是我想要的(这是 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
的数据。
这是它的代码:
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。
,出乎我的意料(并且偶然)我发现有一个名为 ETcloEcPredictDataType
的文件包含此代码:
{attribute 'TcTypeSystem'}
{attribute 'signature_flag' := '33554432'}
{attribute 'checksuperglobal'}
{attribute 'show'}
{attribute 'no-analysis'}
{attribute 'GUID' := '6FFE9C73-9040-49AE-8731-5485B8A3A604'}
{attribute 'Namespace' := 'IO'}
TYPE ETcIoEcPredictDataType : (_SINT:=1,_USINT:=2,_INT:=3,_UINT:=4,_DINT:=5,_UDINT:=6,_LINT:=7,_ULINT:=8,_REAL:=9,_LREAL:=10) UDINT;
END_TYPE
请注意,我什至不必包含此文件。我刚刚写下 _REAL
并点击它并选择 Go to definition
。然后它打开了 ETcloEcPredictDataType
文件。
因此,按照 @Filippo Boido 的回答,您可以使用此 CASE
语句创建函数:
//_SINT:=1,_LREAL:=10
CASE _type OF
1: myArray := __NEW(SINT,size);
2: myArray := __NEW(USINT,size);
3: myArray := __NEW(INT,size);
4: myArray := __NEW(UINT,size);
5: myArray := __NEW(DINT,size);
6: myArray := __NEW(UDINT,size);
7: myArray := __NEW(LINT,size);
8: myArray := __NEW(ULINT,size);
9: myArray := __NEW(REAL,size);
10: myArray := __NEW(LREAL,size);
END_CASE
并调用FB构造函数如下:
array : dynamicArray(_REAL);