一、DB数据块基础
-
定义
DB(Data Block)是用于存储用户数据的区域,分为两种类型:- 全局DB:可被所有逻辑块(OB/FB/FC)访问
- 背景DB:与特定功能块(FB)绑定,存储其参数和静态变量
-
核心作用
- 存储程序运行时需要保持的数据(如配方、状态参数)
- 实现数据的跨块传递
- 支持结构化数据存储(数组、结构体等)
二、DB块的创建与配置
1. 创建步骤
- 在TIA Portal中右键项目 → Add New Device → 选择PLC
- 在程序块目录下右键 → Add New Block → Data Block
- 输入名称(如DB100),选择类型(全局/背景)
2. 关键属性设置
- Optimized Block Access(优化块访问)
- ✅ 启用:使用符号名访问变量(无需记忆地址)
- ❌ 禁用:需通过绝对地址(%DBX/DBW/DBD)访问
- Retain Memory(保持性)
- 勾选后数据在PLC断电后仍保留
- Block Properties(块属性)
- 可设置块注释、版本信息等
三、数据类型与变量定义
1. 支持的数据类型
- 基本类型:BOOL、INT、REAL、DATE等
- 复杂类型:ARRAY(数组)、STRUCT(结构体)、STRING(字符串)
- 用户自定义类型(UDT):可复用的结构化数据模板
2. 变量定义示例
// 全局DB示例(DB100)
Name | Data Type | Initial Value | Comment
----------------------------------------------------------------
SetPoint | REAL | 25.5 | 温度设定值
Status | WORD | 0 | 设备状态字
Recipe | UDT_Recipe| [1..3] | 工艺配方数组
四、DB块的访问方式
1. 全局DB访问
- 符号访问(优化块):
DB100.SetPoint
- 绝对地址访问(非优化块):
%DBW 200
(假设SetPoint占用2字节)
2. 背景DB访问
- 与FB关联后自动生成,通过FB调用时传递:
CALL "MotorCtrl" // FB1 DB_Number := DB101 // 背景DB Speed := 50.0
五、高级功能与注意事项
-
数据块的初始化
- 初始值在下载时写入PLC,运行中修改需重新下载或通过程序覆盖
-
运行时修改DB
- 非优化块:可直接在监视表中修改
- 优化块:需通过符号表或程序修改
-
数据块的下载
- 首次下载:覆盖PLC中的DB块
- 在线修改:需停止PLC或使用“仅下载更改”功能
-
常见问题
- 数据不保持:检查Retain属性是否勾选
- 符号名无效:确认是否启用Optimized Block Access
重点笔记总结
分类 | 关键点 |
---|---|
DB类型 | 全局DB(共享)、背景DB(绑定FB) |
优化访问 | 符号名优先,禁用绝对地址访问 |
数据保持 | 通过Retain属性设置断电保持 |
变量定义 | 支持UDT/ARRAY/STRUCT等复杂类型 |
访问方式 | DB块名.变量名 (优化)或%DBX/DBW/DBD (非优化) |
下载规则 | 在线修改需停止PLC或使用“仅下载更改” |
示例代码片段
// 优化DB访问示例
IF "StartButton" THENDB100.SetPoint := 30.0; // 写入设定值
END_IF;// 非优化DB访问示例
L 200.0 // 装载DB100的第0字节(BOOL类型)
T MW10 // 传输到中间寄存器
通过合理使用DB块,可显著提升程序的可读性和可维护性。建议优先启用优化块访问并使用符号名编程。
官方文档
如何使用DB数据块
数据块用于存储程序数据。因此,数据块包含由用户程序使用的变量数据。全局数据块存储所有其它块都可使用的数据。
数据块的最大大小因 CPU 的不同而各异。可以以自己喜欢的方式定义全局数据块的结构。
还可以选择使用 PLC 数据类型 (UDT) 作为创建全局数据块的模板。
用户程序中的全局数据块
每个函数块、函数或组织块都可以从全局数据块中读取数据或向其中写入数据。即使在退出数据块后,这些数据仍然会保存在其中。可以同时打开一个全局数据块和一个背景数据块。
下图所示为不同的数据块访问:
访问模式
S7-1200 和 S7-1500 提供两种不同的全局数据块访问选项:
可优化访问的数据块
可优化访问的数据块没有固定的定义结构。在声明中,仅为数据元素分配一个符号名称,而不分配在块中的固定地址。
可标准访问的数据块(与 S7-300/400 兼容)
可标准访问的数据块具有固定的结构。数据元素在声明中分配了一个符号名,并且在块中有固定地址。