基于西门子PLC的空压机组储气风冷机组自动控制系统:“手动自动切换、多机控制及实时监测报警系统
基于西门子plc的空压机组储气风冷机组自动控制系统 可以实现手动自动切换 三组空压机分别自动控制自动检测三路压力 风冷机运行实时检测 报警查寻参数设置等上周刚把车间那套跑了快十年的空压机组控制系统给换了用的是西门子S7-1200总算不用每天定点蹲在控制柜跟前掐表启停空压机了——老系统全是硬接线按钮压力低了就得手动开压力高了忘关还能把储气罐顶炸想想都后怕。今天就唠唠这个基于西门子PLC的空压机组风冷机自动控制系统的实活细节中间插点写代码的时候的碎碎念。基于西门子plc的空压机组储气风冷机组自动控制系统 可以实现手动自动切换 三组空压机分别自动控制自动检测三路压力 风冷机运行实时检测 报警查寻参数设置等首先说需求甲方其实就是车间主任要求的东西不多但都是刚需得有手动自动切换手动的时候跟老系统一样用按钮启停自动的时候完全不用管三路储气罐分别自动控制每一路都能自己根据压力启停空压机得实时测三路压力不能瞎猜罐子里有多少气风冷机得跟着空压机走还得监控有没有过载得能查报警记录哪天空压机罢工了能翻出来看看为啥压力上下限这种参数得能改不能硬焊在程序里先搭个硬件架子选了S7-1214C DC/DC/DC自带14点DI和10点DO够用来接三个空压机的启停按钮、状态反馈再加个风冷机的控制。模拟量测压力用了SM1231 AI4*13bit四路输入刚好测三个储气罐的压力加个备用的。触摸屏用了KTP700不贵还能组态参数界面和报警弹窗比买个文本显示器强多了。核心控制代码从梯形图转到SCL才是真香一开始我习惯性用梯形图写着写着发现三个空压机的压力判断逻辑几乎一模一样光复制粘贴网络就占了半屏后来改成SCL简直打开新世界大门代码写起来又快又好改。先放一段核心的自动控制逻辑// 全局保持性DB块上电不丢参数 VAR_GLOBAL RETAIN // 三路储气罐压力量程0~1MPa对应模拟量0~10V Press1: REAL; Press2: REAL; Press3: REAL; // 压力设定参数车间平时用0.4~0.8MPa Set_Low: REAL : 0.4; Set_High: REAL : 0.8; // 最多同时运行的空压机台数防止电网过载 Max_Run: INT : 2; // 空压机运行状态反馈 Comp1_Run: BOOL; Comp2_Run: BOOL; Comp3_Run: BOOL; // 自动模式使能 Auto_Enable: BOOL; END_VAR // 自动控制主逻辑 IF Auto_Enable THEN // 统计当前运行的空压机台数 Current_Run_Count : BOOL_TO_INT(Comp1_Run) BOOL_TO_INT(Comp2_Run) BOOL_TO_INT(Comp3_Run); // 1号罐压力低于下限且运行台数没超上限就启动 IF (Press1 Set_Low) AND NOT Comp1_Run AND (Current_Run_Count Max_Run) THEN Comp1_Start_CMD : TRUE; // 压力高于上限且正在运行就停机 ELSIF (Press1 Set_High) AND Comp1_Run THEN Comp1_Stop_CMD : TRUE; END_IF; // 2号罐逻辑复制改编号就行省事儿 IF (Press2 Set_Low) AND NOT Comp2_Run AND (Current_Run_Count Max_Run) THEN Comp2_Start_CMD : TRUE; ELSIF (Press2 Set_High) AND Comp2_Run THEN Comp2_Stop_CMD : TRUE; END_IF; // 3号罐同理不多啰嗦 IF (Press3 Set_Low) AND NOT Comp3_Run AND (Current_Run_Count Max_Run) THEN Comp3_Start_CMD : TRUE; ELSIF (Press3 Set_High) AND Comp3_Run THEN Comp3_Stop_CMD : TRUE; END_IF; // 风冷机逻辑空压机运行30秒后再启动风机防止频繁启停烧电机 Fan_Delay(IN : Comp1_Run OR Comp2_Run OR Comp3_Run, PT : T#30S); Fan_Run : Fan_Delay.Q; END_IF;这段代码其实没什么花活但都是踩过坑才加的细节。比如那个运行台数限制一开始没加结果车间用电高峰的时候三台空压机一起启动把车间的总闸给跳了后来加了Max_Run:2最多同时开两台再也没出过这事儿。还有那个30秒的延时定时器一开始风冷机跟空压机同步启停结果空压机刚开就关风机跟着频繁启停烧了一个备用风机后来加了TON延时现在稳得一批。新手最容易踩的模拟量转换坑这个必须单独拎出来说SM1231读回来的AIW是0~27648的整数要转换成实际的压力值得这么算// 把AIW0转换成1号罐的压力单位MPa Press1 : AIW0 / 27648.0 * 1.0; // 要是测的是0~1.6MPa的压力就把最后乘的1.0改成1.6就行一开始我忘了除以27648测出来的压力全是几千调试的时候盯着屏幕看了半天以为压力传感器坏了后来翻西门子的手册才反应过来这坑咱替大家踩过了。报警记录和参数设置报警这块我做了个10条的循环缓冲区把最近的报警都存起来触摸屏上点一下就能看哪天哪个罐压力过低哪天风冷机过载了。简化的代码大概是这样// 报警记录缓冲区最多存10条 TYPE Alarm_Log: STRUCT Alarm_Time: DATE_AND_TIME; Alarm_Code: WORD; Alarm_Desc: STRING[20]; END_STRUCT END_TYPE VAR_GLOBAL RETAIN Alarm_Buffer: ARRAY[1..10] OF Alarm_Log; Alarm_Idx: INT : 1; Old_Press1_Low: BOOL; Old_Fan_Overload: BOOL; END_VAR // 1号罐压力过低报警低于0.2MPa就触发说明储气罐漏气了 IF (Press1 0.2) AND NOT Old_Press1_Low THEN Alarm_Buffer[Alarm_Idx].Alarm_Time : LOCAL_DATE_TIME; Alarm_Buffer[Alarm_Idx].Alarm_Code : 16#0001; Alarm_Buffer[Alarm_Idx].Alarm_Desc : 1号罐压力过低; Alarm_Idx : Alarm_Idx 1; IF Alarm_Idx 10 THEN Alarm_Idx : 1; END_IF; END_IF; Old_Press1_Low : Press1 0.2;参数设置就更简单了在KTP700的组态里建几个输入域直接关联PLC里的SetLow、SetHigh这些变量改完点一下下载就生效车间主任自己都能改不用喊我跑过去改程序。最后唠唠实际效果现在三班倒的工友再也不用每隔一小时跑过来看压力表了触摸屏上就能看到三路压力、各台空压机的状态报警弹出来的时候手机还能收到短信提醒加了个4G模块就算不在车间也能知道啥时候出问题了。上周车间主任还夸我说这玩意儿比之前的老系统好用十倍其实也就是把常见的工控逻辑拼了拼加了点自己踩坑攒的经验而已。对了最后补一句要是有人跟我一样用S7-1200的话记得程序里的变量要加RETAIN属性不然上电之后参数都得重新设血的教训。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2473595.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!