0

这就是我想要的(这是 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具有 size 的变量数组1
  • 我需要知道type我声明了什么,typeOfVariable以便它可以存储type另一个变量的数据。

  • 工作示例是__NEW()动态创建数组的方法。

  • 此方法接受一个参数,例如REALor INT

这是它的代码:

myArray := __NEW(REAL, 10); //Create array with type REAL variables with the size of 10
4

3 回答 3

1

好的,这里有一个小例子,你可以如何解决这个问题:

首先创建一个枚举:

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

检查 Null-Pointer 并记住在不再需要数组时 __Delete。

于 2021-01-21T18:53:30.447 回答
0

令我惊讶的是(而且是偶然的),我发现有一个名为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-01-22T12:18:06.227 回答
0

PLC_ReadSymInfoByName() 可以为功能块执行此操作,属性“实例路径”> PLC_ReadSymInfoByName >“FB_Test”

使用 Struct 也可以做到这一点。ST_Real:fValue:实数;eTypeOf : E_Type:= E_Type.Real;

于 2021-11-26T16:50:23.150 回答