这就是我想要的(这是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,例如,1.
REAL的REAL变量数组,以知道我声明的typeOfVariable是什么type,这样它就可以存储关于另一个变量type的数据。
F 213
的__NEW()方法。
此方法接受诸如INT.或REAL之类的参数。
这是它的代码:
myArray := __NEW(REAL, 10); //Create array with type REAL variables with the size of 10发布于 2021-01-21 18:53:30
好的,下面是一个小例子,您可以解决这个问题:
首先创建一个Enum:
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。
发布于 2021-01-22 12:18:06
令我惊讶的是(碰巧)我发现有一个名为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, _USINT:=2, _INT:=3, _UINT:=4, _DINT:=5, _UDINT:=6, _LINT:=7, _ULINT:=8, _REAL:=9, _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);发布于 2021-11-26 16:50:23
PLC_ReadSymInfoByName()是对函数块、属性‘实例-路径’> PLC_ReadSymInfoByName > "FB_Test“执行此操作的一种可能性。
也可以用结构来实现这一点。ST_Real: fValue: Real;eTypeOf : E_Type:= E_Type.Real;
https://stackoverflow.com/questions/65824760
复制相似问题