文章目录

模拟量断线保持:传感器故障时,保持最后有效值或置为安全值的逻辑

发布于 2026-03-21 09:46:45 · 浏览 2 次 · 评论 0 条

在工业自动化系统中,模拟量信号(如 4–20 mA 电流、0–10 V 电压)广泛用于传输温度、压力、流量、液位等连续物理量。当现场传感器发生断线、短路、接线松动或供电丢失时,PLC 或 DCS 的模拟量输入模块通常会输出一个超限异常值(如 -32768、32767、0x8000、0xFFFF 等),而非“无信号”状态。若控制系统直接使用该异常值参与运算、联锁或显示,极易引发误动作——例如:压力信号断线导致假性“超压”而紧急停机;液位信号跳变至负值触发错误的低液位报警;流量归零误判为管道堵塞而关闭阀门。

因此,“模拟量断线保持”不是可选项,而是安全仪表系统(SIS)和关键过程控制回路的强制性基础逻辑。其核心目标只有一个:在检测到信号失效时,不传播错误信息,而是主动选择一种确定、可控、符合工艺安全要求的响应方式——要么保持最后一次确认有效的测量值(Hold Last Valid),要么切换至预设的安全值(Set to Safe Value)。二者不可混用,必须依据具体回路的安全完整性等级(SIL)、故障后果严重度及工艺操作规范严格选定。


一、识别断线:不是“读数异常”,而是“状态可信度归零”

断线检测的本质,是对信号质量(Signal Quality)的实时评估,而非简单比对数值大小。以下三种方法构成工业现场最可靠、最通用的组合判据,需同时满足(AND 逻辑)才判定为“断线”:

  1. 超出工程量程边界
    设定模拟量通道的合法工程单位范围(如压力: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 位模块常为 065535-3276832767)。

  2. 持续超限时间 ≥ 预设阈值(T_hold)
    单次越界可能是干扰脉冲。必须连续 T_hold 秒(典型值:1.0–3.0 s)均处于越界状态,才触发断线标志。该参数需大于最大可能干扰持续时间,且小于工艺允许的响应延迟。

  3. 模块自诊断状态位有效
    现代模拟量输入模块(如西门子 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)

该策略的核心是隔离异常数据,冻结可信快照。实现时需注意三个关键细节:

  1. 触发时机必须滞后于断线判定
    断线标志 == TRUE第一个扫描周期,执行 Last_Valid := EngVal 赋值。此后 Last_Valid 不再更新,直至断线恢复。

  2. 恢复逻辑必须带确认延时
    断线恢复不能仅靠“EngVal 回归量程”。必须满足:EngVal ∈ [Eng_Low×0.98, Eng_High×1.02] T_stable ≥ 2.0 s(防止抖动反复切换)。恢复后,Last_Valid 自动刷新为当前 EngVal

  3. 输出值必须明确标识状态
    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_ValidBreak_Flag 变量

五、验收测试要点(必须逐项实测)

  1. 断线注入测试:断开传感器二线制接线,在 PLC 监控界面观察:

    • 断线标志 是否在 2.0 s 内置位;
    • 输出值 是否立即切换为 Last_ValidSafety_Value
    • Quality 位是否同步变为 BAD
  2. 恢复测试:重新接线后,观察:

    • 断线标志 是否在稳定 2.0 s 后清零;
    • 输出值 是否无缝切换回实时值;
    • Last_Valid 是否被刷新。
  3. 边界值测试:给定 EngVal = 0.0 × 0.94(即 -0.008 MPa),确认触发断线;给定 EngVal = 0.0 × 0.96(即 -0.0064 MPa),确认不触发。

  4. 诊断屏蔽测试:人为清除模块诊断位(如短接诊断端子),此时即使信号越界,断线标志 也不得置位——验证诊断优先原则。

  5. 通讯层验证:用 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₀ 为断线起始时刻。该算法使输出值平滑趋近安全值,避免阶跃跳变对趋势图和操作员心理造成冲击,适用于人机交互密集的监控场景。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文