首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将变量类型作为参数传递给IEC61131-3结构化文本(TwinCAT3)中的函数?

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

Stack Overflow用户
提问于 2021-01-21 09:44:06
回答 4查看 675关注 0票数 0

这就是我想要的(这是FB对象的构造函数):

代码语言:javascript
复制
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.

  • I,该方法将创建大小为REALREAL变量数组,以知道我声明的typeOfVariable是什么type,这样它就可以存储关于另一个变量type的数据。

F 213

  • 工作示例是动态创建数组.

__NEW()方法。

此方法接受诸如INT.或REAL之类的参数。

这是它的代码:

代码语言:javascript
复制
myArray := __NEW(REAL, 10); //Create array with type REAL variables with the size of 10
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-21 18:53:30

好的,下面是一个小例子,您可以解决这个问题:

首先创建一个Enum:

代码语言:javascript
复制
TYPE E_Type :
(
    eNO_TYPE := 0,
    eINT,
    eREAL
);
END_TYPE

在开关箱中使用它:

代码语言:javascript
复制
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。

票数 2
EN

Stack Overflow用户

发布于 2021-01-22 12:18:06

令我惊讶的是(碰巧)我发现有一个名为ETcloEcPredictDataType的文件包含以下代码:

代码语言:javascript
复制
{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语句创建函数:

代码语言:javascript
复制
//_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构造函数:

代码语言:javascript
复制
array : dynamicArray(_REAL);
票数 1
EN

Stack Overflow用户

发布于 2021-11-26 16:50:23

PLC_ReadSymInfoByName()是对函数块、属性‘实例-路径’> PLC_ReadSymInfoByName > "FB_Test“执行此操作的一种可能性。

也可以用结构来实现这一点。ST_Real: fValue: Real;eTypeOf : E_Type:= E_Type.Real;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65824760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档