
上个月在忙一个商业综合体的冷站改造项目主控柜里用的是一台西门子S7-1200。第一眼看到这个配置的时候暖通那边的工程师还觉得这台小PLC会不会不够用毕竟冷站里光是离心机组、冷冻水泵、冷却水泵、冷却塔风机摆在一起设备数量不少。但等点表拉出来、程序写完、现场联调跑完我心里反而踏实了冷站控制这事S7-1200是真能扛得住而且顺手还藏着不少值得拿出来聊的实战细节。这套冷水机组控制方案核心就是把三台离心机、四台冷冻水泵、四台冷却水泵、九台冷却塔风机塞进一套自动逻辑里让设备按需启停、自动加减机、故障还能自己保护。整趟调试下来最深的感受是冷站控制一点不比流水线设备简单很多时候难的不是“怎么控”而是“什么时候控”和“控错了怎么兜底”。今天就把几个有意思的模块拆开唠唠主要面向正在做暖通自控、能源管理或者刚接触冷水机组控制的朋友老工程师们看了也欢迎来指正。1. 冷站主控怎么选为什么S7-1200够用又为什么不是所有项目都够用1.1 商业综合体冷站到底需要控什么商业综合体冷站和普通工厂车间的冷冻站不一样它的负荷波动非常剧烈。白天写字楼和商场同时用冷下午餐饮区和影城又顶上到了深夜大部分区域减载只留值班制冷。设备之间的状态又互相牵连主机启停要等水系统稳定冷却塔风机要跟着冷却水温度走水泵变频还要盯住压差。这些逻辑放在一起整个控制系统要处理的运行信号确实不少但冷静分析一下就会发现绝大部分信号都集中在温度、压力、流量、运行状态和故障反馈这一类直流量上复杂运算和高速联锁并不多。我这边实际统计过整套冷站需要接入的数字量大概在32点上下模拟量十六七点模拟量输出四五个点。数字量主要是水泵的运行状态、故障信号、手自动状态、断路器的分合闸模拟量则是温度、压力、流量、频率反馈、机组电流等。这些点分布在冷冻机房和屋顶冷却塔两个区域但距离都不算远用一台中大型PLC和几个远程IO就能覆盖。选型时我最终定了西门子S7-1200系列CPU选的是1215C DC/DC/DC自带16路DI、16路DO、2路AI和2路AO工作存储器125KB还带一个PROFINET口后续要挂HMI或者接上位系统都很方便。1.2 从I/O点数和通讯需求看实际配置光靠CPU自带的那点IO肯定不够我给这套系统配了两块SM1231模拟量输入模块一块处理4-20mA的电流信号一块处理PT1000温度信号另外加了一块SM1222数字量输出模块替换掉继电器输出回路里的一部分中间继电器。还有一块CM1241 RS485模块专门用来和机组控制器走Modbus RTU通讯。配置单大致是这样的模块用途说明CPU 1215C DC/DC/DC主控CPU自带16DI/16DO/2AI/2AOPROFINET接口SM1231 AI 8x13bit扩展4-20mA模拟量输入接压力、流量、频率反馈SM1231 RTD 4x16bit扩展PT1000温度输入接冷冻水供回水温度、冷却水温度SM1222 DO 16x继电器扩展数字量输出控制水泵、风机、电动阀的启停接触器CM1241 RS485与多台冷水机组控制器做Modbus RTU通讯选这套方案之前我确实也犹豫过要不要直接上S7-1500或者整套楼宇自控系统。后来把项目需求拆开一看S7-1200的运算能力在这个场景下绰绰有余TIA Portal的开发调试效率又高而且不管接第三方上位机还是西门子WinCC都顺滑。再加上成本上的优势S7-1200成了最舒服的选项。不过这里要泼一盆冷水S7-1200再香也不是所有冷站项目都能套用。如果项目里主机数量特别多、通讯协议五花八门或者甲方明确要求冗余CPU、双机热备那就别硬撑了该上S7-1500H或者DCS系统就上。选型边界其实很清晰一是看I/O点数和通讯规模有没有超过S7-1200的扩展上限二是看系统能不能允许单点故障导致短时停摆。这两条想明白选型就不会翻车。2. 冷水机组的启停逻辑加减机、轮换和启动条件链是怎么设计出来的2.1 加减机策略不是温度超标就加机很多第一次做冷站控制的人拿到需求就开始写“回水温度超过12℃就加一台机组低于7℃就减一台机组”。这种逻辑在夏天刚开机的时候看着还行但一到部分负荷或者负荷快速波动的阶段机组启停会变得非常频繁。压缩机最怕的就是频繁启停电机启动电流大机械冲击也不小几趟下来就算不跳闸磨损也够受。我这次采用的是“负荷率温度偏差”双条件判断核心是先算实时冷负荷。计算公式很简单Q4.187×流量×供回水温差/3600单位是kW。流量用冷冻水总管上的电磁流量计4-20mA信号进PLC做工程转换温度用总管上的PT1000传感器分别测供水温度和回水温度。S7-1200里实现这个计算并不难一个模拟量转换块加一条乘法指令就行。需要注意的是如果现场用的是孔板流量计而非电磁流量计差压信号必须开方才能对应流量这个细节很多人容易忽略。算出实时冷负荷之后再根据当前运行机组的额定冷量总和算负荷率。我这边加机条件设置的是负荷率大于85%同时供回水温差连续5分钟超过设计值减机条件设置的是负荷率小于50%连续30分钟保持这个状态。这里的TON延时很关键它能有效避开商场开关门、餐饮高峰刚开始那几分钟的短时负荷冲击。如果条件只满足几秒钟就动作机组就会变成“永动机”来回启停。2.2 机组轮换让三台主机均匀“打卡”三台离心机并联运行时如果每一次都优先启动1号机等到满负荷才加2号机用不了几个月1号机的运行时间就会远超另外两台压缩机的磨损、保养周期都会出现明显偏差。现场设备管理最忌讳“一台累死、两台闲死”的状态所以机组轮换逻辑必须做。我在程序里为每台机组建了一个年运行时间累计DB只要机组运行状态为1程序就在每个扫描周期累加一次运行时间。启动时优先选择累计运行时间最小的那一台同时把有故障信号的机组自动屏蔽掉不让它参与轮换。这里还有一个小细节轮换不是运行中强切而是利用减机时机优先停掉累计运行时间最长的那台这样整个系统在运行周期内的设备磨损相对均衡。除了这种基于运行时间的自然轮换有些项目还要求“定时轮换”比如每个月强制切换一次主用机组主要目的是防止长期停用的设备出现轴封粘连、油膜失效等问题。这种轮换我建议放在夜间低负荷时段做并且最好有现场值班人员确认不建议全自动执行半夜设备切换出了状况没人及时处理风险太大。2.3 启动条件链每一步都要有反馈确认冷站控制里最重要、也最容易被轻视的其实是机组的启动条件链。离心式冷水机组启动前水系统必须在稳定状态下建立起来冷冻水和冷却水都不能缺流量否则机组要么启动失败要么带着低压报警跑起来。这些问题一旦发生轻则报警反复重则损坏压缩机。我设计的启动条件链大致是这样的冷冻水泵已启动且运行频率不低于30Hz冷却水泵已启动且冷却水回水温度不高于35℃冷却塔风机已启动冷冻水流量开关闭合冷却水流量开关闭合冷冻水供回水压差正常系统没有未复位的故障报警。这些条件全部满足之后程序才向机组控制器发出启动命令同时启动一个120秒的运行确认计时器。如果120秒内没有收到机组的运行反馈信号程序判定启动失败输出“机组启动超时”报警并自动把启动允许条件复位。这一套条件链的价值等于把操作工“开机前要检查一遍”的流程变成了程序里的硬约束。调试期间我们有一台机组出现过启动后低压报警查到最后就是因为冷却水泵被人为切到手动模式并调到低频运行冷却水流量根本不够。幸好条件链没放行机组压根没进入启动序列否则又是一次保护性停机。3. 压差和冷却水温度两个最耗时间的PID联调模块3.1 冷冻水压差回路整定冷冻水泵变频是冷站节能的核心之一通常做法是在冷冻水系统的分集水器之间装一个压差传感器通过PID调节水泵频率来维持设定的压差值。传感器量程选用0~1.6MPa实际设定值按项目设计取0.12MPa左右PID输出0~100%对应变频器频率范围26~50Hz。PID_Compact这个指令在S7-1200里是现成的但我建议别一上来就全自动跑先手动模式慢慢摸参数。我一般先把频率手动加到不同值观察压差稳定值的变化找到大概的增益范围再把PID切入自动。比例增益P先从1.5起步积分时间给到120秒微分直接设为0。稳定之后如果看到压差围绕设定值小幅振荡就把P往下砍一半如果响应太慢、始终有静差那就逐渐减小积分时间。这里有一个非常常见的坑冷冻水系统容积大、惰性大压差变化相对频率变化有明显滞后。如果P给得太大非常容易形成等幅振荡几台水泵的频率会在几十秒内来回摆动管网里的水锤声和电机啸叫都会出来。所以PID_Compact外面最好再加一层输出限幅和变化率限制变化率我限制在每秒2%以内这样即使PID内部积分饱和或者外部信号出现干扰执行机构也不会猛冲。输出限幅和变化率限制在S7-1200里可以直接在PID_Compact的OutputLimits和RateLimits配置里设置不需要额外编程。3.2 冷却水温度控制的“风机组合”思路冷却水侧的控制对象是冷却塔风机控制目标是维持冷却水回水温度稳定。很多人会习惯性地做一套PID把输出接到风机变频器上。但我这次没有用连续PID而是用了“温度分段风机组合”的方式原因也很简单冷却塔风机数量多每台风机的启停有顺序要求如果只让PID给一个连续转速指令现场塔与塔之间的风量分配容易失衡反而容易让某几台风机长期过载。组合逻辑大致是水温高于29℃时启动1号风机或者把1号风机调至中速高于31℃启动2号风机高于33℃全部投入高速反向则依次降速停机。每一级之间要设置2~3℃的回差防止风机在临界点频繁启停。这个逻辑看着不够“智能”但实际跑起来非常稳触头的使用寿命也长。如果项目里冷却塔风机是变频电机而且甲方要求更平滑的调节那建议把控制目标拆成“低负荷段”和“高负荷段”两套PID参数或者干脆做一个分段模糊控制。因为夏季午间和深夜负荷差异太大一套PID参数很难两头兼顾要么中午温度压不住要么晚上风机频繁低转。我们这次因为塔多、单台风机功率也不大用组合控制反而更合适。4. 与机组控制器的Modbus通讯对接寄存器映射和断线保护4.1 不同厂家的Modbus寄存器表要单独做映射这次项目里三台离心机来自两家不同厂家虽然都号称支持Modbus RTU但寄存器表完全不一样。有的厂家文档从40001起编有的直接把地址从0开始有的用一个寄存器放下两个状态位有的需要读多个寄存器拼浮点数。S7-1200的MB_MASTER指令里MB_DATA_ADDR填的就是Modbus地址本身不需要加40001偏移但这里真正的坑在于厂家文档对于“寄存器1”的定义可能和Modbus标准约定的地址有差异一个不留神读回来的数据就对不上。我的办法是建一个“机组Modbus映射DB”把每台机组的寄存器地址、数据类型、缩放系数、读写属性整理成结构化数据在程序里统一用循环来处理。厂家后来升级控制器固件寄存器表微调过一次我只需要改映射DB里的参数不用动任何业务逻辑。这一步千万不能省省了后面改起来会极其痛苦尤其是项目交接给别的工程师维护的时候一份清晰的映射表比什么注释都值钱。4.2 字节序和32位数据十次通讯故障里有八次是它做Modbus通讯一定会遇到32位数据拆分比如机组回传的电流值是一个32位浮点数在Modbus报文里占两个寄存器。西门子PLC读回来以后得先把两个16位寄存器合并成32位再转换成浮点。如果厂家文档写“低字在前、高字在后”那合并之后要做一个字节交换如果是“高字在前、低字在后”顺序就不能调整。这里特别容易出错我见过一个项目因为字节序搞反所有负温度读出来全变成65535压缩机电流全部翻倍导致误报警不断。调试时我养成了一个习惯拿着机组本地控制面板的显示值和PLC读上来的数值逐一对拍一个一个寄存器核对。这个方法笨但最靠谱。核对完以后把字节序、缩放系数都记到映射DB的备注里下次再接同品牌机组直接照着抄省一大半时间。另外还要留意有些厂家把16位有符号整数和16位无符号整数混着用PLC程序里要区分对待不能看到一个地址就按INT处理。4.3 通讯中断时的安全策略Modbus通讯不是100%可靠的机组控制器的通讯板卡偶尔会死机现场电缆接头也会松动。程序里我专门做了一个看门狗逻辑每次成功读回一组寄存器后都会复位一个10秒的定时器如果这个定时器在10秒内没有被复位就判定该机组通讯中断。通讯中断后所有从该机组读上来的数据都被标记为“无效”机组的运行状态显示为“通讯故障”并且程序禁止对该机组发出任何启动或者停止命令。这里特别想强调一点通讯中断时不能简单地把读上来的寄存器值当作0或者默认值参与运算。因为像流量开关、压差、温度这些联锁条件如果突然变成0逻辑可能瞬间误判为“条件满足”甚至“条件不满足”造成危险动作。所以我给每个关键值都配了一个质量位后续逻辑判断之前先检查质量位质量位无效就不让这个值参与判断。这个习惯在很多工业PLC代码里是标配但在自控领域反而经常被忽略等出事了再补就晚了。实际上如果项目里有多台机组建议每台机组单独建一个“通讯心跳字”机组控制器每秒把这个心跳字加1PLC只要看到心跳字在变就知道通讯链路是活的。如果心跳长时间不变再判断通讯中断会比单纯靠MB_MASTER的返回代码更可靠。5. 夜间联调踩过的三个隐蔽坑从总线干扰到无扰切换5.1 故障一RS485总线间歇性掉线夜间联调时第三台机组的数据每隔几分钟就掉一次线重新上电又恢复。白天查了半个多小时没看出问题但一入夜只要冷却水泵一启动通讯就开始飘红。排查到最后问题出在两个地方一是施工队把RS485屏蔽层在控制柜里多点接地了整段线缆一侧的屏蔽层还悬空形成了一根单端接地的长天线二是整条总线最远端没有接终端电阻信号反射非常严重。西门子CM1241 RS485模块要求总线尽量采用线性拓扑最远端最好并接一个120欧终端电阻。后来我把屏蔽层改成单端接地终端电阻加上波特率从19200降到9600掉线问题彻底消失。RS485的A/B线不能接反这个很多工程师都知道但真正容易忽略的是“通讯能通就不管终端电阻”的心态。白天环境电磁干扰小看不出问题晚上大功率电机一起动干扰一来就原形毕露。所以遇到通讯经常闪断的问题优先检查屏蔽接地和终端电阻别一上来就怀疑PLC或者仪表坏了。5.2 故障二温度毛刺让PID乱跳某天夜里冷冻水压差PID的输出出现了等幅振荡振荡周期大概两秒一次曲线看起来像锯齿波。最初以为是PID参数没调好回放趋势图才发现振荡源根本不在PID而是来自回水温度传感器PT1000信号线上感应出了交流电压温度值在22.5℃和22.8℃之间来回跳变因为计算冷负荷和压差补偿时用到了这个温度PID的误差项就跟着反复翻转。解决方法是双管齐下。硬件上把所有模拟量信号线都换成屏蔽双绞线屏蔽层在PLC柜侧单点接地尽量避免和动力线走同一个桥架软件上在SM1231 RTD模块的通道配置里打开了数字滤波同时还在程序里对温度做了个一阶低通滤波惯性时间常数设了3秒左右。S7-1200的模拟量模块本身有滤波参数可调但默认值未必适合现场干扰频率需要根据实际干扰情况调整。那次改完之后压差PID的输出曲线马上变得平滑了。5.3 故障三手动切自动的瞬间输出猛跳刚开始调试冷却塔风机时操作员在触摸屏上把手动模式切到自动的那一瞬间风机变频器直接从手动的12Hz跳到了自动输出值50Hz现场电机嗡的一声所有人都被吓一跳。根因是PID_Compact内部没有做输出跟踪切自动的一瞬间积分项从零开始累积输出自然朝上限奔去。解决方法是利用PID_Compact的TrackInput和TrackOutput功能手动模式下让PID输出实时跟踪变频器当前频率一旦切到自动PID就只在当前值附近做增量调节从而实现无扰切换。类似的手动自动切换场景还有冷冻水泵变频、冷却水泵变频凡是涉及PID自动控制和手动给定并存的回路都建议把输出跟踪做进去。这个控制细节很多书上一带而过但在现场太重要了务必在组态阶段就提前做好。最后再分享一点个人体会这套冷站程序调完之后我把几个通用模块整理成了可复用的功能块比如机组启停状态机、Modbus映射读取、运行时间轮换、带滤波和变化率限制的压差PID。下一次再接冷站项目直接把这些功能块拖出来改改参数就能用省下的开发时间非常可观。冷站控制说到底核心就几件事负荷判断、设备联锁、温度压力闭环、通讯可靠。真正拉开差距的是工程细节——启动条件链是否完整、通讯中断后数据怎么处理、手动自动切换是否无扰、PID参数有没有在满负荷和低负荷下都验证过。这些东西不是看说明书能学到的得靠现场一枪一炮打出来。如果你也在调试类似的冷水机组控制方案建议先把控制需求理清楚再谈逻辑实现平时多存几份趋势曲线现场出问题时趋势曲线就是最好的说话证据。