You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TwinCAT 3结构化文本泛型特性使用疑问:实例化编译报错排查

TwinCAT 4026.19.0泛型函数块实例化数组参数类型不匹配问题

我定义了如下泛型函数块:

FUNCTION_BLOCK FB_GenericsTest

VAR_GENERIC CONSTANT
    SIZE: INT := 1;
END_VAR

并为其实现了FB_Init方法:

METHOD FB_Init: BOOL

VAR_INPUT
    bInitRetains: BOOL;
    bInCopyCode: BOOL;

    x: ARRAY[0 .. SIZE - 1] OF INT;
END_VAR

在主程序中用不同泛型参数两次实例化该函数块时,一次成功一次失败:

PROGRAM MAIN

VAR CONSTANT
    SIZE_1: INT := 1;
    SIZE_2: INT := 2;
END_VAR

VAR
    a: ARRAY[0 .. SIZE_1 - 1] OF INT;
    b: FB_GenericsTest<SIZE_1>(a);
    
    c: ARRAY[0 .. SIZE_2 - 1] OF INT;
    d: FB_GenericsTest<SIZE_2>(c);
END_VAR

实例化变量d时报错:

Error C0032: Cannot convert type 'ARRAY [0..(SIZE_2 - 1)] OF INT' to type 'ARRAY [0..(SIZE - 1)] OF INT'

尽管SIZE_2和传入后SIZE的常量值都应为2。

经测试发现,编译器似乎始终使用VAR_GENERIC CONSTANT变量的初始值1来确定数组大小,而非传入的泛型参数值。这个初始值是Beckhoff官方推荐设置的,不设置会触发警告,省略的话默认值为0。

泛型的核心作用就是实现函数块的参数化,但当前场景下无法实现预期效果,这是TwinCAT 4026.19.0编译器的bug吗?还是我在使用这个新特性时存在误用?

内容的提问来源于stack exchange,提问作者Apollo3zehn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:42:10