☰
4–20mA 换算工程量:公式、反算,以及量程上下限为什么不能贴着工艺值设
2026/10/15 6:16:54 网站建设 项目流程

4–20mA 换算工程量:公式、反算,以及量程上下限为什么不能贴着工艺值设

4–20mA 换算成工程量,公式谁都会写。真正容易出问题的是另外两件事:量程上下限设在哪,以及超出 4–20 的那部分电流怎么解读。

这篇先把公式和代码写清楚,再讲量程设定的三条经验。

换算公式

设量程下限 LRV 对应 4mA、上限 URV 对应 20mA:

工程量 = LRV + (I − 4) / 16 × (URV − LRV) 电流 = 4 + 16 × (工程量 − LRV) / (URV − LRV)
defma_to_value(ma,lrv,urv):"""4–20mA → 工程量(线性)。"""returnlrv+(ma-4.0)/16.0*(urv-lrv)defvalue_to_ma(value,lrv,urv):"""工程量 → 4–20mA,不做限幅,便于看出超量程有多远。"""return4.0+16.0*(value-lrv)/(urv-lrv)

URV < LRV的反向量程也成立,公式不用改。

超出 4–20 的电流是什么意思

按 NAMUR NE43 的约定,回路电流不是只有 4–20 这一段:

电流含义
≥ 21.0 mA故障(高报警方向)
20.5–21.0 mA未定义区,正常不应出现
20.0–20.5 mA测量值超上限,仍是有效测量
4.0–20.0 mA正常量程
3.8–4.0 mA测量值低于下限,仍是有效测量
3.6–3.8 mA未定义区
≤ 3.6 mA故障(低报警方向)
defclassify(ma):ifma<=3.6:return"fault-low"ifma<3.8:return"undefined-low"ifma<4.0:return"under-range"ifma<=20.0:return"normal"ifma<=20.5:return"over-range"ifma<21.0:return"undefined-high"return"fault-high"

DCS 侧至少要把 “fault” 和 “over/under-range” 分开处理:前者是仪表在说"我坏了",后者是仪表在说"工艺超出了你给我的量程"。把两者都当成"超量程"报警,等于把故障信息丢掉了。

量程设定的三条经验

1. 上限不要贴着工艺最高值

如果 URV 恰好等于工艺的最高值,工艺一冲高,输出就钉在 20.5mA,DCS 看到的是一条平线——恰好在最需要看到数据的时候,看不到数据。

上限要给工艺的"异常但可能出现"的值留余量。一个参照:某蒸发结晶装置,设计工况晶浆密度约 1.27~1.29 g/cm³,最不利工况约 1.361 g/cm³,量程上限取 1.37。

2. 下限不要贴着正常值,也不要为了"包住清水"而放得太低

同一个装置,清母液基线约 1.153 g/cm³。量程下限取 1.13,留了 0.02 的余量——母液密度是按文献折算的估算值,实测可能偏低,没有余量的话,清母液基线会掉进 3.8mA 的超量程带。

另一头,冲洗时管里是清水,约 1.0 g/cm³,远低于 1.13,输出会进 3.8mA 那一档。这是正确行为,不是故障:冲洗期间应当在 DCS 侧用泵或阀的信号把读数屏蔽掉。

有人会想:干脆把下限放到 1.0,清水也在量程内。代价是量程变宽、分辨率变差,见下一条。

3. 量程宽度决定模拟量的分辨率

模拟量回路的误差是按电流算的。假设整条回路(变送输出 + AI 卡)合计 ±0.1% × 16mA = ±16 μA:

defma_error_to_value(err_ua,lrv,urv):returnerr_ua/1000.0/16.0*(urv-lrv)ma_error_to_value(16,1.13,1.37)# 量程 0.24 → ±0.00024 g/cm³ma_error_to_value(16,1.00,2.00)# 量程 1.00 → ±0.00100 g/cm³

量程宽四倍,回路带来的误差也大四倍。所以量程要按控制需要来定,不是越宽越保险。

如果同时需要宽范围和高分辨率,用数字通讯读原始值:Modbus 直接传 32 位浮点,不受 4–20mA 量程的限制。模拟量留给控制回路和联锁,数字量给记录和诊断。

两个常见的"对不上"

一、百分比和电流对不上。

带 HART 的仪表,命令 2、3 返回的回路电流通常是承载 HART 信号的那一路(例如回路 1),而"量程百分比"跟随的是被映射到主变量的那一路。如果回路 1 被配成输出温度、回路 2 输出浓度,读到的电流和百分比就分属两个回路。先查输出分配,再怀疑仪表。

二、故障方向和 DCS 组态相反。

NE43 的故障电流可以配置成高报警(≥21mA)或低报警(≤3.6mA)。DCS 按"高报警"组态、仪表却配成低报警时,一次传感器故障会被 DCS 当成一个很低的正常读数,不报警。

有的仪表通过 HART 命令 15 返回当前的报警方向(alarm select),它跟随仪表配置,不是固定值。投运时读一次、和 DCS 组态核对一次,花不了一分钟。

测试

deftest_round_trip():forvin(1.13,1.25,1.37):assertabs(ma_to_value(value_to_ma(v,1.13,1.37),1.13,1.37)-v)<1e-12deftest_classify_edges():assertclassify(3.5)=="fault-low"assertclassify(3.9)=="under-range"assertclassify(12.0)=="normal"assertclassify(20.3)=="over-range"assertclassify(21.5)=="fault-high"

小结

  • 上限给异常工况留余量,下限给基线留余量
  • 冲洗、停泵造成的 3.8mA 是正确行为,在 DCS 侧屏蔽,不要为它放宽量程
  • 量程宽度直接决定模拟量分辨率;要精度,读数字量
  • 投运时核对两件事:电流和百分比是不是同一路,故障方向和 DCS 组态是否一致

本文由西安派声信息科技有限公司技术团队整理,内容来自实际固件与现场记录。

文中提到的量程上下限、报警方向(HART 命令 15)与回路说明:

  • GitCode —— https://gitcode.com/Pisonics/ps7000-hart
  • Gitee —— https://gitee.com/pisonics/ps7000-hart
  • GitHub —— https://github.com/Pisonics/ps7000-hart

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询