1. 项目背景与系统概述
去年接手某GMP认证药厂的洁净空调系统改造项目时,面对的最大挑战是如何在不停产的情况下,将老旧的PLC控制系统升级为满足现行药品生产质量管理规范的全新系统。经过多方比选,最终选择了西门子S7-1500系列PLC作为核心控制器,搭配ET200SP分布式IO和精智系列触摸屏,构建了一套高精度的洁净环境控制系统。
这套系统的核心诉求非常明确:在药品生产的关键区域(如灌装间、冻干机房),必须将温度控制在22±1℃,相对湿度控制在45±5%RH,同时维持房间正压差在15Pa以上。这些参数直接关系到药品生产的无菌保障水平,任何波动超标都可能导致整批产品报废。
2. 硬件架构设计解析
2.1 控制器选型考量
选择S7-1515F-2PN CPU主要基于三个关键因素:
- 安全冗余需求:该CPU支持Profinet IRT(等时同步实时通信),确保在分布式IO架构下仍能保持确定性的控制周期。实测在100ms的控制周期下,时间抖动不超过±50μs。
- 运算性能储备:相比S7-1200系列,1500的SCL指令执行速度快3-5倍,这对需要实时计算露点温度、进行串级PID运算的场景至关重要。
- 故障安全特性:内置的安全功能模块可以直接读取安全IO模块的状态,在检测到传感器故障时自动切换到预设的安全值,避免失控。
2.2 分布式IO布局
现场采用ET200SP接口模块配合以下信号模块:
- AI 8xRTD:用于PT100温度传感器采集,关键点位采用四线制接法消除线阻影响
- AQ 4xU/I:输出4-20mA信号控制变频器和电动调节阀
- DI 16x24VDC:监测风机运行状态、压差开关等数字量信号
- DQ 8x24VDC:控制接触器、指示灯等
特别提醒:ET200SP的模块底座有浅色和深色之分,浅色底座只能用于标准模块,深色底座用于安全模块。我们在初期调试时就因为混用导致模块无法识别,耽误了半天排查时间。
3. 控制程序设计精要
3.1 程序架构设计
采用模块化编程思想,将系统分解为以下功能块:
- OB30循环中断组织块(100ms周期):包含所有核心控制算法
- FB1001_RoomCtrl:单个洁净室的完整控制逻辑
- FB2001_PID_Cascade:串级PID算法封装
- FB3001_ValveSplitRange:分程控制逻辑
每个洁净室对应一个DB背景数据块,存储所有运行参数。这种设计使得新增洁净室时,只需实例化新的FB并分配独立DB即可,极大提高了代码复用率。
3.2 串级PID实现细节
温度控制采用典型的串级结构:
- 主回路:以房间温度为被控量,输出作为副回路设定值
- 副回路:以送风温度为被控量,直接控制加热/冷却执行机构
SCL实现的核心代码如下:
scl复制// 主PID计算
#MainPID(
Setpoint := "Room1".SetTemp,
Input := "Room1".ActualTemp,
Cycle := T#100MS,
Kp := 2.5,
Tn := T#20S,
Td := T#5S,
Output => "Room1".CascadeSP
);
// 副PID计算
#SubPID(
Setpoint := "Room1".CascadeSP,
Input := "AHU1".SupplyAirTemp,
Cycle := T#100MS,
Kp := 1.8,
Tn := T#10S,
Output => "Room1".HeaterOutput
);
调试心得:主回路的积分时间应设为副回路的2-3倍,这样可以避免两个PID互相干扰。我们通过阶跃响应测试发现,当主回路积分时间过短时,系统会出现明显的振荡。
3.3 分程控制策略
针对加热系统采用热水盘管+蒸汽加湿的分程控制:
- 输出0-50%:控制蒸汽阀开度(50-0%反向动作)
- 输出50-100%:控制热水阀开度(0-100%正向动作)
关键实现代码:
scl复制// 分程逻辑处理
IF "Room1".HeaterOutput <= 50.0 THEN
"Room1".SteamValve := 50.0 - "Room1".HeaterOutput;
"Room1".HotWaterValve := 0.0;
ELSE
"Room1".HotWaterValve := ("Room1".HeaterOutput - 50.0) * 2.0;
"Room1".SteamValve := 0.0;
END_IF;
重要提示:在阀门机械安装时,要确保两个阀门的全关位置都有微调余地。我们遇到过因为阀门关不严导致的热量泄漏,最终通过调整阀杆限位解决了问题。
4. 湿度控制特殊处理
4.1 露点温度补偿
发现降温除湿时会导致房间温度下降约0.3℃,为此增加了前馈补偿:
scl复制// 露点补偿计算
IF "Room1".CoolingOutput > 0.0 THEN
"Room1".TempSP_Compensated := "Room1".SetTemp + ("Room1".DewPoint * 0.15);
ELSE
"Room1".TempSP_Compensated := "Room1".SetTemp;
END_IF;
补偿系数0.15是通过多次试验得出的经验值,不同房间结构可能需要微调。
4.2 加湿控制死区处理
当相对湿度接近设定值时(±2%RH范围内),关闭加湿输出并保持蒸汽阀最小开度5%。这避免了阀门频繁动作导致的湿度波动:
scl复制IF ABS("Room1".Humidity - "Room1".SetHumidity) < 2.0 THEN
"Room1".SteamValve := MAX("Room1".SteamValve, 5.0);
END_IF;
5. 系统调试关键点
5.1 PID参数整定步骤
- 先将主、副PID设为纯比例控制(Tn=∞,Td=0)
- 调整副回路Kp使送风温度阶跃响应有10-20%超调
- 固定副回路参数,调整主回路Kp使房间温度响应呈衰减振荡
- 最后加入积分作用消除静差
实测最佳参数组合:
| 参数 | 主回路 | 副回路 |
|---|---|---|
| Kp | 2.5 | 1.8 |
| Tn | 20s | 10s |
| Td | 5s | 0s |
5.2 Profinet网络优化
遇到IO模块偶尔掉线的问题,通过以下措施解决:
- 将交换机更换为西门子SCALANCE XC200系列工业交换机
- 在TIA Portal中启用Profinet的"拓扑识别"功能
- 所有网线接头改用带屏蔽层的FastConnect系列
6. HMI设计要点
精智触摸屏的界面布局遵循以下原则:
-
三级画面结构:
- 一级:系统总览(关键参数、报警摘要)
- 二级:区域控制(单个洁净室的所有参数)
- 三级:调试界面(PID参数、设备手动控制)
-
趋势图优化:
- 同时显示设定值、实际值和输出值三组曲线
- 采用不同颜色区分(红色=设定,绿色=实际,蓝色=输出)
- 时间轴支持快速缩放(1h/8h/24h)
-
报警管理:
- 分级报警(警告、一般报警、严重报警)
- 所有报警带时间戳和确认记录
- 关键报警触发声光警示
7. 系统运行效果
经过三个月连续运行监测,控制精度达到:
- 温度控制:±0.3℃(设定值22℃时)
- 湿度控制:±2.5%RH(设定值45%RH时)
- 压差控制:±1Pa(设定15Pa时)
能耗方面相比旧系统降低23%,主要得益于:
- 分程控制避免了能源浪费
- 变频风机根据实际负荷调节转速
- 优化的启停顺序减少了峰值负荷
这套系统后来通过了GMP认证检查,检察官特别称赞了我们的数据记录完整性——所有参数变化、设备操作、报警事件都带有精确时间戳存储,符合FDA 21 CFR Part 11的电子记录要求。