【AI PLC每日一课】FB功能块的记忆秘密:实例数据块是什么?
——工厂里那个”会记住你”的工具箱
📖 故事开始
小工盯着TIA Portal屏幕,眼睛里飘出一堆问号。
屏幕上赫然出现一行红色报错:
FB must be called with an instance data block!
小工:(挠头)啊?!FB和FC不是都是”功能”吗,为什么不能直接调用?!
就在这时,一只调皮的小红精灵从报错信息里跳了出来——这就是无处不在的”故障精灵”。
故障精灵:哈哈哈!以为FB跟FC一样?错了错了!你少了一样东西!
工程师推开门走进来,腰间工具包发出神秘的光芒。
工程师:小工,来,我来给你讲讲FB和FC的根本区别。
🧰 神奇道具登场:工具箱记忆测试仪
工程师从工具包里掏出一件发光的设备——
【工具箱记忆测试仪】✨
想象两个工具箱摆在你面前:
📦 FC工具箱(无状态)
┌─────────────────────────┐│ FC 工具箱 ││ ││ 取出扳手 → 用 → 还回 ││ ││ [ 内部:空空如也 ] ││ 每次用完,一片空白 │└─────────────────────────┘
FC = 功能(Function)
-
• 每次调用都是”全新开始” -
• 不保留任何上次的状态 -
• 像一个共享的工具台,用完就走,不留痕迹
适合用FC的场景:
-
• 数学计算(加减乘除、单位换算) -
• 逻辑判断(比较大小、条件判断) -
• 信号转换(4-20mA → 实际温度)
🗄️ FB工具箱(有状态)
┌─────────────────────────────────────────┐│ FB 工具箱 ││ ││ ┌─────────────┐ ┌─────────────┐ ││ │ Motor1_DB │ │ Motor2_DB │ ││ │ 速度: 1500 │ │ 速度: 750 │ ... ││ │ 启停: 247次 │ │ 故障: 3次 │ ││ └─────────────┘ └─────────────┘ ││ ││ 每个调用者都有自己的专属抽屉! │└─────────────────────────────────────────┘
FB = 功能块(Function Block)
-
• 每个调用实例都有专属的”抽屉”(实例数据块DB) -
• 状态永久保存,断电重启也不丢 -
• 不同设备调用同一个FB,各有各的数据
适合用FB的场景:
-
• 电机控制(需要记录启停次数、运行时间) -
• 阀门控制(需要记录当前开度、故障状态) -
• PID调节(需要保存积分值、上次误差)
💡 小工的顿悟时刻
小工:(眼睛一亮💡)我明白了!FB就像有多个抽屉的工具柜,Motor1用Motor1的抽屉,Motor2用Motor2的抽屉,互不干扰!
助手:(拿着平板走进来)对!所以在TIA Portal里,调用FB时会弹出这个对话框——要你选择或新建一个实例数据块(DB),这就是给这次调用分配专属抽屉!
⌨️ 代码写法对比
FC 调用方式(无需DB)
// 直接调用,不需要数据块CALL FC10 InputSpeed := Motor1_Speed; OutputStatus := Motor1_Status;
FB 调用方式(必须指定DB)
// 必须绑定实例数据块 DB20CALL FB20, DB20 InputSpeed := Motor1_Speed; OutputStatus := Motor1_Status;
⚠️ 常见错误:忘记创建DB就调用FB,就会出现那行让小工崩溃的报错信息!
🎯 实战操作步骤(TIA Portal)
第一步:创建FB
-
1. 项目树 → 程序块 → 添加新块 -
2. 选择”功能块(FB)”,填写名称(如:FB_MotorControl) -
3. 编写电机控制逻辑
第二步:在主程序中调用时,先创建实例DB
-
1. 拖拽FB到OB1主程序 -
2. 弹出对话框:选择”新建数据块” -
3. 命名为 Motor1_DB(建议用设备名+_DB) -
4. 确认,系统自动生成对应DB
第三步:访问实例DB中的数据
// 可以直接读取Motor1_DB中保存的数据Motor1_RunTime := Motor1_DB.RunTime;Motor1_StartCount := Motor1_DB.StartCount;
📊 FC vs FB 速查对比
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CALL FC10 |
CALL FB20, DB20 |
|
|
|
|
|
|
|
|
📝 工程师的金牌口诀
小工:(认真在笔记本上写下——)
📌 口诀一:无状态 → 用FC,有状态 → 用FB
📌 口诀二:调FB前,先建DB!
📌 口诀三:一个FB + N个DB = N个独立设备实例
故障精灵灰溜溜地逃跑了,工程师满意地点点头。
工程师:掌握了这个,你已经理解了西门子PLC最核心的编程架构。明天我们讲多重实例DB——让多个FB嵌套共用一个DB,效率翻倍!
🔖 今日知识点总结
-
1. FC(功能)= 无状态函数,每次调用独立运行,适合纯计算任务 -
2. FB(功能块)= 有状态功能块,每个调用实例有专属DB,适合有记忆需求的控制逻辑 -
3. 实例数据块(DB)= FB的”专属抽屉”,存储该实例的所有运行数据 -
4. 一个FB可以被多次调用,每次调用绑定不同的DB,实现设备复用 -
5. 调用FB前,必须在TIA Portal中预先创建对应的实例DB
🤖 AI与自动化 | 每天一个PLC小知识📍 深圳·天和双力自动化 | 工业控制系统实践
💬 你在PLC编程中有没有踩过”忘建DB”的坑?欢迎在评论区分享你的故事!
夜雨聆风