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

FB_Init方法在报警管理FB中的可行性及自定义函数调用咨询

报警管理功能块(FB)初始化问题解答

问题1:FB_Init遍历数组生成告警名称与消息的方案可行性及时序注意事项

这个方案完全可行,当前40个告警的规模不会有性能问题,后续扩展到上百个也能稳定运行——因为FB_Init仅在实例化阶段执行一次,不是周期性循环执行。

需要注意的时序及实现细节:

  • FB_Init执行时机限制:FB_Init在PLC启动、在线下载后实例创建时执行,此时系统其他模块可能未完成初始化,因此禁止依赖其他FB实例的状态、未初始化的IO或全局变量,否则会导致未定义行为。
  • 内存安全校验:
    • 确保T_MaxString的长度足够容纳TO_STRING生成的枚举名称和替换后的消息,避免字符串溢出;
    • 用SIZEOF(_arrAlarms)/SIZEOF(ST_AlarmDefinition)计算数组长度的方式要确认编译器支持,避免遍历越界。
  • 枚举字符串转换可靠性:你的ST_AlarmDefinition结构体添加了{attribute 'to_string'},要确认所使用的PLC编译器完全支持该属性,保证TO_STRING(_arrAlarms[i].Id)能准确输出枚举成员的字符串名称。
  • 依赖变量初始化顺序:如果代码中用到的sStringToReplace、sStringToInser是全局变量,必须保证这些变量在FB执行FB_Init之前完成初始化,否则会使用无效值进行替换。

你的现有实现代码:

FOR i := 0 TO SIZEOF(_arrAlarms)/SIZEOF(ST_AlarmDefinition) - 1 BY 1 DO
    _arrAlarms[i].Name := TO_STRING(_arrAlarms[i].Id);
    FindAndReplace(pDstString := ADR(_arrAlarms[i].Message),
                   pSrcString := ADR(_arrAlarms[i].Name),
                   nDstSize := SIZEOF(_arrAlarms[i].Message),
                   pDeleteString := ADR(sStringToReplace),
                   pInsertString := ADR(sStringToInser));
END_FOR

告警定义结构体:

{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE ST_AlarmDefinition :
STRUCT
    Id                  : E_AlarmID;    // Alarm ID
    Name                : T_MaxString;  // Name of the alarm, basically the ID as string
    Message             : T_MaxString;  // Message of the alarm
    Active              : BOOL;         // Active state of the alarm
    LastActivationDate  : STRING;       // Date of last activation
END_STRUCT
END_TYPE

问题2:FB_Init中能否调用项目自定义函数

可以在FB_Init中调用项目自定义函数,用于按枚举命名规则构造告警消息,但需要注意以下几点:

  • 自定义函数不能依赖未初始化的系统资源(如IO模块、未完成初始化的全局FB实例),否则会在启动阶段执行失败。
  • 若该FB会被多次实例化,自定义函数必须保证可重入性——避免使用全局静态变量,或对全局变量的访问加锁(如果PLC支持),防止多实例初始化时出现竞争问题。
  • 确认PLC编译器支持FB_Init中调用自定义函数,部分老旧编译器可能存在限制,需提前测试编译和运行效果。
  • 自定义函数的可见性要设置正确,需在FB的作用域内或全局可见,确保FB_Init能正常调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:27