news 2026/3/26 19:20:49

这个制冷站集控系统的开发过程挺有意思。三台不同品牌的制冷机要协同工作,还得考虑四个用冷点的动态需求,当时设计控制策略时没少折腾PLC的定时器和数据块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
这个制冷站集控系统的开发过程挺有意思。三台不同品牌的制冷机要协同工作,还得考虑四个用冷点的动态需求,当时设计控制策略时没少折腾PLC的定时器和数据块

一套制冷冰水机集控程序 制冷机 冰水机 制冷机集控程序 三台制冷机,其中两台日立,一台海尔,4个用冷点,程序使用西门子200smart plc实现,配合西门子触摸屏,共有两种控制模式,第一是通过冷量,计算当前所需的冷量,自动增加开机或停机,第二是通过用冷点启动开关联动启动对应的制冷机。 包括冷却泵,冷冻泵,等供冷辅机也集中控制。 资料内容包含 1.PLC程序 2.触摸屏程序 3.控制柜电路图 4.控制柜物料清单 5.系统使用说明 真实项目资料 图片仅为画面和电路图的部分展示,完整资料后发送。

先说核心的冷量计算算法。系统通过MODBUS协议读取各用冷点的温度传感器数据,结合管路流量计数值实时计算冷量缺口。这里用到了西门子200smart自带的PID模块,但做了一些特殊处理:

// 冷量需求计算函数 VAR TotalCoolingDemand : REAL; // 总需求冷量 CurrentCapacity : REAL; // 当前机组总出力 TempArray : ARRAY[1..4] OF REAL; // 四个用冷点温度 BEGIN // 温度加权算法 TotalCoolingDemand := 0.0; FOR i := 1 TO 4 DO IF TempArray[i] > SetPoint THEN TotalCoolingDemand := TotalCoolingDemand + (TempArray[i] - SetPoint) * FlowRate[i]; END_IF; END_FOR; // 与当前机组能力比较 IF (TotalCoolingDemand - CurrentCapacity) > Hysteresis THEN StartNextUnit(); // 触发开机逻辑 ELSIF (CurrentCapacity - TotalCoolingDemand) > ShutdownThreshold THEN StopIdleUnit(); // 触发停机逻辑 END_IF; END_FUNCTION

有意思的是不同品牌制冷机的协议转换。日立机组用的自定义485协议,海尔倒是支持标准MODBUS-TCP。调试时发现日立的启停指令需要特定校验码,最后用了个笨办法——在数据块里预存了所有可能的控制码组合:

// 日立机组控制码转换表 DATA_BLOCK DB_ControlCodes { STRUCT { BYTE StartCode[4] := [16#A0, 16#01, 16#F2, 16#C8]; // 启动指令 BYTE StopCode[4] := [16#A0, 16#02, 16#E3, 16#D7]; // 停机指令 BYTE StatusQuery[3] := [16#B1, 16#00, 16#9F]; // 状态查询 } }

触摸屏上做了个挺直观的负荷分配视图,用柱状图实时显示各机组出力。重点优化了报警处理逻辑,比如冷冻泵故障时不仅要停相关机组,还要自动切换备用水路。控制柜里的继电器矩阵用了双重互锁设计,防止误操作:

!控制柜电源模块接线图

调试时踩过个坑:某次模拟测试时三台机组突然同时启动,差点跳闸。后来发现是冷冻水流量计信号干扰导致冷量计算异常。解决方法挺有意思——在AI模块前加了RC滤波电路,程序里还做了滑动平均滤波:

// 模拟量滤波处理 FUNCTION FilterFlowSignal : REAL VAR_INPUT RawValue : INT; END_VAR VAR Buffer : ARRAY[0..4] OF REAL := [0,0,0,0,0]; Sum : REAL := 0.0; END_VAR // 滑动窗口更新 Buffer[0] := Buffer[1]; Buffer[1] := Buffer[2]; Buffer[2] := Buffer[3]; Buffer[3] := Buffer[4]; Buffer[4] := RawValue / 27648.0 * 100.0; // 量程转换 // 剔除最大最小值后取平均 Sum := 0.0; FOR i := 0 TO 4 DO Sum := Sum + Buffer[i]; END_FOR; FilterFlowSignal := (Sum - MAX(Buffer) - MIN(Buffer)) / 3.0;

现在这套系统在南方某电子厂跑了两年多,据说最热的那天三个机组全开还能保持车间26℃±1℃。维护人员最喜欢的是自动轮值功能,程序里用了个环形计数器,每次启动优先选择累计运行时间最短的机组。不过听说最近要加光伏系统联动,估计又得折腾通讯协议了...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 18:24:16

2、开启Sparrow开发之旅

开启Sparrow开发之旅 在深入开发之前,我们需要搭建开发环境并在系统上配置Sparrow。下面将详细介绍如何操作。 了解Sparrow基础 Sparrow是一个游戏框架,对于有ActionScript、Flash API和/或Starling使用经验的人来说可能会感到熟悉。它与Starling的相似并非巧合,二者核心…

作者头像 李华
网站建设 2026/3/24 15:52:04

8、美化游戏:从动画到精灵表的全面优化

美化游戏:从动画到精灵表的全面优化 在游戏开发中,如何让游戏画面更加美观、动画更加流畅是开发者们一直追求的目标。本文将详细介绍游戏开发中的一些关键技术,包括动画过渡、杂耍者(Jugglers)的使用、精灵表(Sprite Sheets)的创建与应用等,帮助你打造出更加出色的游戏…

作者头像 李华
网站建设 2026/3/25 5:46:20

14、游戏开发:从玩法机制到音频添加

游戏开发:从玩法机制到音频添加 为海盗湾添加游戏机制 在拥有了 World 类,并更新了 Dialog 和 Scene 类以满足需求后,我们可以为海盗湾添加一些游戏机制了。海盗湾是升级船只的地方,以下是让海盗湾可玩的具体步骤: 1. 将代码 [SPTextField registerBitmapFontFromFile:…

作者头像 李华
网站建设 2026/3/24 12:35:22

PyTorch 1.8与TensorFlow 2.5 GPU版安装指南

PyTorch 1.8 与 TensorFlow 2.5 GPU 版安装实战指南 在深度学习项目中,最让人头疼的往往不是模型设计,而是环境配置——尤其是当你面对 libcudart.so 找不到、CUDA 版本不匹配、或者明明装了驱动却检测不到 GPU 的时候。PyTorch 1.8 和 TensorFlow 2.5 …

作者头像 李华
网站建设 2026/3/24 18:11:28

Open NotebookLM:PDF文档转播客的终极指南

还在为阅读大量PDF文档而头疼吗?现在,通过Open NotebookLM这款智能AI工具,你可以将任何PDF文件轻松转换为自然对话风格的音频播客。这款开源项目结合了先进的PDF转播客技术和AI音频生成能力,让文档阅读变得生动有趣。 【免费下载链…

作者头像 李华
网站建设 2026/3/24 14:23:46

Dabsyl-Tyramide,1365993-40-3可用于生物传感器开发与示踪研究

一、关键物性与使用要点 Dabsyl-Tyramide,Dabsyl-TSA,CAS号为 1365993-40-3。分子式为 C₂₂H₂₄N₄O₃S,分子量约为424.52 溶解性与储存:该物质通常可溶于二甲基亚砜(DMSO)、二氯甲烷等常规有机溶剂&…

作者头像 李华