4. 实时数据库与变量组态
实时数据库是矿山SCADA系统的“数据心脏”。现场传感器、PLC、智能仪表采集到的模拟量、开关量、累计量,最终都要以“变量”的形式进入实时库,组态画面、趋势曲线、报警引擎、历史存储全部围绕变量展开。变量组态做得是否规范,直接决定了后续画面绑定、报警联动和趋势分析能否顺利实现。本节围绕变量定义、数据类型、报警属性、分组与命名规范四个层面展开,并结合一个矿山典型点位给出可操作的配置示例。
一、变量定义:从现场信号到实时库标签
变量(Tag)是实时数据库中对一个可采集、可存储、可引用数据点的抽象。定义一个变量,本质上要回答五个问题:它来自哪里、它代表什么物理量、它用什么数据类型承载、它的量程与工程单位是什么、它是否参与报警与历史存储。以主排水泵房为例,一台水泵通常需要定义以下变量:电机电流(模拟量)、出口压力(模拟量)、运行状态(开关量)、就地/远控状态(开关量)、故障信号(开关量)、累计运行时间(累计量)。
变量定义的关键字段包括:变量名、描述、数据类型、数据源地址(如PLC的寄存器地址或OPC节点名)、采集周期、量程上下限、工程单位、死区、初始值。其中数据源地址与采集周期决定了通信负载:对压力、电流这类变化较快的模拟量,采集周期可设为500ms~1s;对状态类开关量可用事件触发方式,仅在变化时上送,减少无效通信。死区(Deadband)用于抑制模拟量在稳定值附近的频繁抖动,例如压力死区设为0.02MPa,可避免趋势曲线出现锯齿状毛刺。
二、数据类型:选错类型是隐性故障源
实时库常见数据类型包括:布尔量(Bool)、8/16/32位整型(Int)、32位浮点(Real/Float)、字符串(String)、时间戳(DateTime)。选型原则是“按物理量本质选类型,按精度需求选宽度”。开关量、故障信号用Bool;设备编号、报警代码用整型;压力、流量、温度、电流用浮点;累计量若数值很大且要求精确到整数,可用32位无符号整型并配合溢出处理。
工程上最容易出问题的是量程换算。PLC侧常以4~20mA对应的整型原始值(如0~27648)上送,实时库需按线性关系换算为工程值:工程值 = 下限 + (原始值 − 原始下限) × (上限 − 下限) / (原始上限 − 原始下限)。若把原始值直接当工程值显示,画面上就会出现“压力5530MPa”这类明显错误。另一个常见问题是浮点比较:判断“压力是否超限”时不能用等于号,应使用带死区的区间判断,否则浮点误差会导致报警反复抖动。
三、报警属性配置:让变量“会说话”
报警属性是变量组态中最需要工程经验的部分。一个模拟量变量通常配置四类报警:高高限(HH)、高限(H)、低限(L)、低低限(LL),每类报警需设置阈值、死区、延时、报警级别、报警文本。以出口压力为例:正常范围0.8~2.5MPa,H限设为2.6MPa、HH限设为3.0MPa、L限设为0.6MPa、LL限设为0.4MPa,死区0.05MPa,延时3s。延时的作用是过滤压力瞬时波动造成的误报;死区则保证报警恢复时不会在阈值附近反复跳变。
开关量报警主要配置“状态报警”:故障信号为1时触发“一级报警”,运行状态与远控状态不一致时触发“状态异常报警”。此外还有变化率报警(如压力1分钟内上升超过0.5MPa判定为异常骤升)和通信中断报警(变量质量戳变坏时触发)。报警级别建议按矿山安全影响划分:影响人身安全或主排水、通风等关键系统的定为一级(红色、声光、需确认),影响单台设备运行的定为二级(橙色),仅提示性的定为三级(黄色)。
四、变量分组与命名规范
变量分组建议按“系统—设备—测点”三级组织:主排水系统、通风系统、提升系统、供电系统各成一组,组内再按设备划分。分组不仅是管理手段,也直接影响权限分配和报警过滤——操作员只关心本岗位相关分组,报警汇总画面可按组筛选。
命名规范推荐“区域/系统_设备编号_测点类型”结构,全部使用英文大写字母、数字和下划线,禁止中文、空格和特殊字符。例如:PMP01_Pressure、FAN02_RunSts、PWR03_Fault。同一测点在实时库、历史库、报警库、画面绑定中必须使用完全一致的变量名,避免“一处改名、多处失效”。下表给出一个可直接参考的变量定义清单示例(参数为教学示例,实际项目应按设计文件核定):
| 变量名 | 描述 | 数据类型 | 量程/单位 | 采集周期 | 报警配置 |
|---|---|---|---|---|---|
| PMP01_Current | 1#泵电机电流 | Real | 0~200 A | 1 s | H:180A 延时5s |
| PMP01_Pressure | 1#泵出口压力 | Real | 0~4 MPa | 1 s | HH:3.0 H:2.6 L:0.6 LL:0.4 |
| PMP01_RunSts | 1#泵运行状态 | Bool | 0/1 | 事件 | 状态异常报警 |
| PMP01_Fault | 1#泵综合故障 | Bool | 0/1 | 事件 | 一级报警 |
| PMP01_RunHour | 1#泵累计运行时间 | DINT | 0~999999 h | 60 s | 不报警,仅归档 |
最后提醒两个易错点:一是变量名与地址的对应关系要建立台账,PLC程序修改地址后必须同步更新实时库,否则会出现“数据不动”的假死现象;二是报警阈值不要写死在画面脚本里,应统一配置在变量报警属性中,便于集中修改和审计。把变量定义、类型换算、报警属性、分组命名这四件事一次做规范,后续的趋势分析和报警优化才有可靠的数据基础。