## 低阻配对读数：记录与计算

用 `blank-readings.csv` 保留实际读数及测量条件，将 `FILL_REAL_ID` 替换为样件标识。`demo-readings.csv` 的三行均为自拟演示，不是 MTTJ 实测或验收样件。`kelvin_pair_calc.py` 根据每组有符号电流、电压读数计算电阻和偏置。

Python 脚本只用标准库，离线运行，无需安装其他包。它不控制仪器、不核验干电路设置，也不判产品合格。测量假设及适用产品规范仍须按正文分别确认。

## 16 个输入字段

保留字段名。脚本只读取四个有符号读数字段用于计算，其余输入字段作为测量背景原样保留；它不检查这些背景字段的值。

| 字段 | 含义及单位 |
| --- | --- |
| `sample_id` | 该行对应的样件标识 |
| `sample_state` | 测量时的样件状态 |
| `spec_revision` | 本次测量采用的产品规范版本 |
| `sense_A_B_drawing_ref` | 标明 A/B 感测位置的图纸引用 |
| `fixture_id` | 所用夹具标识 |
| `method` | 记录的测量方法；配套模板使用 `four_wire_current_pair` |
| `range` | 仪器量程 |
| `source_limit_mV` | 记录的源电压限制，单位 mV |
| `sample_history` | 样件历史，含此前的机械、环境或电气试验 |
| `i_plus_mA` | 正向读数的有符号实测电流，单位 mA；计算要求大于 0 |
| `i_minus_mA` | 反向读数的有符号实测电流，单位 mA；计算要求小于 0 |
| `v_plus_uV` | 与 `i_plus_mA` 配对的有符号感测电压，单位 μV |
| `v_minus_uV` | 与 `i_minus_mA` 配对的有符号感测电压，单位 μV |
| `sampled_plus_at` | 正向读数的采样时间，按记录文本保留 |
| `sampled_minus_at` | 反向读数的采样时间，按记录文本保留 |
| `note` | 随原始行保留的备注 |

电流和电压都保留符号。电压为零是数值读数；空值表示缺测，必须保持为空。四个有符号读数字段中任何一个缺失、为空或仅含空白字符时，脚本都不以零代入。背景字段中的空值也保持为空。

## 计算及四个输出字段

对完整有效的配对，脚本采用：

`R = (V+ − V−) / (I+ − I−)`

`E = V+ − I+ R`

第二式由 `V = IR + E` 求出偏置。输入使用 μV 和 mA 时，`R` 的单位为 mΩ，`E` 为 μV。计算假设电阻线性且配对期间偏置稳定；产生结果不表示已检验这些假设。数值输出最多保留 12 位有效数字。

| 输出字段 | 含义 |
| --- | --- |
| `r_pair_mohm` | 配对计算电阻，单位 mΩ；缺测或无效时为空 |
| `offset_pair_uV` | 配对计算偏置，单位 μV；缺测或无效时为空 |
| `calculation_status` | 脚本计算状态：`calculated`、`missing` 或 `invalid` |
| `calculation_note` | 脚本对状态及计算假设的说明 |

| 状态标记 | 写入条件 |
| --- | --- |
| `calculated` | 四个输入均为有限数，正电流大于 0、负电流小于 0，且两个计算输出均为有限数。原样备注为 `Assumes a linear resistor and stable offset. No acceptance judgment.`，意为假设电阻线性且偏置稳定，不作验收判断。 |
| `missing` | 至少一个有符号读数字段缺失或为空。两个数值输出均为空。原样备注为 `Missing readings; no zero imputation.`，意为读数缺失，不以零补值。 |
| `invalid` | 输入不是数值或不是有限数，电流符号不符合要求，或计算输出不是有限数。两个数值输出均为空，备注给出原因。 |

`invalid` 的原样备注为 `Readings must be numeric.`、`Require finite readings and Iplus>0, Iminus<0.` 或 `Non-finite calculated output.`，分别表示读数须为数值、读数须有限且满足正负电流要求、计算输出不是有限数。这些状态和备注只描述计算处理，不是产品验收结果。

## 阅读自拟演示

| 演示行 | I+ / I− (mA) | V+ / V− (μV) | `r_pair_mohm` (mΩ) | `offset_pair_uV` (μV) | `calculation_status` |
| --- | --- | --- | ---: | ---: | --- |
| `DEMO_STABLE` | +10 / −10 | +110 / −90 | 10 | 10 | `calculated` |
| `DEMO_DRIFT` | +10 / −10 | +110 / −86 | 9.8 | 12 | `calculated` |
| `DEMO_UNEQUAL` | +12 / −8 | +130 / −70 | 10 | 10 | `calculated` |

漂移演示在两次读数之间将假设偏置从 10 改为 14 μV，配对得到 9.8 mΩ 和 12 μV 偏置。`calculated` 状态不能检测或消除这段漂移。不同电流大小的演示保留实际有符号值 +12 和 −8 mA，得到 10 mΩ。空白模板中有符号读数保持为空时，两个数值输出也为空，状态为 `missing`。

## 离线运行并保留输入

将脚本与所选 CSV 保存在本地，再运行 `python kelvin_pair_calc.py demo-readings.csv result.csv`。计算实际读数时，用已填写的空白模板作输入，另选输出文件。输入和输出解析为同一路径时，脚本拒绝运行，以保留原始输入。

输出保留输入字段并追加四个计算字段。若输入已有这四个同名输出字段，脚本用本次计算值替换它们。结果写为带字节顺序标记的 UTF-8 CSV。计算持续将缺测值保留为空，不作合格或不合格判断。
