基于PCS7的离心机下料控制程序优化
作者:杨旭、李健
近年来,玉米深加工行业逐渐兴起,大多数玉米用来生产玉米淀粉,葡萄糖作为玉米淀粉主要的下游产品,同时也是玉米深加工行业的主要产品,葡萄糖用途非常广泛,特别是在医药、食品、化工等行业有着重要的应用。
1、结晶糖生产工艺流程
如图1-1所示,淀粉乳经过液化、糖化、除渣过滤、蒸发浓缩等工序进入包装车间,其中分离工序是整个流程中的重要步骤,蒸发结晶后的糖浆进入到离心机中,离心机高速运转产生离心力,使得液体通过过滤介质成为滤液排出离心机,固体颗粒附着在过滤介质表面,实现固液分离。
图1-1 结晶糖生产工艺流程
离心分离流程中每5台离心机为一组,在生产过程中,每台离心机加入一定体积的糖浆,离心机具有自动加料、分离、洗涤、卸料等控制程序,1#、2#、3#离心机分离后的晶体由下口四轴螺旋输送到1#螺旋输送机中,4#、5#离心机分离后的晶体由下口四轴螺旋输送到2#螺旋输送机中,从加料到下一次加料为一个周期,每个周期的时间长短决定了结晶糖的生产效率。在实际生产过程中,经常出现多台同时下料或都不下料的情况。4联绞龙出料非常不连续、不均匀,对后端干燥工序影响极大,针对此问题,现基于抢答器原理,设计PSC7上位机程序,使得下料顺序可控,解决螺旋输送机堵塞问题。
图1-2离心机离心分离流程图
2、程序设计
在抢答器程序设计中,只要有一人先按下按钮,其他人再按下按钮则无效,生产过程中,只要有一台离心机下料,其他离心机则不能下料,梯形图程序原理如图2-1所示。
图2-1抢答器梯形图程序设计
在PCS7组件视图中创建FB块,在CFC中插入FB块,输入端连接离心机的请求信号,如图2-2所示,输出端控制离心机的运行,当1#离心机有下料请求时,1#离心机下料,过程中其他离心机有请求则保留,当1#离心机下料结束,4#离心机优先下料,离心机下料顺序控制在1#、2#、3#与4#、5#交替下料。
图2-2 FB块
图2-3是周期为10秒给系统的心跳信号,用于监测离心机通讯故障,当超过设定时间无变化时,则报警输出,通讯故障。
图2-3心跳信号
图2-4为监测离心机有无请求的报警信号,若5台离心机在设定的时间之内没有请求,则触发报警。
现场44台离心机为西门子1500PLC,通过两个交换机直接连接到PCS7服务器。PCS7的CPU无法直接读取1500的内部变量。所以在上位机WINCC中制作全局C脚本,用来实现数据的传输。
#include "apdefap.h"
int gscAction( void )
{
BOOL,I1,I2,I3,I4,I5,O1,O2,O3,O4,O5,X1;
X1 =GetTagBit("S7$程序(1)/DB1.LXJ_ALARM");//Return-Type; BOOL
SetTagBit("心跳信号1",X1);//Return-Type; BOOL
SetTagBit("心跳信号2",X1);//Return-Type; BOOL
SetTagBit("心跳信号3",X1);//Return-Type; BOOL
SetTagBit("心跳信号4",X1);//Return-Type; BOOL
SetTagBit("心跳信号5",X1);//Return-Type; BOOL
I1 =GetTagBit("下料请求1");//Return-Type; BOOL
SetTagBit("S7$程序(1)/DB1.LXJ_QQ1",I1);//Return-Type; BOOL
I2 =GetTagBit("下料请求2");//Return-Type; BOOL
SetTagBit("S7$程序(1)/DB1.LXJ_QQ2",I2);//Return-Type; BOOL
I3 =GetTagBit("下料请求3");//Return-Type; BOOL
SetTagBit("S7$程序(1)/DB1.LXJ_QQ3",I3);//Return-Type; BOOL
I4 =GetTagBit("下料请求4");//Return-Type; BOOL
SetTagBit("S7$程序(1)/DB1.LXJ_QQ4",I4);//Return-Type; BOOL
I5 =GetTagBit("下料请求5");//Return-Type; BOOL
SetTagBit("S7$程序(1)/DB1.LXJ_QQ5",I5);//Return-Type; BOOL
O1 =GetTagBit("S7$程序(1)/DB1.LXJ_SC1");//Return-Type; BOOL
SetTagBit("允许下料1",O1);//Return-Type; BOOL
O2 =GetTagBit("S7$程序(1)/DB1.LXJ_SC2");//Return-Type; BOOL
SetTagBit("允许下料2",O2);//Return-Type; BOOL
O3 =GetTagBit("S7$程序(1)/DB1.LXJ_SC3");//Return-Type; BOOL
SetTagBit("允许下料3",O3);//Return-Type; BOOL
O4 =GetTagBit("S7$程序(1)/DB1.LXJ_SC4");//Return-Type; BOOL
SetTagBit("允许下料4",O4);//Return-Type; BOOL
O5 =GetTagBit("S7$程序(1)/DB1.LXJ_SC5");//Return-Type; BOOL
SetTagBit("允许下料5",O5);//Return-Type; BOOL
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
return 0;
}