Warm tip: This article is reproduced from serverfault.com, please click

plc-如何将变量类型作为参数传递给 IEC61131-3 结构化文本 (TwinCAT3) 中的函数?

(plc - How to pass variable type as an argument to an function in IEC61131-3 structured text (TwinCAT3)?)

发布于 2021-01-21 09:44:06

这就是我想要的(这是 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()动态创建数组方法。

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

这是它的代码:

myArray := __NEW(REAL, 10); //Create array with type REAL variables with the size of 10
Questioner
Jakub Szlaur
Viewed
0
Filippo Boido 2021-01-22 02:53:30

好的,这是一个如何解决这个问题的小例子:

首先创建一个枚举:

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。