一、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
六、数组的应用
由固定数目组成的相同数据类型元素的数据结构。
例如:10个bool,10个int,100个int。
重点笔记总结
分类 | 关键点 |
---|---|
DB类型 | 全局DB(共享)、背景DB(绑定FB) |
优化访问 | 符号名优先,禁用绝对地址访问 |
数据保持 | 通过Retain属性设置断电保持 |
变量定义 | 支持UDT/ARRAY/STRUCT等复杂类型 |
访问方式 | DB块名.变量名 (优化)或%DBX/DBW/DBD (非优化) |
下载规则 | 在线修改需停止PLC或使用“仅下载更改” |
示例代码片段
// 优化DB访问示例
IF "StartButton" THEN
DB100.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 兼容)
可标准访问的数据块具有固定的结构。数据元素在声明中分配了一个符号名,并且在块中有固定地址。
DB属性
DB区别
优化:只能通过符号访问。(应用1200/1500,不兼容300/500)
非优化:通过地址、符号、指针访问。
如何创建数组?
多个数据类型相同的位。
在新的DB块中,数据类型选择Array,可以在后面括号中选择数量,从0开始计数。
数据的保持性设定。
优化和非优化
以下是西门子 1200 中优化 DB(优化的数据块)和非优化 DB(非优化的数据块)的主要区别对比:
对比项目 | 优化 DB | 非优化 DB |
---|---|---|
数据访问方式 | 通过符号名访问,不需要关注数据的绝对地址。系统会自动管理数据的存储位置,当数据块结构发生变化时,只要符号名不变,程序中对数据的访问不受影响。 | 通过绝对地址(如 DBX、DBW、DBD)或符号名访问。如果数据块结构改变,可能需要手动调整程序中对数据的绝对地址引用。 |
数据块属性 | 默认情况下,优化的数据块在下载到 PLC 时,会自动分配地址。在数据块中可以添加、删除或移动变量,而不会影响程序中对这些变量的引用。 | 需要手动分配地址,并且地址必须是连续的。如果要修改数据块结构,可能需要重新分配地址并调整程序中相关的地址引用。 |
数据块初始化 | 优化 DB 可以在数据块中直接为变量设置初始值,这些初始值会在 PLC 启动时自动加载。 | 非优化 DB 也可以设置初始值,但需要通过编程的方式在程序中进行初始化操作。 |
内存使用效率 | 由于系统自动管理地址,可能会在一定程度上增加内存的碎片化,但整体上更便于数据块的维护和修改。 | 手动分配地址可以更精确地控制内存使用,减少碎片化,但维护成本较高。 |
与旧版本兼容性 | 优化 DB 是西门子 S7 - 1200 较新的特性,与旧版本的编程软件或 PLC 可能不兼容。 | 非优化 DB 是传统的数据块类型,与旧版本的编程软件和 PLC 具有更好的兼容性。 |
示例 | 在优化 DB 中创建一个名为“MotorData”的数据块,包含“Speed”(速度)和“Direction”(方向)两个变量。在程序中可以直接使用“MotorData.Speed”和“MotorData.Direction”来访问这些变量。 | 在非优化 DB 中创建一个数据块,手动分配地址。例如,“DB1.DBW0”存储速度值,“DB1.DBX2.0”存储方向信号。在程序中使用这些绝对地址来访问数据。 |
学习重点 | 1. 掌握如何通过符号名访问优化 DB 中的数据。 2. 了解优化 DB 数据块结构变化时对程序的影响。 3. 学会在优化 DB 中设置变量的初始值。 | 1. 理解绝对地址的概念,掌握通过绝对地址和符号名访问非优化 DB 中的数据。 2. 掌握手动分配地址的方法,以及如何在数据块结构改变时重新分配地址。 3. 学会在程序中对非优化 DB 进行初始化操作。 |
通过以上对比可以看出,优化 DB 更注重数据块的可维护性和编程的便捷性,而非优化 DB 则更强调对内存的精确控制和与旧系统的兼容性。在实际应用中,需要根据具体的项目需求选择合适的数据块类型。