导语:
在复杂的PLC应用中,程序需要处理大量的配方数据、工艺参数和设备状态。
将这些数据集中存储在数据块(DB)中,不仅使程序结构清晰,还能方便地通过HMI进行读写。
本文将详细讲解如何创建和使用全局数据块,并以一个配方管理为例进行说明。
1. 什么是全局数据块(Global DB)?
数据块是PLC中用于存储用户数据的存储区。
与背景数据块(与FB关联)不同,全局数据块独立于任何代码块,可被OB、FC、FB任意读写。
它相当于一个结构化的数据库,存放各种类型的数据。
2. 创建全局数据块
在西门子TIA Portal中,通过“添加新块”选择“数据块(DB)”,并指定为“全局DB”。
在DB编辑器中,可以定义多个变量,每个变量有名称、数据类型、起始地址和初始值。
支持基本数据类型(Bool, Int, Real等)以及复合数据类型(Array, Struct)。
3. 数据块中存储哪些内容?
配方参数:不同产品的生产参数,如温度设定值、压力范围、速度等。
设备状态:当前运行模式、故障代码、累计运行时间等。
设定值与阈值:用户可调的工艺参数,如PID目标值、报警上下限。
中间计算结果:需要长期保存的统计数据,如日产量、总产量。
4. 配方存储示例
假设一个加热炉有3种产品配方,每种配方包含“加热温度”、“保温时间”、“冷却风扇速度”三个参数。
可以在DB中定义如下结构:
这样,操作员通过HMI选择配方编号后,程序只需从对应的结构体中读取参数,赋值给运行变量。
5. 访问数据块中的变量
在程序块中,可以通过绝对地址(如“DB1”.Temp)或符号名访问变量。
建议使用符号名以提高可读性。
在SCL中,可直接写 #Temp := "DB_Recipe".Recipe_1.Temp;。
6. 数据块的保持性设置
在DB属性中,可以勾选“保持性”(Retain),使得该数据块中的数据在PLC断电后依然保持。
这对于存储产量、累计值、配方参数等至关重要。
非保持性数据在PLC重启后会恢复为初始值。
7. 使用UDT简化数据结构
对于重复的结构(如多个配方格式相同),可以创建自定义数据类型(UDT),然后在DB中多次使用。
例如先创建UDT “RecipeType”,包含Temp、Time、FanSpeed。
然后在DB中定义 Recipe_1 : RecipeType; Recipe_2 : RecipeType;,大大简化了DB的结构定义。
8. 与HMI的交互
HMI可以直接关联DB中的变量,实现参数的显示与修改。
只需在HMI变量表中连接PLC变量,选择对应的DB变量即可。
注意变量的数据类型需匹配。

