西门子1200PLC博途程序参考实例集合: 程序1具体程序为西门子1200气力输灰系统,具体为单排5个AV料泵输送系统。 包含程序及昆仑通泰触摸屏画面,D10 程序2为一种配料控制系统,采用1200控制器,有配方程序,变频通讯程序,触摸屏同样采用昆仑通泰。
先说气力输灰这个活儿。五台AV料泵按固定顺序启停,核心在于控制时序和连锁保护。程序里用到了顺序控制指令,但没走传统的GRAPH路线,直接拿基本指令搭了个循环队列:
IF "启动信号" THEN FOR #i := 0 TO 4 DO "料泵队列"[#i].ET := T#5S; "料泵队列"[#i].IN := NOT "料泵队列"[#i].Q; IF "料泵队列"[#i].Q THEN "料泵启动"[#i] := 1; END_IF; END_FOR; END_IF;这段代码里藏着个时间片轮询机制,每个料泵间隔5秒启动。特别要注意ET定时器的复用,避免多个定时器同时运行造成扫描周期压力。现场调试时发现,直接启停五台设备会导致气压波动,后来在触摸屏上加了D10数据点做缓冲时间动态调整,效果立竿见影。
触摸屏画面重点做了两处交互:①设备运行状态用管道流动动画呈现,直接绑定DB块里的压力值;②紧急停止做成三级确认——点急停按钮弹出密码框,输错三次自动锁屏。这个防误触设计后来成了厂里的标配。
再来看配料系统。配方功能是重头戏,程序里用结构体数组存了20组配方参数:
TYPE Recipe_Struct : STRUCT 材料1比例 : REAL; 材料2比例 : REAL; 搅拌时间 : TIME; 转速设定 : INT; END_STRUCT END_TYPE VAR_GLOBAL Recipe_DB : ARRAY[1..20] OF Recipe_Struct; Current_Recipe : INT := 1; END_VAR变频器通讯走的是Modbus RTU,这里有个坑——不同品牌变频器的保持寄存器地址五花八门。程序里专门做了个地址映射表,通过指针偏移实现通用读写:
#pAddr := ADR("变频参数"); #pAddr := #pAddr + (("变频器编号"-1)*10); MB_MASTER.ADDR := #pAddr^;触摸屏上的配方选择用了个骚操作:把下拉菜单选项文本存在单独的文本列表中,通过索引值关联配方编号。这样做的好处是现场改配方名称不用动程序,直接改文本列表就行。
两个项目都用了昆仑通泰的TPC7062KX屏,建议在变量连接时养成加注释的习惯。比如把"HMIAlarm"这样的变量名改成"HMIAlarm_原料缺料",后期维护时能省下不少查表时间。
最后提个实战经验:做气力输送这类带时序的控制,务必在触摸屏留个隐藏的趋势图窗口。有次现场堵料,就是靠突然下降的气压曲线锁定了故障点,比看报警代码直观多了。