首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >恒温恒湿的自动化闭环:基于 PID 算法的档案库房环境调控系统落地手记

恒温恒湿的自动化闭环:基于 PID 算法的档案库房环境调控系统落地手记

原创
作者头像
盛世宏博科技
发布于 2026-09-17 16:52:35
发布于 2026-09-17 16:52:35
3110
举报

恒温恒湿的自动化闭环:基于 PID 算法的档案库房环境调控系统落地手记

档案库房恒温恒湿,从来不是“装几台空调和除湿机”这么简单。

真正决定成败的,是能否把环境目标、设备能力、传感器测量、控制算法和验收标准连成一条闭环。温度、湿度又是天然耦合的两个量:除湿必然降温,加湿往往升温;控制逻辑处理不好,就会出现“温稳了湿不稳、湿降了温先掉”的来回拉扯。

本文结合 PID 控制原理与现行档案行业标准,记录一套可调试、可审计、可验收的自动化闭环实现方法。


一、先定标准:档案库房要控制什么

系统上线前,必须先把“合规目标”翻译成“控制参数”,否则算法再精巧,也只是闭着眼睛开车。

1. 基础环境指标

按照 JGJ 25—2010,纸质档案库温度宜为 14~24℃、相对湿度宜为 45%~60%;选定温湿度后,每昼夜温度波动幅度不得大于 ±2℃、相对湿度波动幅度不得大于 ±5%;不同载体还应分区设定。

库房类型

温度

相对湿度

纸质档案库

14~24℃

45%~60%

特藏库

14~20℃

45%~55%

音像磁带库

14~24℃

40%~60%

胶片拷贝片库

14~24℃

40%~60%

胶片母片库

13~15℃

35%~45%

2. 不能采用“双上限、双下限”

DA/T 87—2021 明确指出:温度、湿度取值要避开表列上下限附近,且不应同时为双上限值或双下限值。这不是软件限制,而是为了在设备测量和控制精度不足时,为系统留出安全裕量。

因此,项目实际设定要落在“稳定区”,例如纸质档案库可以定:

  • 温度设定:20℃
  • 湿度设定:52%
  • 日波动控制目标:温度±1.5℃、湿度±4%以内

3. 工程标准比“宣传精度”更重要

DA/T 101—2024 定义的恒温恒湿档案库房,是能够在极值气象条件下保持温度全年波动不超过 ±2℃、相对湿度全年波动不超过 ±5%​ 的库房。

这意味着项目验收要看的不是某一秒的漂亮曲线,而是:

极端天气是否扛得住、夜间是否漂移、周末是否失控、连续运行是否稳定。


二、系统架构:感知—决策—执行—审计

档案库房环境调控不能写成多个“if-else”开关逻辑,而应组织成四层闭环。

代码语言:javascript
复制
┌──────────────────────────────┐
│ 感知层                       │
│ 温湿度 / 回风温湿度 / 漏水   │
│ 阀门开度 / 设备电流 / 滤网   │
└────────────┬─────────────────┘
             ▼
┌──────────────────────────────┐
│ 决策层                       │
│ 数据滤波 → 偏差计算          │
│ 安全联锁 → PID运算 → 解耦    │
└────────────┬─────────────────┘
             ▼
┌──────────────────────────────┐
│ 执行层                       │
│ 冷水阀 / 电加热 / 加湿       │
│ 除湿压缩机 / 新风机 / 风机   │
└────────────┬─────────────────┘
             ▼
┌──────────────────────────────┐
│ 审计层                       │
│ 设定值 / 动作 / 能耗         │
│ 报警 / 校准 / 操作员审批     │
└──────────────────────────────┘

设备级与平台级分工

  • 控制器负责闭环速度:传感器采集、PID计算、阀门调节,通常放在 PLC、DDC 或边缘网关;
  • 平台负责策略与审计:分区域设定、设备轮换、报警升级、趋势分析、能耗统计;
  • 平台不能替代控制器:网络中断时,DDC/PLC 必须能按最后安全设定继续运行。

三、PID 到底在控制什么

1. 核心公式

离散位置式 PID 可写为:

代码语言:javascript
复制
e(k) = SP(k) − PV(k)
u(k) = Kp·e(k)
     + Ki·Σe(k)·Δt
     + Kd·[PV(k−1) − PV(k)] / Δt

其中:

  • PV:过程变量,如回风温度或相对湿度;
  • SP:设定值;
  • e:偏差;
  • u:控制输出,如冷水阀开度、电加热功率或变频器频率;
  • Kp:比例增益;
  • Ki:积分增益;
  • Kd:微分增益。

2. 三个作用分别解决什么问题

项

作用

调得过大的后果

P 比例

偏差大时加大输出

响应快,但易超调、振荡

I 积分

消除长期静差

积分饱和、恢复慢、超调

D 微分

感知变化趋势并提前刹车

放大传感器噪声,引发高频抖动

PID 的工程难点不是把三个参数调大,而是在响应速度、超调和稳态精度之间取得平衡。


四、温度与湿度的耦合:湿度优先、联合解耦

档案库房最典型的“打架”场景如下:

  1. 湿度偏高,控制器启动除湿;
  2. 除湿伴随降温,温度开始下降;
  3. 温度控制器启动加热或停止制冷;
  4. 温度上升又影响相对湿度;
  5. 两个回路反复修正,最终出现振荡。

1. 设定湿度优先策略

当湿度过高时,允许短期温度偏离,但应受到安全边界约束。例如:

  • 湿度超过设定值 H_high;
  • 温度不低于 T_set − 3℃;
  • 若温度已经偏低,则先降低温度目标或提高再热输出;
  • 湿度恢复后,再让温度回路缓慢回到主设定值。

这不等于“永远湿度优先”。若温度已经逼近档案安全下限,则应禁止继续除湿,否则会制造新的风险。

2. 再热预测补偿

除湿开始时,控制器不应等温度掉下来再加热,而应根据经验模型计算预估温降:

代码语言:javascript
复制
predicted_temp_drop = k × dehumidifier_capacity
reheat_output = predicted_temp_drop × temp_gain

这是一种简化的前馈补偿,而不是完整模型预测控制。其价值在于:减少等待偏差出现后再修正所造成的来回摆动。

3. 互斥与顺序控制

  • 加湿器与除湿机不得同时输出;
  • 制冷阀与电加热不得同时满功率输出;
  • 除湿结束后,再热应按斜率退出,而非瞬间关闭;
  • 压缩机、加湿器应设置最小运行时间和最小停机时间,防止频繁启停。

五、算法实现:可落地的 PID 控制器

下面示例采用增量式 PID,并对积分饱和、输出变化率和传感器跳变做了基础防护。

代码语言:javascript
复制
from dataclasses import dataclass
from time import time

@dataclass
class PIDConfig:
    kp: float = 1.0
    ki: float = 0.05
    kd: float = 0.0
    out_min: float = 0.0
    out_max: float = 100.0
    out_step: float = 15.0     # 单周期最大输出变化
    integral_limit: float = 200.0
    derivative_filter: float = 0.2  # 0~1,越大越平滑

class PIDController:
    def __init__(self, cfg: PIDConfig):
        self.cfg = cfg
        self.integral = 0.0
        self.prev_error = 0.0
        self.prev_measurement = None
        self.prev_output = 0.0
        self.last_time = None

    def update(self, setpoint: float, measurement: float, now: float = None) -> float:
        if now is None:
            now = time()
        if measurement is None or measurement != measurement:
            return self.prev_output  # NaN 保护

        dt = now - self.last_time if self.last_time else 0.0
        self.last_time = now

        error = setpoint - measurement

        # 对测量值微分,避免设定值阶跃时产生微分冲击
        if self.prev_measurement is not None and dt > 0:
            raw_d = (self.prev_measurement - measurement) / dt
            raw_d = raw_d * 0.0 + error - self.prev_error  # 可切换为测量值微分
        else:
            raw_d = 0.0

        derivative = self._low_pass(raw_d)

        self.integral = self._clamp(
            self.integral + error * (dt if dt > 0 else 0.0),
            -self.cfg.integral_limit,
            self.cfg.integral_limit
        )

        output = (
            self.cfg.kp * error
            + self.cfg.ki * self.integral
            + self.cfg.kd * derivative
        )

        # 抗积分饱和:输出越限时,只累加有助于退出饱和的误差
        if output > self.cfg.out_max and error > 0:
            self.integral -= error * dt
        elif output < self.cfg.out_min and error < 0:
            self.integral -= error * dt

        output = self._clamp(output, self.cfg.out_min, self.cfg.out_max)
        output = self._clamp_step(output)

        self.prev_error = error
        self.prev_measurement = measurement
        self.prev_output = output
        return round(output, 2)

    def _clamp(self, value, lo, hi):
        return max(lo, min(hi, value))

    def _clamp_step(self, value):
        step = self.cfg.out_step
        return self._clamp(value, self.prev_output - step, self.prev_output + step)

    def _low_pass(self, value):
        if self.prev_measurement is None:
            return value
        alpha = self.cfg.derivative_filter
        self._filtered_d = getattr(self, '_filtered_d', value)
        self._filtered_d = alpha * value + (1 - alpha) * self._filtered_d
        return self._filtered_d

运行示例

代码语言:javascript
复制
pid = PIDController(PIDConfig(
    kp=1.2,
    ki=0.03,
    kd=0.1,
    out_min=0,
    out_max=100,
    out_step=8
))

for pv in [55, 56, 58, 60, 59, 57, 54, 53]:
    print(pid.update(52, pv))

参数仅用于演示。现场必须根据实际设备容量、传感器响应时间和执行器死区重新整定。


六、整定方法:不要在“自动”模式下盲调

1. 现场整定步骤

  1. 完成开环测试​ 逐个执行冷水阀、电加热、加湿器、除湿机等动作,记录输出百分比与温湿度响应,建立设备能力与响应时延的对应关系。
  2. 先关积分、微分​ 从小增益开始,只保留比例作用,确认系统方向与输入输出正确。
  3. 加入积分消除静差​ 积分增益逐步增大,但不允许控制器长时间处于输出饱和状态。
  4. 谨慎加入微分​ 档案库房对噪声较敏感,微分通常只作用于经过滤波的测量值。
  5. 测试耦合工况​ 同时改变温度、湿度设定值,观察回风温湿度、阀门、加湿和再热是否持续互相抵消。
  6. 开展季节性与极限测试​ 至少覆盖最热日、最冷日、连续阴雨和高湿天气;普通改造项目宜连续运行 7~14 天观察,正式验收则应满足 DA/T 101—2024 关于连续运行和联调的要求。

2. 常见现象与处理

现象

优先检查项

湿度持续高位振荡

加湿与除湿互锁、阀门死区、测量位置、整定周期

除湿后温度掉得快

再热补偿、湿度优先边界、冷水阀过冲

温度周期性振荡

P 偏大、积分过强、最小启停时间不足

控制输出频繁满量程

设备容量不匹配、传感器位置偏离气流

白天稳、夜间漂

新风变化、值班模式、室外渗透、防冻策略

平台显示与现场不一致

单位换算、传感器校准、网络缓存、时钟同步


七、从“算法控制”走向“安全控制”

PID 只能负责缩小偏差,不能决定设备是否允许动作。以下逻辑必须独立于优化算法。

1. 硬联锁

  • 漏水报警:关闭加湿器、冷水阀及相关电动水阀;
  • 防火信号:联动空调、新风和排风策略,执行消防优先;
  • 低温防冻:室外盘管、水管达到阈值时,禁止继续降温或启动防冻循环;
  • 风机失风:禁止电加热、加湿器运行;
  • 传感器通信中断:进入安全模式,停止依据单一错误数据连续修正。

2. 操作审批

以下动作不应由规则自动执行:

  • 修改温湿度设定值;
  • 切换恒温恒湿模式;
  • 关闭联动保护;
  • 修改 PID 参数;
  • 长时间禁止除湿或制冷;
  • 屏蔽高等级报警。

审计日志应至少记录:

代码语言:javascript
复制
who + when + zone + before + after + reason + approved_by

八、验收:用曲线证明系统稳定

DA/T 101—2024 要求恒温恒湿空调系统连续正常运行 24~48 小时后进行相关检测,同时要求系统联调覆盖全部设计运行工况和极限负载;正式验收应在所有设备单机运行、联调联试合格且设计工况满足要求的基础上进行。

项目建议建立四层证据链:

1. 静态精度

记录不同区域、不同高度温湿度的极差与标准偏差,确认传感器测点能够代表真实环境。

2. 动态响应

测试设定值阶跃、设备启停、人员进出、新风变化和极端天气扰动后的恢复曲线,统计超调量、稳定时间和最大偏差。

3. 长期稳定

连续记录至少 24 小时温湿度检测数据;对于完整恒温恒湿项目,应按行业标准完成相应连续运行和联调验证。

4. 审计闭环

把“报警—处置—设备动作—环境恢复”串成完整事件,而不是只导出一张温湿度趋势图。


九、容易踩的四个坑

1. 把传感器装在空调直吹处

传感器只测到出风温度,平台却据此认为库房合格。

正确做法:按气流组织布置传感器,避免正对送风口、回风口死区和阳光直射位置。

2. 温度、湿度两个回路各自为政

温度控制器不知道正在除湿,湿度控制器不知道正在再热。

正确做法:建立优先级、互斥表、前馈补偿和斜率退出机制。

3. 用普通舒适型空调冒充恒温恒湿系统

普通空调能够降温,却未必能够精密除湿、再热和连续调节。

正确做法:核对设备能力、阀门调节方式、传感器精度及独立控制能力。

4. 验收只看“范围”不看“波动”

瞬时数值落在 14~24℃、45%~60%,不代表全年波动合格。

正确做法:把昼夜波动、季节波动、极端天气响应纳入验收指标。


十、一句话总结

档案库房恒温恒湿的本质,不是“把温度打到多少、湿度打到多少”,而是:

用测量数据发现偏差,用 PID 缩小偏差,用耦合控制协调温度和湿度,用联锁守住安全边界,用长期曲线证明稳定。

PID 只是闭环中的一部分;真正让智慧档案建设落地的,是标准、设备、控制、传感、运行和审计共同构成的完整系统。

标签:#智慧档案馆建设#档案馆温湿度监控系统#档案八防系统#档案十防系统#档案恒温恒湿系统

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 恒温恒湿的自动化闭环:基于 PID 算法的档案库房环境调控系统落地手记
  • 一、先定标准:档案库房要控制什么
    • 1. 基础环境指标
    • 2. 不能采用“双上限、双下限”
    • 3. 工程标准比“宣传精度”更重要
  • 二、系统架构:感知—决策—执行—审计
    • 设备级与平台级分工
  • 三、PID 到底在控制什么
    • 1. 核心公式
    • 2. 三个作用分别解决什么问题
  • 四、温度与湿度的耦合:湿度优先、联合解耦
    • 1. 设定湿度优先策略
    • 2. 再热预测补偿
    • 3. 互斥与顺序控制
  • 五、算法实现:可落地的 PID 控制器
    • 运行示例
  • 六、整定方法:不要在“自动”模式下盲调
    • 1. 现场整定步骤
    • 2. 常见现象与处理
  • 七、从“算法控制”走向“安全控制”
    • 1. 硬联锁
    • 2. 操作审批
  • 八、验收:用曲线证明系统稳定
    • 1. 静态精度
    • 2. 动态响应
    • 3. 长期稳定
    • 4. 审计闭环
  • 九、容易踩的四个坑
    • 1. 把传感器装在空调直吹处
    • 2. 温度、湿度两个回路各自为政
    • 3. 用普通舒适型空调冒充恒温恒湿系统
    • 4. 验收只看“范围”不看“波动”
  • 十、一句话总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档