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

Beckhoff PLC:如何在功能块中将数组声明为保持型?

解决方案:Beckhoff功能块内变量重启后保留数据

1. 正确配置Persistent属性

你之前标记Persistent未生效,大概率是没遵循Beckhoff的规范配置。正确做法是在FB内部变量声明前添加{PERSISTENT}属性,同时完成项目层面的持久化设置:

VAR
    {PERSISTENT}
    Values : ARRAY[DataArrayLow..DataArrayHigh] OF T_ARG;
    {PERSISTENT}
    ValueChanged : ARRAY[DataArrayLow..DataArrayHigh] OF BOOL;
END_VAR

然后在TwinCAT工程中操作:

  • 右键项目 → 选择Properties → 进入Persistent Settings
  • 勾选Enable persistent data启用持久化功能
  • 在Persistent Variables列表中,找到FB_Comm实例下的Values和ValueChanged数组,勾选它们纳入持久化存储

注意:Persistent变量依赖控制器的非易失性存储(多数Beckhoff控制器自带),且变量类型需支持持久化(T_ARG如果是标准类型或不含指针/引用的自定义结构体,均可正常使用)。

2. 简化方案:使用Retain属性

如果Persistent配置流程繁琐,可改用PLC标准的{RETAIN}属性,无需额外项目设置,重启后即可保留数据:

VAR
    {RETAIN}
    Values : ARRAY[DataArrayLow..DataArrayHigh] OF T_ARG;
    {RETAIN}
    ValueChanged : ARRAY[DataArrayLow..DataArrayHigh] OF BOOL;
END_VAR

Retain变量存储在RAM中,依赖控制器的后备电池维持数据,若长时间断电(超过电池续航)数据会丢失;而Persistent存储在Flash等非易失性介质,断电更久也能保留,可根据场景选择。

3. 自定义持久化逻辑(避免全局变量)

若不想依赖系统自带的持久化属性,可在FB内部实现独立的读写逻辑,不破坏封装性:

  • 添加FirstCycle布尔变量,标记启动后的第一个运行周期
  • 第一个周期内,通过FILE功能块读取控制器本地存储的文件,将数据加载到Values数组
  • 日常更新Values时,同步调用写入逻辑将数据保存到本地文件

这种方式需自行处理文件读写细节,复杂度高于前两种方案,适合有特殊需求的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:25:23