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

功能块构造函数无法使用字符串,如何声明不定长字符串或替代方案?

问题解决:ST功能块构造函数传递字符串文件名报错

问题根源

你当前的代码中,FB_init的输入参数是REFERENCE TO T_MaxString,直接传递字符串字面量(如'c:/config/config.csv')会触发编译器错误——因为引用类型必须绑定一个具有稳定生命周期的变量,而字面量是临时对象,无法被引用绑定。

解决方案

方案1:先定义变量再传递引用

如果坚持使用引用类型参数,需在主程序中先定义一个T_MaxString类型的变量存储文件名,再将该变量传递给功能块构造函数:

修正后的FB_LogFile代码:

FUNCTION_BLOCK FB_LogFile
VAR
    sFileName : REFERENCE TO T_MaxString;
END_VAR

METHOD FB_init : BOOL
VAR_INPUT
    sFileName: REFERENCE TO T_MaxString; // 修正原代码参数名拼写错误
END_VAR    
THIS^.sFileName := sFileName;

Main程序代码:

PROGRAM Main
VAR
    sLogFilePath : T_MaxString := 'c:/config/config.csv'; // 先定义变量存储文件名
    LogTest: FB_LogFile(sFileName := sLogFilePath); // 传递变量引用
END_VAR
LogTest();

方案2:改用值传递参数(更简洁)

如果不需要引用绑定,直接将FB_init的参数改为值类型,即可直接传递字符串字面量:

修改后的FB_LogFile代码:

FUNCTION_BLOCK FB_LogFile
VAR
    sFileName : T_MaxString; // 存储文件名的值
END_VAR

METHOD FB_init : BOOL
VAR_INPUT
    sFileName: T_MaxString; // 值类型参数
END_VAR    
THIS^.sFileName := sFileName;

Main程序代码:

PROGRAM Main
VAR
    LogTest: FB_LogFile(sFileName := 'c:/config/config.csv'); // 直接传字面量
END_VAR
LogTest();

关于不定长字符串的支持

多数PLC的结构化文本(ST)支持STRING类型,可以指定最大长度(如STRING(255))来实现“不定长”效果,只需将代码中的T_MaxString替换为对应长度的STRING类型即可,上述两种方案同样适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:01:55