You need to enable JavaScript to run this app. CODESYS中含RETAIN局部变量的功能块,是否整个实例都存于RETAIN存储区?
优惠活动
大模型
产品
解决方案
定价
更多

CODESYS中含RETAIN局部变量的功能块,是否整个实例都存于RETAIN存储区?

CODESYS 中RETAIN声明规则的实测偏差疑问

在CODESYS官方手册中可查阅到如下规则说明:

如果在功能块中将某局部变量声明为RETAIN,CODESYS会将该功能块的完整实例存储在RETAIN区间(即功能块的所有数据);但仅声明为RETAIN的变量会被当作RETAIN变量处理。

针对该规则,有开发者开展了对照实测,过程如下:

  • 编写测试用功能块,块内包含两组独立声明的变量:
    VAR
       Test1:   ARRAY[1..50] OF UINT;   // 占100字节
    END_VAR
    VAR RETAIN
       Test2:   ARRAY[1..50] OF DINT;   // 占200字节
    END_VAR
    
  • 主程序中仅对该功能块实例化1次,运行状态下通过SIZEOF函数测得该功能块的总内存占用为312字节
  • 打开设备右键菜单下的「Device Memory Info」页面,读取RETAIN存储区的总占用值,实测数值仅为203字节

按照手册描述的规则推演,只要功能块内部存在RETAIN类型的局部变量,整个功能块的所有数据都会被纳入RETAIN存储区,对应的RETAIN区总占用应该和功能块本身的312字节大小匹配。但实测结果显示,RETAIN区的占用值仅和块内RETAIN变量的大小接近,并未把非RETAIN的普通变量Test1的内存空间计入RETAIN统计。这一结果和手册描述存在明显出入,由此产生疑问:手册的规则说明是否存在表述误差?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 09:15:08