十三、SCL核心应用课项目实战_配方功能实现


前言

本文是基于B站上的《SCL核心应用课项目实战》课程,所做的笔记,主要包括程序代码和自己的理解注释。课程链接:SCL核心应用课项目实战(21课全)
陆杰锋老师讲得非常好,有理论讲解也有实战演练,需要具备一定的梯形图编程基础。
有空我会持续更新。

十三、配方功能实现

1.需求分析

功能要求:
A.建立一个通用的表格,里面有设备运行中需要的数据,如下表;
在这里插入图片描述
B.编号是指一共有几条配方,名称是指配方的名称,序号是指每条配方包含几条物料数据,重量或配方内容是指配方数据信息;
C.配方应具有如下功能:保存、增加、删除、修改、查找。

分析:
1.需要设置几个按钮,增、删、改、查;
2.需要设置一个序号变量,用于删除或修改第几条配方;
3.需要设置一个名称变量,用于查找配方;
4.需要设置一个设定存储区,用于存储增加或修改的配方的信息;
5.需要设置一个预览存储区,用于显示查找到的配方;
6.需要设置一个空存储区,用于覆盖掉要删除的配方。

2.程序编写

编程步骤:
1.新建一个PLC数据类型“混合”,用于存储某个物料的序号和重量信息;
在这里插入图片描述
2.新建一个PLC数据类型“配方”,用于存储配方的名称和物料信息,其中名称长度不能大于10个字符;
在这里插入图片描述
3.新建一个DB块“配方存储”;
在这里插入图片描述
4.新建一个FB块“配方处理”,并建立如下变量;
在这里插入图片描述
5.编写如下程序;

#P1(CLK := "配方存储".);
#P2(CLK := "配方存储".);
#P3(CLK := "配方存储".);
#P4(CLK := "配方存储".);

//增加配方
IF #P1.Q THEN
    #add_err := 0; //首先将错误信息清空
    FOR #n := 1 TO 10 DO
        IF "配方存储".配方_设置.名称 = "配方存储".配方[#n].名称 THEN
            #add_err := 1;//若增加的配方名称等于某条已经存在的配方名称,则触发重命名错误
        END_IF;
    END_FOR;
    IF NOT #add_err THEN
        FOR #n := 1 TO 10 DO
            IF "配方存储".配方[#n].名称 = '' THEN
                "配方存储".配方[#n] := "配方存储".配方_设置;//将设置区赋值给空配方
                EXIT; //一定要退出,否则所有名称为空的存储区都会存储上新的配方
            END_IF;
        END_FOR;
    END_IF;
END_IF;

//根据序号删除配方
IF #P2.Q THEN
    //间接寻址,例如"配方存储".序号=1,则表示"配方存储".配方[1]中存储的信息
    "配方存储".配方["配方存储".序号]:="配方存储".配方_空;//用空配方覆盖要删除的配方
END_IF;

//根据序号修改配方
IF #P3.Q THEN
    "配方存储".配方["配方存储".序号] := "配方存储".配方_设置;//将设置区赋值给要修改的配方
END_IF;

//根据配方名称查找配方
IF #P4.Q THEN
    FOR #n := 1 TO 10 DO
        IF "配方存储".配方[#n].名称 = "配方存储".名称 THEN
            "配方存储".配方_预览 := "配方存储".配方[#n];
        END_IF;
    END_FOR;
END_IF;

6.在主程序块Main中,调用FB块“配方处理”。
在这里插入图片描述

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值