储能 PCS 绝缘监测与漏电流检测实战:梅雨季一台 30kVA 变流器一天报 5 次“绝缘故障”、每次 3 分钟自恢复——我把两种判据、建立时间和那条 300mA 红线从头算了一遍

2026年10月14日 0 By admin

这是 10 月 13 日那篇《母线电压采样链路设计实战》里预告过的那条线:把“板面漏电”从测量误差升级成一个保护功能。

那篇里,漏电是敌人——它让我把 415V 读成 431V。这一篇里,漏电变成被监视的对象。视角一换,要算的东西全变了:上一篇算的是“读数准不准”,这一篇算的是“什么时候该跳闸,什么时候不该跳”。

而且这篇比上一篇更拧的一点在于:同一套判据,一头会漏报,一头会误报,两个方向的错误同时存在。


一、现场:一天 5 次,每次 3 分钟,实验室一次都不来

南方某工商业储能柜,30kVA 变流器,直流侧 240 串磷酸铁锂、标称 768V。柜子在户外棚下,柜门有一级防雨,但不是 IP65 的户外柜。

梅雨季第一周,EMS 上出现这样一串告警:

时间 告警 持续 恢复方式
09:12 直流侧绝缘故障 3 min 08 s 自动复位后运行
11:03 直流侧绝缘故障 2 min 56 s 自动复位后运行
13:47 直流侧绝缘故障 3 min 21 s 自动复位后运行
15:20 直流侧绝缘故障 3 min 02 s 自动复位后运行
17:05 直流侧绝缘故障 2 min 48 s 自动复位后运行

一天 5 次,全在白天,全是上午 9 点到下午 5 点之间,每次都在 3 分钟左右自己回来。

第一个必须问清的问题:这到底是“真故障”还是“误报”?

我的第一反应和大多数硬件工程师一样:先把板子拿来测。500V 兆欧表夹在直流铜排和柜体接地排之间:

  • 正母线对地:220 MΩ
  • 负母线对地:210 MΩ

两个数字都远远高于 GB/T 34120-2017 要求的 1 MΩ(正常试验大气条件),也高于装置自己的保护阈值 100 kΩ 两个数量级。板子看起来一点问题都没有。

然后是第二个问题。同型号整机在实验室跑了 72 小时,覆盖 10%/50%/100% 三个功率段、母线电压从 600V 到 876V 全扫一遍,一次都没有复现。

第三个问题最扎手:为什么它会自己恢复?如果是绝缘击穿,它不会自己好;如果是接触不良,它不会这么准时。

三个问题串起来,指向同一个方向:装置报的不是绝缘电阻,而是装置自己算出来的那个数。这两个数可以完全不是一回事。

而这台机器最后被我定性成——

既不是“假故障”,也不是“真故障”,而是把“预警级”的问题按“保护级”处理了。

先把这句话放这儿,下面用数字把它兑现。


二、先把两个东西分开:绝缘监测 ≠ 剩余电流检测

我一开始也把这两件事混着说,直到我把它们的量纲写在同一张纸上:

绝缘监测(IMD) 剩余电流检测(RCMU / RCD)
测什么 直流母线对地绝缘电阻 进出线剩余电流(矢量和不等于零的那部分)
单位 MΩ / kΩ mA
正常工作范围 几十 kΩ ~ 几十 MΩ 几十 mA(容性分量为主)
阈值 100 kΩ / 500 kΩ 这类 300 mA(连续)、30/60/150 mA(突变)
响应速度 秒 ~ 分钟级(允许慢) 40 ms ~ 300 ms(必须快)
服务对象 设备资产(防接地放弧、防短路) 人身安全(防触电)
主要标准 IEC 61557-8、GB/T 34120 IEC 62109-2 §4.8.3.5、NB/T 32004
传感器 分压/隔离放大器 + 投切电阻 磁通门(磁调制)电流传感器

这两套东西不能互相替代,原因是数量级差得太远。 我在纸上算了一笔,这笔账是整篇文章的起点:

母线 768V,绝缘电阻刚好掉到保护阈值 100 kΩ 时,对地漏电流是多少?
I = U / R = 768 V / 100 kΩ = 7.68 mA

7.68 mA。而 RCMU 的连续判据是 300 mA。

差 39 倍。

也就是说:绝缘电阻从 20 MΩ 一路烂到 100 kΩ 的整个过程中,剩余电流传感器全程“视而不见”——它看到的漏电流从 0.04 mA 涨到 7.68 mA,离它要动的 300 mA 还差得远。

反过来算更刺眼:

RCMU 在 768V 下要跳到 300 mA,绝缘电阻得掉到多少?
R = 768 V / 300 mA = 2.56 kΩ

等到剩余电流保护动作的时候,绝缘电阻已经掉到 2.56 kΩ 了。 到那个程度,问题不是“要不要停机”,而是“柜子里哪根铜排先放弧”。

所以这两套装置的关系是:

  • IMD 是早期预警:它负责在绝缘从 MΩ 掉到 kΩ 的漫长过程里,第一时间发现趋势、分级上报、必要时停机。
  • RCMU 是最后一道闸:它负责在真正的人身触电或大漏电流发生的几十毫秒内切断。

一个管“早”,一个管“快”。这台机器配了两套,但两套的判据我都得重新过一遍。


三、绝缘监测的两种电桥,和平衡电桥那个“看不见”的盲区

3.1 平衡电桥:一个方程,两个未知数

装置内部的绝缘监测方案是平衡电桥:内部有两只等值电阻 R_b(这台机器是 100 kΩ),分别从正、负母线接到地,中间那个点对地的电压偏移就是它的观测量。

自由状态下:
    U+ / U- = (R+ // R_b) / (R- // R_b)

道理很简单:如果正负两边的对地电阻相等,中点就在正中,偏移为零。所以装置测偏移量,偏移为零就报“绝缘完好”。

问题来了:这是一个方程,两个未知数。

偏移为零有两种可能:一种是真的都完好(20 MΩ / 20 MΩ),另一种是两边一起烂到同一个值(15 kΩ / 15 kΩ)。装置分不清。它只能假设“另一极完好(无穷大)”,把一个未知数强行消掉,解出另一个:

R+_表观 = R_b · k / (1 − k)     其中 k = U+ / U-

这个式子有个致命特征:k → 1 时,表观值 → 无穷。

我把八种情况都算了一遍(脚本 blind 模式):

真实 (R+ / R-)           k=U+/U-     表观读数       真值(较小者)   评语
20.000 MΩ / 20.000 MΩ   1.0000      ---          20.000 MΩ    漏报! 读数说完好
50.00 kΩ / 20.000 MΩ    0.3350      50.38 kΩ     50.00 kΩ     准
20.000 MΩ / 50.00 kΩ    2.9851      50.38 kΩ     50.00 kΩ     准
2.000 MΩ / 20.000 MΩ    0.9571      2.233 MΩ     2.000 MΩ     准
500.00 kΩ / 20.000 MΩ   0.8375      515.38 kΩ    500.00 kΩ    准
15.00 kΩ / 15.00 kΩ     1.0000      ---          15.00 kΩ     漏报! 读数说完好
100.00 kΩ / 100.00 kΩ   1.0000      ---          100.00 kΩ    漏报! 读数说完好
500.00 kΩ / 500.00 kΩ   1.0000      ---          500.00 kΩ    漏报! 读数说完好

这张表是整篇文章里我最想让你看的一页。

前五行:不对称下降的时候,平衡电桥相当准,误差百分之几。

后三行:一旦正负两边等值下降,装置报“绝缘完好”——而此时两极可能都已经掉到 15 kΩ 了。

这就是平衡电桥的结构性盲区:它测的是“平衡度”,不是“绝缘水平”。 一个对称下降的绝缘击穿,从它的视角看跟全新设备没有任何区别。

这是“漏报方向”的错误。 记住这个方向,后面还要用。

3.2 另一个常被忽略的账:桥电阻自己在漏电

平衡电桥的两只内部电阻长期挂在对地,它自己就在产生稳定漏电流:

I = U_bus / R_b = 768 V / 100 kΩ = 7.68 mA      (每侧)

7.68 mA 不算大,但它有三个后果:

  1. 它是稳态的、一直存在的。这笔电流会一路流到地,被剩余电流传感器看见——所以 IMD 和 RCMU 之间天然有耦合(第九节细讲)。
  2. 它会在正负母线上各压出一个直流偏移,影响其他以“母线电压平衡”为基准的判断。
  3. 桥电阻自己开路或漂移,读数就直接错了,而且错得很隐蔽——因为电压偏移看起来还是“正常”的。

所以平衡电桥的可靠性其实压在那两只电阻身上。这就是为什么它的自检不能省(第七节)。

3.3 不平衡电桥:两次投切,两个方程,一个闭式解

要拿到正极和负极各自的绝对值,必须有两个独立方程。办法是:内部放两只不同时闭合开关的电阻,分两次投切,采两组电压。

状态1(合 S1,正母线经 R1 接地;S2 断开):
    U1+ / (R1 // R+) = U1- / R-

状态2(合 S2,负母线经 R2 接地;S1 断开):
    U2+ / R+ = U2- / (R2 // R-)

设 A = U1+/U1-、B = U2+/U2-,两个方程一联立,就能解出闭式解(脚本 bridge 模式):

R+ = (B − A) / ( A/R1 + 1/R2 )
1/R- = B/R+ − 1/R2

注意这里没有“假设另一极完好”这个前提——两个未知数由两个方程解出来,所以对称下降也能测到,盲区自然被填掉。这就是改造的第一件事。

拿一台正常设备验证一下(我用的这组数是后面现场算例的真值):

母线 U_bus = 768.0 V   投切电阻 R1 = 100.00 kΩ  R2 = 100.00 kΩ
真实绝缘电阻   R+ = 8.000 MΩ   R- = 180.00 kΩ

[自由状态] 未投切: U+/U- = R+/R- = 44.4444 ->  U+ = 751.100 V  U- = 16.900 V
[状态1] 合 S1:  U1+ = 272.099 V  U1- = 495.901 V   A = 0.548697
[状态2] 合 S2:  U2+ = 761.878 V  U2- = 6.122 V     B = 124.444444

[反解] R+ = 8.000 MΩ   (真值 8.000 MΩ)
[反解] R- = 180.00 kΩ  (真值 180.00 kΩ)

反解闭合,误差在浮点精度内。数学上这套是干净的。

顺便说一句:R+ = 8 MΩ、R- = 180 kΩ 这组不对称的量,就是我在湿热箱里复现出来的现场状态。 正极好得很,负极掉了一个数量级。而装置报出来的不是 180 kΩ,是 29.5 kΩ——下一节算这笔账。


四、那 8 个数字:从 8 MΩ / 180 kΩ 到 113 kΩ / 29.5 kΩ

4.1 湿热复现:把现场搬回实验室

先在实验室把现场复现出来。按 GB/T 34120 的交变湿热条件(40℃ / 93%RH,48 小时)处理一台整机,然后开门立刻测:

  • 正母线对地:8 MΩ(从 220 MΩ 掉下来,但仍在 MΩ 级)
  • 负母线对地:180 kΩ(从 210 MΩ 掉下来两个数量级)

原因很朴素:柜内负极侧接线端子附近有一小片冷凝水膜,顺着端子座爬到了最近的铜排上。干燥后完全恢复。这就是“可逆的湿度型绝缘下降”。

注意这里的量级:180 kΩ 落在预警区(500 kΩ)里,并没有碰到保护线(100 kΩ)。 所以按正确判据,正确动作应该是“上报预警、不清除运行”。

但实际装置报的是保护级、直接停机。

同一个绝缘状态,正确的判据是预警,装置的动作是停机。这中间差的东西,全在“读数是怎么算出来的”这一段。

4.2 采样前必须等:τ = (R_st ∥ R_iso) · C_e

不平衡电桥的测量动作是“合上一个电阻,然后读电压”。这里藏着这一篇最重要的一个公式——从合上开关到电压稳定,中间有一段建立时间。

直流母线对地不是纯电阻,还挂着一个等效电容 C_e(对地总电容)。合上投切电阻的一瞬间,电压不会立刻跳到稳态值,而是按一阶指数过渡:

τ = ( R_投切 // R_绝缘 ) × C_e

这是原文里最容易被跳过的一行,而它是我的现场问题的第三个根因。

代入这台机器的数:

状态1  τ = (R1 // R+) × C_e = (100 kΩ // 8 MΩ) × 2 µF
         = 98.77 kΩ × 2 µF = 197.5 ms

状态2  τ = (R2 // R-) × C_e = (100 kΩ // 180 kΩ) × 2 µF
         = 64.29 kΩ × 2 µF = 128.6 ms

推荐等待 ≥ 3τ(到 95%):状态1 593 ms / 状态2 386 ms

装置的固件里等了多少?我翻到那一行的时候有点沉默——20 ms。

20 ms 是一个“看起来很合理”的数:正好一个 50Hz 工频周期。写代码的人当时的想法大概是“等一个周期躲开工频干扰”。

但 20 ms 相对 197.5 ms,是 0.10 τ。电压只走了 10%。

4.3 把它算出来:读数会低一个数量级

我写了个交替投切的模型(脚本 settle 模式):两个状态各驻留一段时间,在驻留结束的那一刻采样,来回迭代到周期稳定,然后用采到的电压反解 R+ 和 R-。取驻留 100 ms:

[理想稳态] 状态1: U1+ = 272.099 V ; 状态2: U2+ = 761.878 V
[实际采样] 状态1: U1+ = 492.802 V  U1- = 275.198 V   A' = 1.7907
[实际采样] 状态2: U2+ = 638.257 V  U2- = 129.743 V   B' = 4.9194

=> 装置算出  R+ = 112.11 kΩ  (真值 8.000 MΩ)   偏差 71.4 倍
=> 装置算出  R- = 29.52 kΩ   (真值 180.00 kΩ)  偏差 6.1 倍

真值 180 kΩ(预警区),装置算出 29.5 kΩ(远低于 100 kΩ 保护线)→ 直接停机。

这就是那 5 次告警的全部真相。 不是绝缘坏了,是读数低了 6 倍。

再给一张二维扫描表,看这个误差对 C_e 和采样时刻有多敏感(表里是装置反解出的 R-,真值恒为 180 kΩ):

C_e \ td  5 ms       20 ms      50 ms      100 ms     200 ms     500 ms     1000 ms
0.1 µF    29.52 kΩ   122.25 kΩ  176.77 kΩ  179.98 kΩ  180.00 kΩ  180.00 kΩ  180.00 kΩ
0.5 µF    5.42 kΩ    23.18 kΩ   62.82 kΩ   122.25 kΩ  171.16 kΩ  179.98 kΩ  180.00 kΩ
1.0 µF    2.68 kΩ    11.10 kΩ   29.52 kΩ   62.82 kΩ   122.25 kΩ  176.77 kΩ  179.98 kΩ
2.0 µF    1.33 kΩ    5.42 kΩ    14.04 kΩ   29.52 kΩ   62.82 kΩ   142.53 kΩ  176.77 kΩ
5.0 µF    529.5 Ω    2.13 kΩ    5.42 kΩ    11.10 kΩ   23.18 kΩ   62.82 kΩ   122.25 kΩ
10.0 µF   262.4 Ω    1.06 kΩ    2.68 kΩ    5.42 kΩ    11.10 kΩ   29.52 kΩ   62.82 kΩ

读法:只有 C_e × 采样时刻这个乘积足够小(等价于“等待 ≥ 3τ”)时,读数才回到 180 kΩ 附近。 C_e = 2 µF 配 20 ms 采样,读数 5.42 kΩ——比保护线低 18 倍。

这张表还有一条对角线值得看:C_e = 2 µF / 200 ms 和 C_e = 10 µF / 1000 ms 读出来都是 62.82 kΩ。 也就是说,这两个参数不是独立的,它们只以乘积的形式起作用。 任何“我把采样时刻从 20 ms 提到 100 ms 了,应该好了吧”的改动,都必须先回答“C_e 到底多大”。

4.4 为什么是“随机”的:三个让读数偏低的机制

到这里能解释“天天报”,但还解释不了“为什么每次都是 3 分钟自己回来”。我把它拆成三条同时起作用的机制:

机制一:建立时间不足(主因,上面算过)。

为什么是“随机”而不是“一直低”?因为装置不是每次都在同一个相位采样。投切开关的动作时刻、母线的负载状态、PCS 当前的调制比,都会改变电压过渡的起始值,从而改变“20 ms 之后到了稳态的百分之几”。同样 20 ms 等待,读数会在 5.4 kΩ 到 122 kΩ 之间游荡——这个区间横跨了保护线和预警线。

这解释了那 5 次告警的时间点为什么毫无规律。

机制二:采样窗口落在开关动作上。

装置的采样窗口是 20 ms,PCS 的开关周期是 62.5 µs(16 kHz)。在一个 20 ms 的窗口里,有 320 个开关周期。 只要窗口的一部分覆盖了桥臂换流瞬间,共模电流就会串进采样通道,把单次读数打飞。

干净的做法是采样窗口与 PWM 同步,并且屏蔽换流沿——如果装置的采样是自由的、跟负载相位无关的,那它一定会在某些时刻撞上换流瞬间。这台机器的采样就是自由的。这是“随机”的第二个来源。

机制三:两个 IMD 在打架。

储能柜里绝缘监测装置通常有两套:PCS 侧一套(就是这台变流器里的,因为它要管交流侧对地)、BMS/BCU 侧一套(电池簇的绝缘监测)。两套装置各投各的电阻,都往对地灌电流。

它们同时合上时,两只投切电阻在“地”这一侧并联,等于把对方的标定值改了。 行业里的标准做法是分时:主控统一调度,任何时刻只允许一套装置处于测量状态(专利里的做法是加一个 K2 解耦开关,不测量时断开)。这台柜子的两份说明书我都翻了,没有任何一处写了“本机测量时需与另一套互斥”。

三个机制叠在一起,得到的就是现场看到的样子:读数在阈值附近大幅游荡,一天跨过保护线 5 次,每次持续到控制器的复位延时结束。

至于“为什么 3 分钟自己就好了”,其实和绝缘没关系:

  1. 装置判保护级 → 干接点闭锁直流侧接触器 → PCS 停机;
  2. 停机后没有开关动作、母线电压下降 → 干扰源消失,读数逐步回到真实值;
  3. 控制器里有一个180 s 后自动重试的逻辑(现场为了少上站加的);
  4. 重试时刻恰好落在读数高位 → 报“绝缘正常” → 恢复运行。

所以那 3 分钟不是“绝缘恢复了”,而是“干扰消失了 + 复位延时到了”。 这台机器的自恢复逻辑一共骗了现场工程师将近一个月。


五、C_e 到底有多大:一个“不能乱套公式”的例子

上面所有的账,最后都归到一个数:C_e。它到底有多大?

光伏界的经典口径是:

  • 晶硅组件对地寄生电容:50 ~ 150 nF/kWp
  • 薄膜组件:最高可到 1 µF/kWp
  • 直流电缆对地:100 ~ 200 pF/m
  • 储能柜还要额外加上 PCS 直流侧的 Y 电容、电池箱对柜体的分布电容

按 30 kW 折算:

晶硅口径:     30 kW × 50~150 nF/kW = 1.50 ~ 4.50 µF
薄膜/大湿度:  30 kW × 200~1000 nF/kW = 6.00 ~ 30.00 µF
再加长直流电缆:50 m × 150 pF/m = 7.5 nF(这一项反而是小头)

所以 2 µF 这个取值不是编的——它正落在晶硅口径的中段。 而且注意:湿度会同时推高 C_e(水膜增大等效面积)和压低绝缘电阻(水膜导电),这就是为什么这套问题专挑梅雨天出现。

5.1 一个我自己踩过的坑:不要用 C·dv/dt 去算漏电流

我一开始想顺手估一下“正常运行时对地漏电流有多大”,于是写下了那个最顺手的公式:

i = C_e × dv/dt = 3 µF × (768 V / 100 ns) = 3 µF × 7.68 V/ns
  = 23040 A

23 kA。

这个数荒谬到连我自己都笑了——30kVA 的整机三相额定电流才几十安培,哪来的 23 kA 对地电流。

问题出在哪?C_e 并不直接挂在开关节点上。 它和桥臂之间隔着直流电缆电感、滤波电感、以及组件/电池箱内部的结构。桥臂看到的“对地负载”根本不是 C_e 本身,而是整个共模回路的阻抗。

正确的口径是频域:

i_CM(ω) = v_CM(ω) / Z_CM(ω)

C_e 只是 Z_CM 在低频段的主角,在高频段电感就接管了。C·dv/dt 只在“电容直接挂在开关节点上”时才成立——比如某些 Y 电容的场合,但绝不是这里。

这条坑值得单独记:同一个 C_e,用错公式会差三四个数量级,而错的答案看起来还挺“像”一个工程数。

5.2 那“正常漏电流”到底多大:用拓扑口径,别用公式

既然公式不能套,那就用工程口径。漏电流的大小主要由拓扑和调制方式决定,不是靠滤波“解决”的:

拓扑 共模电压特性 典型漏电流 无变压器可用性
H4 单极性 PWM 0 ↔ V_dc,按载波频率跳变 数百 mA ✗ 不可用于无变压器
H4 双极性 PWM 理论恒定 V_dc/2 < 20 mA ✓(开关损耗高)
H5 续流期间直流侧断开,恒定 < 15 mA ✓
HERIC 交流侧旁路,恒定 < 20 mA ✓(对死区敏感)
三相两电平 B6 阶跃 V_dc/3 中等,需共模电感 ✓
三电平(NPC/ANPC) 阶跃 V_dc/6 低 ✓✓(阶跃减半)

单相非隔离拓扑族(H4 / H5 / HERIC / H6 各种衍生)的整个演化史,其实只解决一个问题:怎样在保住单极性调制的低损耗、低纹波的同时,把共模电压跳变消掉。

这张表还有一条很反直觉的推论,我在别的项目上吃过:把桥臂从 IGBT 换成 SiC 去追效率,可能让漏电流变差而不是变好。 IGBT 的组串逆变级通常跑到 8~20 kHz、边沿比较“软”;SiC 跑到 40 kHz 以上、dv/dt 陡得多。同一套拓扑、同一块组件,位移电流是好几倍。 不止一个团队看到 SiC 样机在一块老 IGBT 设计能过 VDE 0126-1-1 余量的板上,把自己的 RCMU 触发了。

门极电阻和开关频率的选型表里,必须留一列给“漏电流预算”,不能只算开关损耗。


六、门限怎么定:三套单位不要混

到这一步,判据的门限值可以定了。但必须先分清这里有三套单位,混着用一定出事。

6.1 第一套:Ω/V(面向人身安全的最小绝缘电阻)

车用高压回路的标准口径,储能和光伏经常直接借用:

口径 400 V 800 V 1500 V
100 Ω/V 40.00 kΩ 80.00 kΩ 150.00 kΩ
500 Ω/V 200.00 kΩ 400.00 kΩ 750.00 kΩ

同一个东西的另一种写法是“测量电流”:

警戒电流 2 mA  →  500 Ω/V
故障电流 10 mA →  100 Ω/V

这两个数是 TI 在 TIDUEZ8 那份绝缘监测 AFE 参考设计里写的设计目标。换算关系是 R = U / I,跟上面那张表是同一件事。

6.2 第二套:产品标准里的绝缘电阻(合格判据,不是运行阈值)

GB/T 34120-2017:

  • 正常试验大气条件下:储能变流器各独立电路与外露可导电部分之间绝缘电阻 ≥ 1 MΩ
  • 交变湿热(GB/T 2423.4)或恒定湿热(GB/T 2423.3)试验后:绝缘电阻 ≥ 0.5 MΩ
  • 工频耐压 1 min,不击穿、不飞弧、漏电流 < 20 mA

这一条极其重要:湿热后 0.5 MΩ 是“合格”。 也就是说,一台合格出厂的储能变流器,在湿热试验之后,厂家完全有理由说“我的绝缘电阻 0.5 MΩ 是符合标准的”。

而运行中的保护阈值是 100 kΩ——比合格线低 5 倍。

这不是矛盾,这是两件事:0.5 MΩ 是“产品做出来是什么样”,100 kΩ 是“现场跑到什么程度必须停”。 中间的 0.5 MΩ ~ 100 kΩ 就是运行区,也是我这台机器实际落进去的区间(180 kΩ)。

6.3 第三套:mA(面向设备自身容性电流 + 人身安全)

≤ 30 kVA:连续剩余电流 > 300 mA      → 0.3 s 内断开
>  30 kVA:连续剩余电流 > 10 mA/kVA  → 0.3 s 内断开

⚠ 这里有一个我非常喜欢的口径陷阱。

我们这台机器铭牌写的是 30 kW,但功率因数是 0.95。视在容量:

S = P / PF = 30 kW / 0.95 = 31.6 kVA > 30 kVA

按 10 mA/kVA 那一档算,限值变成 316 mA,而不再是 300 mA。

一台 30 kW 的机器,恰好跨过了 30 kVA 这条分档线。认证测试的时候按哪个口径报,是要跟实验室确认的;做固件的如果按 300 mA 硬编码,就少了一层余量。(反过来,如果你的机器铭牌直接写 30 kVA,那就老老实实 300 mA。)

这是典型的“口径问题”——和上一篇 逆变器 Modbus 点表》里的地址口径是同一类错误:同一个数,两套定义,差一个分档。


七、改造:把“读数”变成“判据”

到这一步,前面所有的问题都收敛成了七件要改的事。

7.1 换成不平衡电桥,拿到两极各自的绝对值

这是第一件事,也是最重要的一件。平衡电桥的盲区是结构性的,靠调参数、加滤波、改阈值都救不回来。只有两个独立方程才能解出两个未知数。

换成不平衡电桥之后,表 3.1 里那三行“漏报”全部消失:两极等值降到 15 kΩ 时,装置报的就是 15 kΩ,而不是“完好”。

7.2 把建立时间的预算写进固件,而不是写死一个常数

原来固件里是 DELAY_AFTER_SWITCH_MS = 20。这个常数是错的,因为它跟 C_e 无关。

改法是把等待时间做成 C_e 的函数,并且在产线标定时把 C_e 测出来写进参数区:

/* 单位: 时间用 us, 电阻用 mΩ, 电容用 pF (整数定点, 全程 int64) */
#define WAIT_MULT_NUM   3       /* 等待 3 x tau, 达到 95% */
#define WAIT_MULT_DEN   1

static uint32_t imd_wait_us(uint32_t r_st_mohm, uint32_t r_iso_mohm,
                            uint32_t ce_pf)
{
    int64_t r_par_mohm;      /* R_st // R_iso */
    int64_t tau_us;          /* tau = R(Ω) x C(F) = R(mΩ) x C(pF) / 1e15 s */

    if (r_st_mohm == 0 || r_iso_mohm == 0) {
        return IMD_WAIT_MAX_US;          /* 参数没标定 -> 用保守上限 */
    }
    r_par_mohm = ((int64_t)r_st_mohm * r_iso_mohm) /
                 ((int64_t)r_st_mohm + r_iso_mohm);
    tau_us = ((int64_t)r_par_mohm * ce_pf) / 1000000000LL;  /* 先乘后除 */
    tau_us *= WAIT_MULT_NUM;
    tau_us /= WAIT_MULT_DEN;

    if (tau_us > IMD_WAIT_MAX_US) { tau_us = IMD_WAIT_MAX_US; }   /* 单次限幅 */
    return (uint32_t)tau_us;
}

这段代码里有三个必须坚持的纪律:

  1. 先乘后除,中间量 int64。(r_st * r_iso) / (r_st + r_iso) 如果先除再乘,整数除法会直接把结果打到底噪里。
  2. 参数没标定就退到保守上限,并且上报“参数未标定”。不要“默认用 20 ms”这种写法——那是把未标定伪装成标定。
  3. 单次限幅 + 上限判故障,不要在测量支路上无限制地等下去。

改完之后,这台机器的等待时间从 20 ms 变成:

状态1  3τ = 593 ms    状态2  3τ = 386 ms
整个测量周期从 ~40 ms 变成 ~1 s

慢了 25 倍,但读数从 29.5 kΩ 回到 180 kΩ。 这笔账非常划算——绝缘监测本来就是秒级的东西,不是保护级的继电器。

顺便:一次完整测量的功耗也要算。 投切电阻上的功耗是 P = U²/R:

768 V 过 100 kΩ → 5.9 mW   (几乎不用管)
768 V 过 10 kΩ  → 59 W     (这就没法接受了)

这就是“等建立”和“省功耗”的取舍点。 想快,就得把 R_st 做小,但 R_st 一小,功耗和注入电流一起涨——然后它又跑去干扰 RCMU 了(第九节)。这三个量是绑在一起的,不能单独调。

7.3 采样窗口跟 PWM 同步

把采样窗口从“自由的 20 ms”改成与 PWM 同步、并且避开换流沿。做法和上一篇《母线电压采样链路》里电流采样的规矩一样:用定时器硬件触发,不要在中断里软件启动;并且对同一个测量点做多次采样取中值——中值比平均更抗单点跳变(那一篇里也讨论过)。

7.4 多装置分时:这是柜级问题,不是板级问题

这一条是最容易被漏掉的,因为它是系统问题。

柜里两套 IMD(PCS 侧 + BMS/BCU 侧)必须互斥:

  • 主控统一调度,任何时刻只允许一套处于测量状态;
  • 或者在硬件上加解耦开关(不测量时断开本机与母线的连接),让两套装置彼此不可见;
  • 并且在配置核对表里显式写一行:“本柜绝缘监测装置共 N 套,分时策略见 X”。多套装置同时工作会互相拉偏读数——这一条厂商的应用手册里会写,但不会主动告诉你的集成商。

7.5 分级、去抖、锁存、复位

判据改成两段式,并且把“去抖次数”和“恢复条件”分开写:

级别 门限 动作 去抖 恢复条件
正常 R ≥ 500 kΩ 无 — —
预警 100 kΩ ≤ R < 500 kΩ 只上报,不清除运行 连续 3 次 连续 3 次回到 500 kΩ 以上
保护 R < 100 kΩ 停机 / 闭锁合闸 连续 5 次 需人工确认后复位

三条纪律:

  1. 预警绝不能停机。这天现场报的 5 次其实都该落在这里。
  2. 保护级必须锁存、必须人工复位。自动复位是现场为了少上站加的,加完之后“故障”和“干扰”就再也分不开了。
  3. 去抖次数不能被优化掉。我在这台机器的代码提交记录里看到一行被改掉的宏:IMD_CONFIRM_CNT 3 → 1,commit 注释是“加快故障响应”。那一行的代价就是后面的一个月。

7.6 自检:必须覆盖盲区,而不只是覆盖通道

原来装置每天做一次自检:并联一只 200 kΩ 的已知电阻,看装置能不能认出来。它天天通过,偏差 3%。

但问题是:自检只能覆盖“装置自己的测量通道”,覆盖不了“判据结构”。

并联后的真实值 = 200 kΩ // 8 MΩ = 195.12 kΩ

也就是说自检实际验证的是“装置能不能测出 195 kΩ 附近的值”。如果判据本身有盲区(平衡电桥),自检照样通过,盲区照样存在。

正确的自检设计:

  1. 自检电阻要打到保护线附近(阈值 100 kΩ → 自检电阻取 47~100 kΩ),这样能明确验证“保护动作链路”是通的,而不只是“能读数”;
  2. 正极、负极各打一次——只打正极的自检发现不了“负极通道 + 对称下降”这个组合;
  3. 记录自检读数与理论值的偏差,超出 ±20% 报警;
  4. 如果用的是不平衡电桥,还要验证两次投切的开关都真的动作了(读回开关状态,或者观察两组电压是否都发生了变化)——开关粘死是这套方案最典型的失效模式,而它导致的后果正好是“表观值失真”,和建立时间不足的症状一模一样。

7.7 可运维性:日志文案决定了这套东西能不能活到第三年

这条是从上一篇 OTA 那篇文章里学来的,这里完全适用:

日志里不要写“绝缘故障”,要写“负母线对地绝缘 180 kΩ,低于预警线 500 kΩ”。

区别在于:前者每次出现,现场都会怀疑是误报;后者自带证据链,现场可以直接去查那一片冷凝水。一个把数字写进日志的系统,运维会留着它;一个只说“故障”的系统,第三个月会被现场手动关掉。

同理,复位逻辑要写清“本次为第 N 次自动复位,累计告警 M 次”。自动复位必须被计数,否则它就是在掩盖问题。


八、另一半:300 mA 那条线

绝缘监测那一半改完,来看 RCMU 这一半。

8.1 连续判据:300 mA 到底在保护谁

先把判据抄清楚(IEC 62109-2 §4.8.3.5.1,也是 NB/T 32004-2013 §7.10.2 的口径):

(a)连续剩余电流——超过限值后 0.3 s 内断开并报故障:

额定输出容量 连续限值 动作时间
≤ 30 kVA 300 mA ≤ 0.3 s
> 30 kVA 10 mA/kVA ≤ 0.3 s

(b)突变剩余电流——在既有连续剩余电流基线上叠加阶跃,按表动作:

突变 RMS 最大动作时间
30 mA 0.30 s
60 mA 0.15 s
150 mA 0.04 s

测量口径:交流分量与直流分量合成的总 RMS 值;测量仪表带宽 ≥ 2 kHz;并且必须同时覆盖直流与交流分量。

现在回答一个我被问过很多次的问题:

既然是保护人身安全,为什么连续阈值定在 300 mA 而不是 30 mA?人不是 30 mA 就有危险了吗?

因为 300 mA 这条线服务的不是人。

无变压器拓扑在完全正常的运行状态下,对地就有高频容性漏电流。看 5.2 节那张表:H5 < 15 mA、HERIC < 20 mA、三相两电平“中等、需共模电感”——而这些都是正常运行值,而且是在干净的实验室里。现场 C_e 因为湿度涨上去之后(第五节:水膜同时推高 C_e 和压低绝缘),这个值还会往上走。

阈值一旦低于“正常的容性漏电流”,装置就会天天跳,然后被人为关掉——那才是真正的不安全。

所以标准的分工是这样:

  • 连续判据(300 mA):服务设备自身的容性漏电流——它的作用是“证明这台机器已经不正常了”,不是“有电击危险了”。定得高的原因是必须给正常容性电流留足余量。
  • 突变判据(30 mA / 0.3 s):服务人身安全——人触电是一个突变的阶跃(突然接触、突然对地导通了),它必须能在 0.3 s 内识别出一个叠加在基线上的 30 mA 阶跃,并把机器切掉。
  • 人体本身的保护:靠的是机壳可靠接地 + 等电位联结(把 30 mA 从人身上引走),不是靠把连续阈值调低。

两条阈值服务两个不同的对象。 把 300 mA 降到 30 mA 不会让系统更安全,只会让它被关掉。想提高人身安全性,该做的是把突变判据做扎实(快、准、不误跳),以及把接地做扎实。

8.2 为什么必须能测直流分量

标准明确要求测量“直流与交流分量的合成 RMS”。这在工程上是个硬要求,因为:

  • 非隔离拓扑会把直流侧的对地故障电流送到交流侧。直流母线对地短路的那部分电流,会经过地回到交流侧的中性点,再通过非隔离的桥臂流回直流侧。这条路径上的电流带直流分量。
  • 纯直流漏电产生的是恒定静磁场,普通电流互感器根本没有输出(线圈不感应直流)。
  • 更麻烦的是:直流偏置会让铁芯单向磁饱和,把原本能测的交流漏电也一起废掉。装置看起来还在工作,实际上已经瞎了。

所以必须用 B 型传感器(对应 IEC 60755 的 RCD 分类:AC 型只测正弦交流、A 型加脉动直流、B 型才测平滑直流),对应光伏/充电桩的强制标准。

8.3 磁调制(磁通门):为什么一块磁芯能“看见”直流

物理上有条硬约束:线性系统不可能通过磁通感应测出直流电流。直流产生的静磁场没有可测的电效应,B-field → 线圈 → 电压 这条链在直流上断掉了。

出路只有一个:把直流和一路高频交流一起作用在“非线性”磁材料上,让直流去调制那路交流,再把直流从交流的边带里解出来。

这就是“磁调制”。数学上非常干净——把磁材料的响应展开到二次项:

f(x) = a·x + b·x²           (B-H 曲线的非线性,b 是关键)

【口径1】差动双磁芯(两芯激励反相,输出取差):
  输出 = f(Hdc + Hx) − f(Hdc − Hx)
       = 2a·Hx + 4b·Hdc·Hx

注意最后一项 4b·Hdc·Hx:直流偏置把交流响应的“幅度”调制了,而且 Hdc = 0 时这一项恰好为零。

这就是“没有直流就没有失配输出”的结构原因——也是差动结构的价值所在。数值上看(a=1, b=1, Hx=1):

Hdc/Hx     基波幅度    相对无偏置    增量
0.00       2.0000     1.0000       0.0000
0.05       2.2000     1.1000       0.2000
0.10       2.4000     1.2000       0.4000
0.20       2.8000     1.4000       0.8000
0.30       3.2000     1.6000       1.2000
0.50       4.0000     2.0000       2.0000
0.80       5.2000     2.6000       3.2000
1.00       6.0000     3.0000       4.0000

灵敏度正比于 2b/a。这句话解释了为什么磁芯必须是纳米晶/非晶合金——高磁导率、低矫顽力、窄磁滞回线,也就是 b 大。普通硅钢的 b 太小,信号弱到没法用。

工程上还有两个口径:

【口径2】二次谐波 / 饱和时刻差法(单磁芯,深度饱和):直流偏置使正负半周的饱和时刻不再对称,输出出现偶次谐波,其幅值正比于直流偏置;也可以直接测正向/反向饱和的时间差 Δt = Hdc / (dH/dt)。这条支路天生带宽低(要低通滤掉 b·Iac² 那一项),所以中高频交流分量得另走一条常规电磁感应支路——这就是为什么 B 型传感器内部常常是“双磁芯复合结构”:一个管直流和低频,一个管交流。

【口径3】闭环(磁场归零 / active nulling):用二次绕组的 PWM 电流产生反向磁通,把磁芯内的磁场钉在零,PWM 占空比就是直流电流的线性读数。对温漂和老化免疫,精度能到 1.5%,-40~105℃ 温漂很小。

选型时最该问厂家的一句话就是:“你们是开环还是闭环?” 开环方案必须做温补 + 定期自校准,在储能柜这种 -20~60℃ 的宽温环境里,开环的长期漂移会直接吃掉判据的余量(300 mA 的判据,如果传感器自己漂 50 mA,那就没法做了)。

8.4 带宽 ≥ 2 kHz 是怎么来的

标准写明测量仪表带宽 ≥ 2 kHz。这一条对应的是突变判据的时间要求:

突变 150 mA → 0.04 s
最苛刻的响应窗口是 40 ms 量级

要在一个 40 ms 的窗口里识别出阶跃,测量通道的带宽至少要在几百 Hz 以上;而漏电流本身含大量开关频率附近的谐波(16 kHz 开关的位移电流),带宽不够就会把真实的突变信号平滑掉、动作变慢。

所以 ≥ 2 kHz 是“能看见突变”和“不被高频噪声误导”之间的平衡点。降带宽省成本的做法,实际是在偷突变判据的时间余量——而突变判据是唯一直接保护人身的那一条。


九、两台装置怎么共存

第七节提过一次,这里单独说,因为它是这套设计里最容易被忽略、又最难在实验室发现的问题。

IMD 的测量动作本质是往对地注入电流:

平衡电桥:稳态就有 U_bus / R_b = 7.68 mA(每侧),而且一直存在
不平衡电桥:投切瞬间的注入电流 = U_bus / R_st
768 V / 100 kΩ = 7.68 mA ;若 R_st 取 10 kΩ,就是 76.8 mA

这笔电流在 RCMU 眼里就是“剩余电流”。

它的量级是 mA 到几十 mA——不到 300 mA 的连续阈值,但可能已经超过 30 mA 的突变阈值。

后果有两种,都很隐蔽:

  1. IMD 投切的瞬间,RCMU 看见一个几十 mA 的阶跃。如果 IMD 的投切恰好落在 RCMU 进行突变判定的窗口里,就产生一次误跳。
  2. IMD 的内部桥电阻长期挂在对地,给 RCMU 抬高了一个稳定的基线。如果这个基线没被扣除,RCMU 的“有效余量”就少了几十 mA——在 C_e 大、正常容性电流本来就偏高的时候,这个余量可能正好是决定跳不跳的那一点。

处理办法有三条,必须同时做:

  1. 时间错开:IMD 测量期间,RCMU 暂停突变判定(或者把判定窗口跳开);这需要两个功能在同一颗 MCU 上跑,或者通过主控协调。如果 IMD 和 RCMU 是两颗独立芯片、各自为政,这一条就做不了——这是选型时就要定下来的架构问题。
  2. 基线扣除:RCMU 的判据里扣除 IMD 桥电阻带来的已知稳态偏置(这个值是设计已知的常量)。
  3. 上电时序:上电瞬间 C_e 要充电,充电电流同样会被 RCMU 当成漏电流。所以 RCMU 必须在母线预充完成、C_e 电压稳定之后才使能,而且使能时要有一个短时的高阈值“沉默窗口”。

第九节这三条加在一起,其实说明了一件事:绝缘监测和剩余电流检测在电气上不是两个独立的模块,它们在“对地电流”这一个物理量上耦合。分开做板子、分开写固件、最后现场拼起来,一定会撞上这个问题。


十、固件落地:几个能直接抄的写法

10.1 定点算绝缘电阻

母线 768V、16 位 ADC、5V 基准,1 LSB = 76 µV。投切电阻 100 kΩ,采样点的电压摆幅从 6V 到 762V——所以采样通道前端有分压和隔离放大。

反解 R+ 的闭式解里全是乘除,必须全程整数、先乘后除、int64 中间量:

/* 全部整数: 电压单位 uV, 电阻单位 mΩ, 比值用 Q16 定点 */
static int32_t imd_solve_rx_mohm(int32_t u1p_uv, int32_t u1n_uv,
                                 int32_t u2p_uv, int32_t u2n_uv,
                                 int32_t r1_mohm, int32_t r2_mohm)
{
    int64_t a_q16, b_q16, num, den, rx_mohm;

    if (u1n_uv == 0 || u2n_uv == 0) { return IMD_ERR_DIV_ZERO; }

    a_q16 = ((int64_t)u1p_uv << 16) / u1n_uv;     /* A = U1+/U1- (Q16) */
    b_q16 = ((int64_t)u2p_uv << 16) / u2n_uv;     /* B = U2+/U2- (Q16) */

    if (b_q16 <= a_q16) { return IMD_ERR_RATIO; }  /* 数据不合理, 直接报错 */

    /* R+ = (B - A) / (A/R1 + 1/R2)
       通分后: R+ = (B - A) * R1 * R2 / (A * R2 + R1)
       分子分母都带 2^16 的定标, 一次乘除完成, 不做分步除法 */
    num  = (b_q16 - a_q16) * (int64_t)r1_mohm * (int64_t)r2_mohm;
    den  = (a_q16 * (int64_t)r2_mohm) + ((int64_t)r1_mohm << 16);
    if (den <= 0) { return IMD_ERR_RATIO; }

    rx_mohm = num / den;
    if (rx_mohm > IMD_R_MAX_MOHM) { rx_mohm = IMD_R_MAX_MOHM; }  /* 上限限幅 */
    return (int32_t)rx_mohm;
}

这段代码的重点有三条:

  1. 通分后再一次乘除。A/R1 + 1/R2 如果按顺序一步步除,每一步都会丢精度,最后误差可能到百分之几十。通分写成 A·R2 + R1 之后只除一次。
  2. 上限必须限幅。绝缘很干的时候 R 会算到几百 MΩ,定点数很容易溢出;限幅到 IMD_R_MAX_MOHM,并且上报时要能被区分成“至少这么大”而不是“就这么多”。
  3. 拒绝不合理的比值。B ≤ A 在不平衡电桥里是数学上不该出现的状态,出现就说明数据有问题——直接报错,不要硬算。

10.2 温补也必须用除法形式

这一点在《电流采样链路》里已经吃过一次:

/* 正确: 除法形式 */
r_corrected = r_measured * 1000000LL / (1000000LL + tc_ppm * dt);

/* 错误: 线性近似 (在 ppm 量级误差小, 但在 % 量级会留系统性残差) */
/* r_corrected = r_measured * (1000000LL - tc_ppm * dt) / 1000000LL; */

投切电阻、采样电阻、隔离放大器的增益,每一个的温度项都要用除法形式,别图省事用线性近似。

10.3 故障分类与原因码

不要只报一个“绝缘故障”。至少分成五类,每一类对应一个不同的现场动作:

typedef enum {
    IMD_OK              = 0,
    IMD_WARN_POS        = 1,   /* 正母线绝缘低 -> 查正极侧电缆/端子 */
    IMD_WARN_NEG        = 2,   /* 负母线绝缘低 -> 查负极侧电缆/端子 */
    IMD_WARN_SYMMETRIC  = 3,   /* 两极等值下降 -> 查整段母线水膜/整柜湿度 */
    IMD_TRIP_POS        = 4,
    IMD_TRIP_NEG        = 5,
    IMD_TRIP_SYMMETRIC  = 6,
    IMD_FAULT_CHANNEL   = 7,   /* 通道异常: 两次投切电压无变化 -> 开关粘死 */
    IMD_FAULT_PARAM     = 8,   /* 参数未标定 / 标定值超范围 */
    IMD_FAULT_MUTEX     = 9,   /* 检测到另一套 IMD 同时在测量 */
} imd_code_t;

IMD_WARN_SYMMETRIC 这个分类是这次改造新加的。原来的代码里没有它——因为平衡电桥根本产生不了这个状态。加了不平衡电桥之后,它必须有一个独立的分类和独立的现场动作:“查整柜湿度”和“查某一极的电缆”是完全不同的两件事。

10.4 上报:沿用站内那条铁律

  • 全程整数,不打印浮点(不占 %f 的代码空间,也不会有四舍五入的口径问题);
  • 上报原始值 + 判据门限 + 状态码,不要在设备端做“好看”的格式化;
  • 每一次状态变化带时间戳,并且记录累计次数;
  • 点表按上一篇《逆变器 Modbus 点表》里那套做法,做成声明式 JSON 点表:
{
  "point": "imd_r_neg",
  "addr": 4201,
  "func": 4,
  "type": "uint16",
  "byte_order": "AB",
  "scale": 1,
  "unit": "kOhm",
  "invalid": [0, 65535],
  "note": "负母线对地绝缘电阻; 0=无效, 65535=超量程"
}

注意 invalid 那一项:它把“真 0”和“量程外”区分开了。上一篇里那三类哨兵值的坑,在这里会原样再出现一次——绝缘电阻上报 0,你要能分清是“短路了”还是“没测到”。


十一、现场五招

都是低成本、当天能做的动作,按“能排除多少可能性”排序:

  1. 先看实时值,再谈误报。别一上来就说“装置坏了”。让现场在告警前后各截一张装置读数曲线——如果读数在阈值附近游荡,那是读数问题;如果读数稳稳地贴在某个低值上,那是绝缘真有问题。这一步能把两个方向分开。
  2. 拆开两极看。如果装置只能给一个“绝缘故障”的数字,那它大概是平衡电桥。上不平衡电桥的读数,或者直接拿两只高阻表分别量正极、负极对地——对称下降和单侧下降的现场动作完全不同。
  3. 拿湿度复现。湿热箱 40℃ / 93%RH 跑 48h,开门立刻测两极对地电阻。如果复现出来了,问题定性就结束了——不用再猜是不是干扰。这一招救了我一个月。
  4. 数一数柜里有几套 IMD。把 BMS/BCU 侧的绝缘监测也翻出来,看它的测量时刻跟 PCS 侧有没有错开。这一条最容易被漏掉,因为它是跨厂商的事。
  5. 在装置投切的那一瞬间,同时量两个东西:直流母线对地电压的过渡曲线(示波器),和 RCMU 的输出。前者的时间常数就是 τ,后者告诉你有没有互相干扰。这一组波形基本能把第七节的所有问题一次性定位。

十二、对接自查清单(14 项)

发版/上站前逐条过:

  • ☐ 绝缘监测用的是不平衡电桥(两个独立方程),不是平衡电桥
  • ☐ 采样等待时间由 3 × (R_st ∥ R_iso) × C_e 算出,不是写死的常数
  • ☐ C_e 已实测/标定,并写进参数区(含“未标定”状态)
  • ☐ 采样窗口与 PWM 同步,且避开换流沿
  • ☐ 同一点多次采样取中值(不是平均)
  • ☐ 柜内多套 IMD 已确认分时互斥,并有配置记录
  • ☐ RCMU 扣除了 IMD 桥电阻带来的稳态基线
  • ☐ RCMU 使能时序在母线预充完成之后,且有沉默窗口
  • ☐ RCMU 传感器是 B 型(能测平滑直流),带宽 ≥ 2 kHz
  • ☐ 连续阈值按 ≤30 kVA → 300 mA / >30 kVA → 10 mA/kVA 分档,且核对过铭牌的视在容量
  • ☐ 突变判据 30/60/150 mA 三档全部实测过(不是只测一档)
  • ☐ 判据分级:预警不停机、保护锁存、保护级需人工复位
  • ☐ 去抖次数 ≥ 3(保护级 ≥ 5),且没有人能用一个宏把它改成 1
  • ☐ IMD 自检打到保护线附近、正负各一次、偏差超 ±20% 报警

十三、三个可以带走的结论

第一,同一个装置可以同时“漏报”和“误报”,取决于错误落在哪一侧。

这次复盘最让我后背发凉的一点是:这两个方向的错误在同一台机器上同时存在,而且根因完全不同。

方向 现象 根因层 后果
漏报 两极等值降到 15 kΩ,装置报“完好” 判据结构(平衡电桥盲区) 该停不停,可能放弧
误报 真值 180 kΩ,装置算出 29.5 kΩ 就停机 读数生成(建立时间/噪声/互扰) 该跑不跑,运维会关掉它

而且这两个方向的错误会互相掩护:因为装置一直在误报,现场就倾向于认为它“太敏感”,一旦真的漏报(对称下降),谁也不会往判据结构上想。

修的时候必须两头都修。只把建立时间改对(治误报),平衡电桥的盲区(漏报)还在;只换成不平衡电桥(治漏报),采样太早的问题(误报)还在。我这次是两边同时动,读数才第一次变得可信。

第二,“等多久”不是经验常数,它是三个参数的乘积。

任何一个“投切一个电阻,再读电压”的测量,都有一行被跳过的账:

τ = ( R_投切 ∥ R_绝缘 ) × C_e
等到 3τ 才有 95%

20 ms 这个数在别的地方也许是对的(比如躲工频),但放在这里就是错的——因为它跟 C_e 无关,而 C_e 从 0.1 µF 到 10 µF 差两个数量级。

更值得记的是那个扫描表的对角线:C_e × 采样时刻 以乘积的形式起作用。所以“我把采样时刻从 20 ms 提到 100 ms 了”这句话,在没测过 C_e 之前是没有意义的。先把三个数写下来,再决定等多久。

第三,绝缘监测和剩余电流检测服务两个不同的对象,两条阈值不能互相推导。

服务对象 阈值 为什么是这个值
连续剩余电流 设备自身 300 mA 必须大于正常的容性漏电流,否则天天误跳
突变剩余电流 人身安全 30 mA / 0.3 s 触电是突变;必须快、准、不误跳
绝缘电阻 设备资产 500 kΩ / 100 kΩ 早期发现劣化趋势,防接地放弧
绝缘电阻(标准合格线) 产品出厂 1 MΩ / 湿热后 0.5 MΩ 造出来是什么样,不是跑到什么程度该停

这张表的每一行都不能用另一行推出来。把 300 mA 降到 30 mA 不会更安全,只会让系统被关掉;把绝缘门限提到 1 MΩ 也不会更安全,只会让梅雨季的柜子天天停。

想把系统做安全,该做的是把每条判据都做扎实——而不是把阈值改小。


十四、下一篇

这一篇讲的是“直流侧对地”这条线上的监视:绝缘监测看电阻、剩余电流看电流,一个慢一个快。

下一期回到通信这条线,把 10 月 13 日那篇《逆变器 Modbus 点表与上位机对接》补完它的另一半:写控制。

读寄存器只是解码,写寄存器多了三类坑:

  • 写保护与权限位——为什么有的点写下去了没反应,有的要点两下才生效;
  • 参数落 NVM 的时序——写了什么时候生效、掉电会不会丢、连续写会不会写坏 Flash;
  • “写下去但设备没接受”的静默失败——最恶心的一类,因为寄存器回读是对的,行为和设定值却不一样。

还有一条线一直挂着没写:遥控遥调的安全联锁(并离网切换、充放电限值、故障复位这几个动作,写错一个就是现场事故)。

两篇都会写。这篇之后,我手上这台柜子的绝缘数据还要再跑一个梅雨季才算完整——如果那时候数据有变化(比如换成不平衡电桥之后的长期趋势),我会再补一篇复盘。


本文的现场估算脚本:drafts/_tools/imd_rcmu_calc.py(纯标准库、全离线,含 --self-test 16 项)。