在工业自动化系统中,模拟量信号(如 4–20 mA 电流、0–10 V 电压)广泛用于传输温度、压力、流量、液位等连续物理量。当现场传感器发生断线、短路、接线松动或供电丢失时,PLC 或 DCS 的模拟量输入模块通常会输出一个超限异常值(如 -32768、32767、0x8000、0xFFFF 等),而非“无信号”状态。若控制系统直接使用该异常值参与运算、联锁或显示,极易引发误动作——例如:压力信号断线导致假性“超压”而紧急停机;液位信号跳变至负值触发错误的低液位报警;流量归零误判为管道堵塞而关闭阀门。
因此,“模拟量断线保持”不是可选项,而是安全仪表系统(SIS)和关键过程控制回路的强制性基础逻辑。其核心目标只有一个:在检测到信号失效时,不传播错误信息,而是主动选择一种确定、可控、符合工艺安全要求的响应方式——要么保持最后一次确认有效的测量值(Hold Last Valid),要么切换至预设的安全值(Set to Safe Value)。二者不可混用,必须依据具体回路的安全完整性等级(SIL)、故障后果严重度及工艺操作规范严格选定。
一、识别断线:不是“读数异常”,而是“状态可信度归零”
断线检测的本质,是对信号质量(Signal Quality)的实时评估,而非简单比对数值大小。以下三种方法构成工业现场最可靠、最通用的组合判据,需同时满足(AND 逻辑)才判定为“断线”:
-
超出工程量程边界
设定模拟量通道的合法工程单位范围(如压力:0–1.6 MPa;温度:-20–150 ℃)。当原始 ADC 值换算为工程值后,若结果< 下限 × 0.95或> 上限 × 1.05,即视为越界。此处留 5% 余量,避免正常波动误报。
换算公式为:
$$ \text{EngVal} = \frac{\text{Raw} - \text{Raw}_{\min}}{\text{Raw}_{\max} - \text{Raw}_{\min}} \times (\text{Eng}_{\max} - \text{Eng}_{\min}) + \text{Eng}_{\min} $$
其中Raw_min/Raw_max是模块手册明确标注的有效码值(如 16 位模块常为0和65535或-32768和32767)。 -
持续超限时间 ≥ 预设阈值(T_hold)
单次越界可能是干扰脉冲。必须连续T_hold秒(典型值:1.0–3.0 s)均处于越界状态,才触发断线标志。该参数需大于最大可能干扰持续时间,且小于工艺允许的响应延迟。 -
模块自诊断状态位有效
现代模拟量输入模块(如西门子 SM1231、AB 1756-IF16、施耐德 BMXAMI0810)均内置硬件级诊断,可报告“开路”、“短路到地”、“短路到电源”、“过压”等状态。必须读取模块提供的Diagnostic Status Word中对应通道的故障位(如 Bit 3 = Open Circuit),且该位为1。仅依赖软件判断而不读取硬件诊断,属于重大设计缺陷。
✅ 正确做法:
断线标志 = (EngVal < Eng_Low × 0.95 OR EngVal > Eng_High × 1.05) AND (T_consecutive > T_hold) AND (Module_Diag_Bit == 1)
❌ 错误做法:仅用IF EngVal == -32768 THEN 断线—— 忽略了硬件诊断,且未防抖。
二、两种核心策略的选择依据与实现逻辑
| 策略类型 | 适用场景 | 安全前提 | 典型应用举例 |
|---|---|---|---|
| 保持最后有效值 | 故障期间工艺状态变化缓慢;人工干预有充足时间;保持值不会导致联锁误动 | 控制回路具备独立的手动/自动切换机制;上位机有明确“信号异常”视觉提示 | 储罐温度监测、环境温湿度记录、非关键泵出口压力 |
| 置为安全值 | 故障直接关联高风险动作;保持原值将扩大危险(如维持高压力、高转速、高液位) | 安全值已通过 HAZOP 分析确认;联锁逻辑中该信号为“失能即安全”(Fail-Safe)条件 | 反应釜夹套冷却水流量、压缩机入口压力、锅炉汽包水位 |
(1)保持最后有效值(Hold Last Valid)
该策略的核心是隔离异常数据,冻结可信快照。实现时需注意三个关键细节:
-
触发时机必须滞后于断线判定
在断线标志 == TRUE的第一个扫描周期,执行Last_Valid := EngVal赋值。此后Last_Valid不再更新,直至断线恢复。 -
恢复逻辑必须带确认延时
断线恢复不能仅靠“EngVal 回归量程”。必须满足:EngVal ∈ [Eng_Low×0.98, Eng_High×1.02]且T_stable ≥ 2.0 s(防止抖动反复切换)。恢复后,Last_Valid自动刷新为当前EngVal。 -
输出值必须明确标识状态
PLC 输出给上位机或控制器的,不应是裸Last_Valid,而应是结构化数据:{ "value": 124.6, "unit": "℃", "quality": "GOOD" }或断线时:
{ "value": 124.6, "unit": "℃", "quality": "BAD_HOLD" }上位机据此决定是否禁用该值参与趋势、报表、报警。
(2)置为安全值(Set to Safe Value)
安全值不是随意设定的数字,而是经工艺安全分析(PHA/HAZOP)确认的故障导向安全(Fail-Safe)基准点。常见设定规则:
- 流量信号 → 设为
0.0(确保切断流体供应) - 压力信号(容器) → 设为
0.0(避免误判超压) - 压力信号(泵出口) → 设为
Eng_Low(避免误判失压停泵) - 液位信号 → 设为
Eng_Low(低液位报警优先于高液位,防干烧) - 阀门开度反馈 → 设为
0%或100%,依“故障关(FC)”或“故障开(FO)”阀体特性而定
⚠️ 重要:安全值必须硬编码在 PLC 程序中,不可由上位机远程修改。修改需走变更管理流程(MOC),并重新验证 SIL 等级。
三、典型 PLC 实现(以 TIA Portal V18 结构化文本为例)
// 声明变量(全局 DB 块中)
VAR
ai_Pressure_RAW : INT; // 模块原始码值
ai_Pressure_ENG : REAL; // 工程值(MPa)
ai_Pressure_QUALITY : BOOL; // TRUE = 有效;FALSE = 断线
ai_Pressure_HOLD : REAL; // 保持值缓存
ai_Pressure_SAFETY : REAL := 0.0; // 安全值(MPa)
t_Consecutive : TIME; // 超限累计时间
b_DiagOpen : BOOL; // 模块诊断:开路位
b_BreakDetected : BOOL; // 断线标志(主逻辑输出)
END_VAR
// 主逻辑段(每个扫描周期执行)
// Step 1: 工程值换算(假设 4-20mA 对应 0-1.6MPa,RAW=0-27648)
ai_Pressure_ENG := REAL_TO_REAL(
(REAL#(ai_Pressure_RAW) - 0.0) / (27648.0 - 0.0) * (1.6 - 0.0) + 0.0
);
// Step 2: 读取模块诊断位(示例:从诊断字 DB1.DBD100 的 Bit 3 读取)
b_DiagOpen := WORD_TO_BOOL(WORD#(DB1.DBD100)) AND 8#00001000;
// Step 3: 断线综合判定
IF (ai_Pressure_ENG < 0.0 * 0.95) OR (ai_Pressure_ENG > 1.6 * 1.05) THEN
t_Consecutive := t_Consecutive + T#10MS; // 每10ms累加
ELSE
t_Consecutive := T#0S;
END_IF;
b_BreakDetected :=
((ai_Pressure_ENG < 0.0 * 0.95) OR (ai_Pressure_ENG > 1.6 * 1.05))
AND (t_Consecutive >= T#2.0S)
AND b_DiagOpen;
// Step 4: 执行保持或置安全值逻辑(本例采用“保持”策略)
IF b_BreakDetected THEN
// 首次断线:捕获最后有效值
IF NOT b_BreakDetected_LAST THEN
ai_Pressure_HOLD := ai_Pressure_ENG;
END_IF;
ai_Pressure_QUALITY := FALSE;
// 输出保持值
ai_Pressure_OUTPUT := ai_Pressure_HOLD;
ELSE
ai_Pressure_QUALITY := TRUE;
ai_Pressure_OUTPUT := ai_Pressure_ENG;
END_IF;
b_BreakDetected_LAST := b_BreakDetected;
四、工程实施中的五大陷阱与规避方法
| 陷阱 | 后果 | 规避方案 |
|---|---|---|
| 忽略模块诊断,纯软件判据 | 高频误报(EMI 干扰)、漏报(模块硬件失效) | 强制读取 Diagnostics Word,并在程序开头做 IF Module_Status <> OK THEN STOP |
| 保持值未加质量标识直传上位机 | DCS 误用无效值做 PID 运算,引发振荡 | 所有 OPC UA/Modbus 通信中,Quality 字段必须映射为 BAD / SUBSTITUTED / LIMITED |
| 安全值设为 0 但未验证联锁逻辑 | 故障时联锁不动作(如流量=0 应停泵,却因逻辑写反未停) | 在 SIS 逻辑图中,对该信号标注 FAIL-SAFE = TRUE,并进行 SIL 验证测试 |
| T_hold 设置过短(< 0.5s) | 现场电机启停、大功率设备投切引发瞬时干扰误报 | 实测现场最大干扰脉宽,T_hold 至少设为该值的 3 倍 |
| 多通道共用同一保持变量 | 一个通道断线导致其他通道输出错误值 | 每个模拟量通道必须有独立的 Last_Valid 和 Break_Flag 变量 |
五、验收测试要点(必须逐项实测)
-
断线注入测试:断开传感器二线制接线,在 PLC 监控界面观察:
断线标志是否在 2.0 s 内置位;输出值是否立即切换为Last_Valid或Safety_Value;Quality位是否同步变为BAD。
-
恢复测试:重新接线后,观察:
断线标志是否在稳定 2.0 s 后清零;输出值是否无缝切换回实时值;Last_Valid是否被刷新。
-
边界值测试:给定
EngVal = 0.0 × 0.94(即 -0.008 MPa),确认触发断线;给定EngVal = 0.0 × 0.96(即 -0.0064 MPa),确认不触发。 -
诊断屏蔽测试:人为清除模块诊断位(如短接诊断端子),此时即使信号越界,
断线标志也不得置位——验证诊断优先原则。 -
通讯层验证:用 Wireshark 抓取 OPC UA 数据包,确认
StatusCode字段为BadSensorFailure而非Good。
六、延伸:高级应用——带衰减的软保持(Soft Hold)
对于温度、液位等惯性大、变化慢的参数,可升级为“指数衰减保持”:
$$
\text{Output}(t) = \text{Last\_Valid} \times e^{-(t-t_0)/\tau} + \text{Safety\_Value} \times \left(1 - e^{-(t-t_0)/\tau}\right)
$$
其中 τ 为时间常数(如 60 s),t₀ 为断线起始时刻。该算法使输出值平滑趋近安全值,避免阶跃跳变对趋势图和操作员心理造成冲击,适用于人机交互密集的监控场景。

暂无评论,快来抢沙发吧!