十、SCL核心应用课项目实战_油漆配料混合工艺控制程序设计(一)


前言

本文是基于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中,调用“混合装置控制”。
在这里插入图片描述

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值