112-西门子1200PLC博途程序,博图版本V14及以上,具体为双行星动力搅拌桨混合机项目,有画面案例,硬件采用_S7-1200PLC加西门子KTP触摸屏。 程序结构包括: 1.配料系统物料分配-搅拌控制,分散控制 2.模拟量转换,监测压力,称重,液位控制 3.PROFIBUS通讯监控电能表,搅拌电流监控 4.配方控制 5.变频器控制 6.高速计数器 硬件: 油泵电机:5.5KW 变频器:丹佛斯(丹麦) PLC:西门子S7-1200 触摸屏:西门子KTP1200
双行星动力搅拌桨混合机的控制柜里藏着个狠角色——西门子S7-1200 PLC搭配KTP1200触摸屏这对黄金搭档。这项目最带劲的地方在于它把变频器跳舞、配方变脸、物料称重这些硬核操作都揉进了博途的蓝色界面里。咱今天就扒开程序外壳看看里面的门道。
配料系统的物料分配玩得一手精准控流,这段FC块里的条件判断比老太太数豆子还仔细:
IF #物料A重量 < 配方设定值 THEN #进料阀 := 1; #震动给料机 := 1; ELSE #进料阀 := 0; #震动延时 := T#5S; END_IF;这代码就像个严格的监工,称重传感器数值离目标值差一克都不让阀门关。注意那个5秒震动延时,现场调试时发现给料机关闭后管壁总粘着物料,这招缓冲操作让残留量直接降了23%。
模拟量处理这块有个骚操作,压力变送器的4-20mA信号转换用了带死区滤波的算法:
#压力原始值 := NORM_X(IN := "AI0", MIN := 27648, MAX := 55300); #滤波压力 := LIMIT(IN := (#压力原始值 * 0.2 + #滤波压力 * 0.8), MN := 0, MX := 10);这里故意没直接用FC105标准块,因为现场压力波动太猛。这个加权平均滤波配合量程归一化处理,把原本跳得像心电图的数据稳成了直线。MAX参数设到55300是因为发现某些传感器超量程时实际会飙到55%的过载值。
PROFIBUS通讯监控电能表那段藏着个坑——波特率设置要和物理层匹配。组态时用的这段OB1代码:
CALL "DPWR_DAT" LADDR := 256 RECORD := P#DB200.DBX0.0 BYTE 10 RET_VAL := #错误代码;结果第一次上电死活读不出数据,后来用万用表量DP头终端电阻才发现施工队把电阻打在了"OFF"档。这告诉我们:再牛逼的代码也干不过物理层接错线。
配方功能最出彩的是用二维数组玩排列组合。看看DB30里怎么存不同物料配比:
"配方库"[1].物料A := 50.0; "配方库"[1].物料B := 30.0; "配方库"[1].搅拌时间 := 120;触摸屏上切换配方时,实际上就是改变数组索引值。但要注意每个配方结构体变量必须严格对齐,上次更新程序时手滑多加了个变量,直接导致所有配方数据错位,现场操作工差点把奶茶配方灌进沥青搅拌机。
变频器控制有个隐藏技巧:丹佛斯变频器的启停指令需要保持500ms以上的脉冲。于是写了这个带时间戳的脉冲发生器:
[启动按钮]--|P|--[MOV 1 > Q0.0]--[TON 600ms]--[MOV 0 > Q0.0]这比标准启保停电路更扛得住触摸屏的误操作。调试时发现如果单纯用置位复位,遇上网络延迟可能造成信号粘连,这种自复位结构反而更可靠。
高速计数器用来抓取搅拌轴转速,关键在中断配置。硬件组态里把HSC1的模式设成"频率测量",然后在OB40中断组织块里塞进:
L "HSC1".CV T #实际转速;但现场测试时发现数值总跳变,最后在硬件过滤器里把输入延时调到6ms才治好了这个癫痫症状。这提醒我们:高速信号处理不能只看软件,硬件滤波才是真大佬。
这套系统最骚的操作在报警处理——把故障代码转成二进制位状态,用字节异或运算快速定位故障点。比如电能表通讯异常对应DB50.DBX0.0,当这个位跳变时:
IF ("报警字节" AND 16#01) != 0 THEN "报警信息"[1] := "电能表掉线"; END_IF;这种位操作比逐个比较变量节省了70%的扫描时间。但千万记得报警字节要做上升沿捕获,否则会持续刷屏。
项目交付前夜,客户突然要求增加紧急停止时的反向点动功能。灵机一动在急停OB里插了段逆序启动逻辑:
IF #急停触发 THEN "变频器方向" := -1; "点动定时器" := T#2S; END_IF;结果测试时电机真的在急停后倒转了两秒,成功把卡死的物料吐了出来。这告诉我们:标准化程序也要留个后门给突发需求。
这套系统现在在车间里跑得比生产线上的香肠还顺溜,就是苦了维护电工——每次打开程序得先找半小时变量注释。所以少年啊,写完代码记得加备注,不然三个月后自己都看不懂那堆"Temp_1"到底是啥玩意儿。