前言
本文是基于B站上的《SCL核心应用课项目实战》课程,所做的笔记,主要包括程序代码和自己的理解注释。课程链接:SCL核心应用课项目实战(21课全)
陆杰锋老师讲得非常好,有理论讲解也有实战演练,需要具备一定的梯形图编程基础。
有空我会持续更新。
十、油漆配料混合工艺控制程序设计(一)
1.需求分析
如图所示为一搅拌控制系统,由一个称重传感器-变送器来检测液位的高低,并进行重量显示。现要求对A、B、C三种液体原料按等比例混合,请编写控制程序。
功能要求:
三个进料泵,控制三种不同液料ABC的加入和停止。按起动按钮后系统自动运行,首先打开进料泵1,开始加入液料A→当液位达到设定重量后,则关闭进料泵1,打开进料泵2,开始加入液料B→当液位达到设定重量后,则关闭进料泵2,启动搅拌器→搅拌10s后,关闭搅拌器,打开进料泵3,开始加入液料C,→当液位达到设定重量后,则关闭进料泵3,开启加热器,加热10s后,开启放料泵→当液料放空后,延时5s后关闭放料泵;按停止按钮,系统应完成当前工艺后才停止工作。
分析:
A.设计一个搅拌器通用的功能块FB;
B.需要具备重量设定接口,搅拌时间设定接口,加热时间设定接口及输出接口;
C.需要具备启动、停止、急停接口,收到停止命令时,需要完成本次工艺后才停止,收到急停命令则立即关闭输出;
D.急停恢复后,设备需要能继续运行;
E.顺序控制程序,可以运用case语句。
CASE "_variable_name_" OF
1: // Statement section case 1
;
2..4: // Statement section case 2 to 4
;
ELSE // Statement section ELSE
;
END_CASE;
2.程序编写
编程步骤:
1.建立FB块“混合装置”;
2.在“混合装置”块中建立如下变量:
注意:部分设定值应该设置为掉电保持。
3.编写浮点数转时间程序;
关于这段程序的讲解见另一篇文章:八、SCL核心应用课项目实战_模拟量转换通用块设计
代码如下:
#Stir_Time := DINT_TO_TIME(REAL_TO_DINT(#Stir_TSet * 1000.0));
#Heat_Time := DINT_TO_TIME(REAL_TO_DINT(#Heat_TSet * 1000.0));
4.编写其他程序;
代码如下:
IF NOT #Estop THEN//急停一般是常闭触点
CASE #STEP OF
0:
IF #Start THEN
#STEP := 1;
#Stop_DO := 0; //停止保持复位
END_IF;
//初始化
#A_KM := 0;
#B_KM := 0;
#C_KM := 0;
#Dis_KM := 0;
#Agitator := 0;
#Heater := 0;
1:
#A_KM := 1;
IF #Weight > #A_weight THEN
#A_KM := 0;
#STEP := 2;
END_IF;
2:
#B_KM := 1;
IF #Weight > (#B_weight + #A_weight) THEN
#B_KM := 0;
#STEP := 3;
END_IF;
3:
#Agitator := 1;
IF #TON[1].Q THEN
#Agitator := 0;
#STEP := 4;
END_IF;
4:
#C_KM := 1;
IF #Weight > (#C_weight + #B_weight + #A_weight) THEN
#C_KM := 0;
#STEP := 5;
END_IF;
5:
#Heater := 1;
IF #TON[2].Q THEN
#Heater := 0;
#STEP := 6;
END_IF;
6:
#Dis_KM := 1;
IF #Weight < #Weight_Empty THEN
#STEP := 7;
END_IF;
7:
IF #TON[3].Q THEN
#Dis_KM := 0;
IF #Stop_DO = 1 THEN //如果按下了停止按钮,则跳转到0,否则跳转到1
#STEP := 0;
#Stop_DO := 0; //停止保持复位
ELSE
#STEP := 1;//回到第一步,循环往复
END_IF;
END_IF;
END_CASE;
ELSE
#A_KM := 0;
#B_KM := 0;
#C_KM := 0;
#Dis_KM := 0;
#Agitator := 0;
#Heater := 0;
END_IF;
IF #STEP > 0 THEN
IF #Stop THEN
#Stop_DO := 1; //停止保持置位
END_IF;
END_IF;
//定时器指令要放在case指令外边
#TON[1](IN := #STEP = 3,//搅拌时间延时
PT := #Stir_Time);
#TON[2](IN := #STEP = 5,//加热时间延时
PT := #Heat_Time);
#TON[3](IN := #STEP = 7,//液料放空后延时
PT := T#5S);
5.建立一个FC块“混合装置控制”;
6.在“混合装置控制”中调用“混合装置”;
7.最后在主程序块Main中,调用“混合装置控制”。