PLC陶瓷配料系统中的应用
1、引言
陶瓷厂配粉效果的好坏对磁砖后期的质量影响非常大,一个好的配料控制系统能充分发挥潜力提升产量,可以对设备状态进行预知性分析,及时对设备非正常状态进行检测并告诉工作人员,设计一个优秀的抛光砖电气控制系统是抛光砖生产的必要因素。
2、PLC硬件设计
2、1 PLC选择原则
对于抛光砖电气控制系统来说,PLC选择的两个最基本的原则就是扩展能力和程序容量,在这里我们选择OMRON公司的CJ1H型PLC,它可以满足我们同时控制两条抛光砖生产线。程序方面,至少要满足程序容量在20000步,PLC扫描时间不长于10ms.
2、2 PLC组成
本系统由CJ1H型PLC主机1台,32点数字输入扩展模块18块,16点数字输出扩展模块10块,以及电源单元模块3只和扩展总线模块3块组成。
2、3硬件设计框图
CJ1H 主机 数字输入模块 数字输出模块 外部按钮 接近开关 报警检测 传动带 电子称
3、PLC软件设计
本配料系统PLC软件设计包含三个关键的控制算法,一是料斗的缺料呼叫设计;二是电子称的自动位移设计;三是皮带临控设计。为了减少程序容量和后期的可读性、可维护性,这里采用了模块化编程方法,三个关键控制算法都封装成了功能块,方便在本工程中引用,并且为后期移植到其它工程提供了方便。
3、1料斗的缺料呼叫设计
对于由3台压机组成的抛光砖送粉生产线,共有21个料斗(其中18个色料斗,3个基料斗)的缺料信号呼叫有效。这里我们采用OMRON提供的脚本语言封装成功能块,这里不详细的说明该PLC脚本语言的使用方法,读者可自行参考相关说明文档。
缺料呼叫需要达到的功能:
1、相同编号料斗呼叫,如A11,B11,C11,则不清料。这样可以提高速度。不同编号的料斗呼叫,如A11,B12,C13,则执行清料功能,防止混料。
2、先呼叫先响应,有存储呼叫编号的功能。
3、详细的程序如下:
(******************************************************************)
(*初始化*)
hj[0]:=a11_call;(*1#呼叫*)
hj[1]:=a12_call;(*2#呼叫*)
hj[2]:=a13_call;(*3#呼叫*)
hj[3]:=a14_call;(*4#呼叫*)
hj[4]:=a15_call;
hj[5]:=a16_call;
hj[6]:=b11_call;
hj[7]:=b12_call;
hj[8]:=b13_call;
hj[9]:=b14_call;
hj[10]:=b15_call;
hj[11]:=b16_call;
hj[12]:=c11_call;
hj[13]:=c12_call;
hj[14]:=c13_call;
hj[15]:=c14_call;
hj[16]:=c15_call;
hj[17]:=c16_call;
finish[0]:=a11_finish;
finish[1]:=a12_finish;
finish[2]:=a13_finish;
finish[3]:=a14_finish;
finish[4]:=a15_finish;
finish[5]:=a16_finish;
finish[6]:=b11_finish;
finish[7]:=b12_finish;
finish[8]:=b13_finish;
finish[9]:=b14_finish;
finish[10]:=b15_finish;
finish[11]:=b16_finish;
finish[12]:=c11_finish;
finish[13]:=c12_finish;
finish[14]:=c13_finish;
finish[15]:=c14_finish;
finish[16]:=c15_finish;
finish[17]:=c16_finish;
i:=0;
j:=0;
n2:=1;
k1:=0;
(******************************************************************)
(*****My Flag:addr[0],存储的实终是“真”*************************)
(******************************************************************)
(*将数据向前推出:先进先出处理*)
if addr[0]=0 and addr[1]<>0 then
addr[0]:=addr[1];
addr[1]:=0;
end_if;
if addr[1]=0 and addr[2]<>0 then
addr[1]:=addr[2];
addr[2]:=0;
end_if;
if addr[2]=0 and addr[3]<>0 then
addr[2]:=addr[3];
addr[3]:=0;
end_if;
if addr[3]=0 and addr[4]<>0 then
addr[3]:=addr[4];
addr[4]:=0;
end_if;
if addr[4]=0 and addr[5]<>0 then
addr[4]:=addr[5];
addr[5]:=0;
end_if;
if addr[5]=0 and addr[6]<>0 then
addr[5]:=addr[6];
addr[6]:=0;
end_if;
if addr[6]=0 and addr[7]<>0 then
addr[6]:=addr[7];
addr[7]:=0;
end_if;
if addr[7]=0 and addr[8]<>0 then
addr[7]:=addr[8];
addr[8]:=0;
end_if;
if addr[8]=0 and addr[9]<>0 then
addr[8]:=addr[9];
addr[9]:=0;
end_if;
if addr[9]=0 and addr[10]<>0 then
addr[9]:=addr[10];
addr[10]:=0;
end_if;
if addr[10]=0 and addr[11]<>0 then
addr[10]:=addr[11];
addr[11]:=0;
end_if;
if addr[11]=0 and addr[12]<>0 then
addr[11]:=addr[12];
addr[12]:=0;
end_if;
if addr[12]=0 and addr[13]<>0 then
addr[12]:=addr[13];
addr[13]:=0;
end_if;
if addr[13]=0 and addr[14]<>0 then
addr[13]:=addr[14];
addr[14]:=0;
end_if;
if addr[14]=0 and addr[15]<>0 then
addr[14]:=addr[15];
addr[15]:=0;
end_if;
if addr[15]=0 and addr[16]<>0 then
addr[15]:=addr[16];
addr[16]:=0;
end_if;
if addr[16]=0 and addr[17]<>0 then
addr[16]:=addr[17];
addr[17]:=0;
end_if;
(******************************************************************)
(******************************************************************)
(*存储处理*)
for k1:=0 to 17 by 1 do
(*1#、2#、3#、4#呼叫地址按先后顺序存储*)
if m[i]=0 then
if hj[j] then
if addr[0]=0 then
addr[0]:=n2;
m[i]:=1;
ELSIF addr[1]=0 then
addr[1]:=n2;
m[i]:=1;
ELSIF addr[2]=0 then
addr[2]:=n2;
m[i]:=1;
ELSIF addr[3]=0 then
addr[3]:=n2;
m[i]:=1;
ELSIF addr[4]=0 then
addr[4]:=n2;
m[i]:=1;
ELSIF addr[5]=0 then
addr[5]:=n2;
m[i]:=1;
ELSIF addr[6]=0 then
addr[6]:=n2;
m[i]:=1;
ELSIF addr[7]=0 then
addr[7]:=n2;
m[i]:=1;
ELSIF addr[8]=0 then
addr[8]:=n2;
m[i]:=1;
ELSIF addr[9]=0 then
addr[9]:=n2;
m[i]:=1;
ELSIF addr[10]=0 then
addr[10]:=n2;
m[i]:=1;
ELSIF addr[11]=0 then
addr[11]:=n2;
m[i]:=1;
ELSIF addr[12]=0 then
addr[12]:=n2;
m[i]:=1;
ELSIF addr[13]=0 then
addr[13]:=n2;
m[i]:=1;
ELSIF addr[14]=0 then
addr[14]:=n2;
m[i]:=1;
ELSIF addr[15]=0 then
addr[15]:=n2;
m[i]:=1;
ELSIF addr[16]=0 then
addr[16]:=n2;
m[i]:=1;
ELSIF addr[17]=0 then
addr[17]:=n2;
m[i]:=1;
END_IF;
END_IF;
END_IF;
(*1#、2#、3#、4#呼叫停则被清零*)
if not hj[j] and finish[j]=true then
if addr[0]=n2 then
addr[0]:=0;
m[i]:=0;
elsif addr[1]=n2 then
addr[1]:=0;
m[i]:=0;
elsif addr[2]=n2 then
addr[2]:=0;
m[i]:=0;
elsif addr[3]=n2 then
addr[3]:=0;
m[i]:=0;
elsif addr[4]=n2 then
addr[4]:=0;
m[i]:=0;
elsif addr[5]=n2 then
addr[5]:=0;
m[i]:=0;
elsif addr[6]=n2 then
addr[6]:=0;
m[i]:=0;
elsif addr[7]=n2 then
addr[7]:=0;
m[i]:=0;
elsif addr[8]=n2 then
addr[8]:=0;
m[i]:=0;
elsif addr[9]=n2 then
addr[9]:=0;
m[i]:=0;
elsif addr[10]=n2 then
addr[10]:=0;
m[i]:=0;
elsif addr[11]=n2 then
addr[11]:=0;
m[i]:=0;
elsif addr[12]=n2 then
addr[12]:=0;
m[i]:=0;
elsif addr[13]=n2 then
addr[13]:=0;
m[i]:=0;
elsif addr[14]=n2 then
addr[14]:=0;
m[i]:=0;
elsif addr[15]=n2 then
addr[15]:=0;
m[i]:=0;
elsif addr[16]=n2 then
addr[16]:=0;
m[i]:=0;
elsif addr[17]=n2 then
addr[17]:=0;
m[i]:=0;
end_if;
end_if;
i:= i+1;
j:= j+1;
n2:= n2+1;
end_for;
(******************************************************************)
(******************************************************************)
(*按先后顺序响应呼叫,若同时响应则序号在前先被响应*)
case addr[0] of
1:a11_yd:=true; (*1#作出响应*)
2:a12_yd:=true; (*2#作出响应*)
3:a13_yd:=true; (*3#作出响应*)
4:a14_yd:=true; (*4#作出响应*)
5:a15_yd:=true;
6:a16_yd:=true;
7:b11_yd:=true;
8:b12_yd:=true;
9:b13_yd:=true;
10:b14_yd:=true;
11:b15_yd:=true;
12:b16_yd:=true;
13:c11_yd:=true;
14:c12_yd:=true;
15:c13_yd:=true;
16:c14_yd:=true;
17:c15_yd:=true;
18:c16_yd:=true;
else
a11_yd:=false;
a12_yd:=false;
a13_yd:=false;
a14_yd:=false;
a15_yd:=false;
a16_yd:=false;
b11_yd:=false;
b12_yd:=false;
b13_yd:=false;
b14_yd:=false;
b15_yd:=false;
b16_yd:=false;
c11_yd:=false;
c12_yd:=false;
c13_yd:=false;
c14_yd:=false;
c15_yd:=false;
c16_yd:=false;
end_case;
(******************************************************************)
(*//相同编号料斗呼叫,如A11,B11,C11,则不清料。这样可以提高速度。//要求:几台压机必须保持同编号料斗用同样的配方。*)
if addr[0]=1 and (addr[1]=7 or addr[1]=13) then
SameCall:=true;different:=false;
elsif addr[0]=2 and (addr[1]=8 or addr[1]=14) then
SameCall:=true;different:=false;
elsif addr[0]=3 and (addr[1]=9 or addr[1]=15) then
SameCall:=true;different:=false;
elsif addr[0]=4 and (addr[1]=10 or addr[1]=16) then
SameCall:=true;different:=false;
elsif addr[0]=5 and (addr[1]=11 or addr[1]=17) then
SameCall:=true;different:=false;
elsif addr[0]=6 and (addr[1]=12 or addr[1]=18) then
SameCall:=true;different:=false;
elsif addr[0]=7 and (addr[1]=13 or addr[1]=1) then
SameCall:=true;different:=false;
elsif addr[0]=8 and (addr[1]=14 or addr[1]=2) then
SameCall:=true;different:=false;
elsif addr[0]=9 and (addr[1]=15 or addr[1]=3) then
SameCall:=true;different:=false;
elsif addr[0]=10 and (addr[1]=116 or addr[1]=4) then
SameCall:=true;different:=false;
elsif addr[0]=11 and (addr[1]=17 or addr[1]=5) then
SameCall:=true;different:=false;
elsif addr[0]=12 and (addr[1]=18 or addr[1]=6) then
SameCall:=true;different:=false;
elsif addr[0]=13 and (addr[1]=1 or addr[1]=7) then
SameCall:=true;different:=false;
elsif addr[0]=14 and (addr[1]=2 or addr[1]=8) then
SameCall:=true;different:=false;
elsif addr[0]=15 and (addr[1]=3 or addr[1]=9) then
SameCall:=true;different:=false;
elsif addr[0]=16 and (addr[1]=4 or addr[1]=10) then
SameCall:=true;different:=false;
elsif addr[0]=17 and (addr[1]=5 or addr[1]=11) then
SameCall:=true;different:=false;
elsif addr[0]=18 and (addr[1]=6 or addr[1]=12) then
SameCall:=true;different:=false;
else
SameCall:=false;different:=true;
end_if;
if TotalClear then (*总清除*)
SameCall:=false;
a11_yd:=false;
a12_yd:=false;
a13_yd:=false;
a14_yd:=false;
a15_yd:=false;
a16_yd:=false;
b11_yd:=false;
b12_yd:=false;
b13_yd:=false;
b14_yd:=false;
b15_yd:=false;
b16_yd:=false;
c11_yd:=false;
c12_yd:=false;
c13_yd:=false;
c14_yd:=false;
c15_yd:=false;
c16_yd:=false;
addr[0]:=0;
addr[1]:=0;
addr[2]:=0;
addr[3]:=0;
addr[4]:=0;
addr[5]:=0;
addr[6]:=0;
addr[7]:=0;
addr[8]:=0;
addr[9]:=0;
addr[10]:=0;
addr[11]:=0;
addr[12]:=0;
addr[13]:=0;
addr[14]:=0;
addr[15]:=0;
addr[16]:=0;
addr[17]:=0;
m[0]:=0;
m[1]:=0;
m[2]:=0;
m[3]:=0;
m[4]:=0;
m[5]:=0;
m[6]:=0;
m[7]:=0;
m[8]:=0;
m[9]:=0;
m[10]:=0;
m[11]:=0;
m[12]:=0;
m[13]:=0;
m[14]:=0;
m[15]:=0;
m[16]:=0;
m[17]:=0;
end_if;
3.2电子称自动位移设设
3.2.1设计说明
本系统中,共有80个料仓(共10排,每排8个料仓)存有不同的粉料,一共有30台电子称(共10排,每排3台电子称)根据上位机操作发出的位置指令运行到不同的工位。在这里,也采用模块化编程方法,将程序封装成功能块,方便其它电子称引用。
3.2.2系统框图
本称设置工位>当前工位 左称工位>=本称设置工位+1 是 是 电子称左移到达指定工位 本称设置工位<本称当前工位 右称工位<本称设置工位+1 否 是 是 电子称右移到达指定工位 结束 准备 设置错误 否 否
3.2.3程序样例
3.3皮带监控设计
一个完整的电气控制系统不仅能对现场设备进行准确的控制,还应包含完善的报警预知功能,只有及时、有效地监测未知和已知的帮障内容,才能使设备的利用价值最大化,并且能最大程度地减少设备故障带来的损失和工人的劳动强度。
3.3.1设计思路
为了降低传送带和电子称皮带断带、断轴、电机卡死等故障,在传带带被运边装设一个花轴的检测轮,检测轮边上装设一只接近开关,传动带带动检测轮旋转,每旋转一周时产生6个脉冲信号,此信号输入PLC内部用以复位定时器,当定时器在一定时间内没有被复位时,就产生一个报警输出,在上位组态软件里面弹出报警内容,方便操作工查看和处理。
3.3.2程序样例
4.结束语
完整的控制软件比较复杂,它包含料斗呼叫、电子称自动位移、线路运行、选仓信号、底仓以及连线运行、色料基料摆管运行、皮带监控、报警处理等内容。本文只对关键控制算法作了说明,相信聪明的读者掌握了上述控制方法后一定能设计出优秀的控制程序来。
参考文献
《CX-Programmer功能块操作手册》 日本OMRON株式会式
《CJ1H 操作手册》 日本OMRON株式会式
《可编程序控制器在工业控制中的应用》 化学工业出版社
《电气控制与PLC》 机械工业出牌社
提交
关于我厂球磨机变频器的报告
西门子 S7_200 EM253位置控制块的实际应用程序
步进电机驱动器的整机电路图
凌华板卡PCI9114ADG驱动程序
基于亚控KINGVIEW6.53的陶瓷配料系统