【SCL】博图SCL应用之音乐喷泉

news2024/11/14 21:14:32

使用Scl语言编写博图应用:音乐喷泉

文章目录

目录

一、音乐喷泉

1.控制要求

2.I/O分配

3.编写程序

4.效果和完整代码 

二、装配流水线模拟控制(练习)

1.控制要求 

2.场景


前言

承接上文,这里写一下上一篇的练习题 音乐喷泉应用案例,主要会说一下实现脉冲的几种方法和case语句应用。


一、音乐喷泉

1.控制要求

按下启动按钮, L1 灯亮, 0.5S 后灭→ L2 灯亮, 0.5S 后灭→ L3 灯亮, 0.5S 后灭→ L4
亮, 0.5S 后灭→ L5 灯亮, 0.5S 后灭→ L6 灯亮, 0.5S 后灭→ L7 灯亮, 0.5S 后灭→ L8 灯亮,
0.5S 后灭,以此循环下去 .......
按下停止按钮,停止循环全部灯灭。

2.I/O分配

输入输出
名称作用地址名称作用地址
SB1启动I0.0L1灯1Q0.0
SB2停止I0.1L2灯2Q0.1
L3灯3Q0.2
L4灯4Q0.3
L5灯5Q0.4
L6灯6Q0.5
L7灯7Q0.6
L8灯8Q0.7

3.编写程序

准备 

 根据题目我们可以看,主要闪烁和循环这两点,中间要间隔0.5s;具体写的话就是弄一个脉冲来触发一个case 语句,来实现8个灯闪亮就好了。(这里会结合factoryio来进行调试)

在编写之前将准备工作完成:博图变量的建立、factoryio建立变量和场景、两者进行仿真连接。

 

 编写程序

 这一个音乐喷泉程序没有特别的复杂,主要就是脉冲的实现:可以使用定时器TON来产生0.5s脉冲,也可以使用系统的时钟脉冲m0.3(2HZ);然后就是8个指示灯的来回闪烁循环:可以用加计数CTU来完成,也可以直接用if语句来递增达到效果!

1.启动 

直接使用if语句就可以,来接通一个中继; 

 IF "启动按钮" THEN
        "中继1(1)" := 1;
       
    END_IF; 

2.脉冲

第一种方法直接用定时器来产生, 然后用Q点触发CTU计数器,再配合计数器当前值进行比较来完成。

//定时器

 "IEC_Timer_0_DB_2".TON(IN:="中继1(1)" & NOT "定时器输出1",
                          PT:=T#0.5s,
                          Q=>"定时器输出1");

//计数器

"IEC_Counter_0_DB".CTU(CU:="定时器输出1",
                          R:="计数器输出",
                          PV:=8,
                          Q=>"计数器输出",
                          CV=>"计数器当前值");

//case语句

  CASE "计数器当前值" OF
           1:
               "L1" := 1;
           2:
               "L1" := 0;
               "L2" := 1;
           3:
               "L2" := 0;
               "L3" := 1;
           4:
               "L3" := 0;
               "L4" := 1;
           5:
               "L4" := 0;
               "L5" := 1;
           6:
               "L5" := 0;
               "L6" := 1;
           7:
               "L6" := 0;
               "L7" := 1;
           8:
               "L7" := 0;
               "L8" := 1;
           9:
               "L8" := 0;
       END_CASE;

第二种方法使用系统时钟,用时钟来触发计数器;

 "IEC_Counter_0_DB".CTU(CU:="Clock_2Hz"",
                          R:="计数器输出",
                          PV:=8,
                          Q=>"计数器输出",
                          CV=>"计数器当前值");

 第三种方法用if语句和赋值相结合,先取2HZ上升沿,将计数器当前值加1后再赋值给当前值,这样的话定时器和计数器都省掉了,最后直接用case语句一接就可以了!

 IF "中继1(1)" THEN
        "R_TRIG_DB"(CLK := "Clock_2Hz",
                    Q => "上升沿1(1)");        
    END_IF;
    
    IF "上升沿1(1)" THEN
        "计数器当前值" := "计数器当前值" + 1;
    END_IF;

 3.循环

 完成上面这些还不行,题目要求要一直循环,如果用CTU就用Q点来触发一下复位R就可以了;

 "IEC_Counter_0_DB".CTU(CU:="定时器输出1",
                          R:="计数器输出",
                          PV:=8,
                          Q=>"计数器输出",
                          CV=>"计数器当前值");

 如果用IF语句,那么在循环到最后一个灯时,要将当前值进行重新赋值来循环。

     "L7" := 1;
           8:
               "L7" := 0;
               "L8" := 1;
           9:
               "L8" := 0;
               "计数器当前值" := 1;

4.停止 

按下停止按钮后,将中继和8个灯置0,再将计数器复位,让下次启动可以重新开始。 

 IF "停止按钮" THEN
        "中继1(1)" := 0;
        "L1" := 0;
        "L2" := 0;
        "L3" := 0;
        "L4" := 0;
        "L5" := 0;
        "L6" := 0;
        "L7" := 0;
        "L8" := 0;
        "计数器输出" := 1;
    END_IF; 

4.效果和完整代码 

 

 


二、装配流水线模拟控制(练习)

1.控制要求 

 按下启动开关按钮,起动整个传送系统,工件开始在传送带移位。扭子开关打到 OFF

装配流水线停止工作。 A B C 三个灯模拟的是三个操作, D E F G 四组灯模拟的是
传送带。 工件从 1 号位装入,分别在 A (操作 1 )、 B (操作 2 )、 C (操作 3 )三个工位完
成三种装配操作,经最后一个工位后送入仓库; D E F G 均是 3 个灯一组的模拟传送
带,这些工位均用于传送工件。工件在传送带上开始传送,经过 DEFG 传送之后进行 A
作,再经过 DEFG 传送之后进行 B 操作,再经过 DEFG 传送之后进行 C 操作,然后经过 DEFG
传送到仓库 H

2.场景

 


 总结

以上就是今天本篇文章的内容,将音乐喷泉案例写了一下,最后还有一个练习题可以试着写一下!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Typora+PicGo+SM.MS实现本地博客图片自动上传

使用TyporaPicGoSM.MS实现本地博客图片自动上传 Typora:一款Markdown 编辑器 PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具. SM.MS: 一个图床网站,注册后有5G免费空间 为什么要让本地图片自动上传 对于一个随时随刻都有可能在文章中贴代码的计…

快来领取你的JavaScript正则表达式速查表

如果我们想对字符串进行相关(增、删、改、查、检索)操作,就可以用接下来的正则表达式实现 什么是正则表达式 正则表达式是用于匹配字符串中字符组合的模式正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本…

家装中,你最后悔的事是什么?上海极家装修公司简介!

家装中,你最后悔的事是什么?上海极家装修公司简介!接触过很多业主,就没有不后悔的!至于原因,因为总会出现各种“考虑不周”,有些真的是失之毫厘差之千里! 下面上海极家装修公司简介!…

Cadence每日一学_12 | 使用 Padstack Editor 制作贴片焊盘和通孔焊盘

最近在学习小马哥的Cadence课程,该系列课程为学习笔记:使用Cadence Allegro绘制小马哥DragonFly四轴飞行器(STM32F4主控)PCB四层板教程。 文章目录一、获取焊盘封装尺寸的途径二、Padstack Editor三、绘制贴片焊盘(以电阻焊盘为例&#xff09…

Odoo 16 企业版手册 - 库存管理之产品类别

产品类别 您可以使用Odoo 库存模块中提供的产品类别功能对产品进行分类。为了执行各种产品操作,必须在Odoo中定义产品类别。Odoo将使产品更容易找到,因为它允许您按产品类别进行筛选。用户可以从库存模块的「配置」菜单访问「产品类别」窗口,…

【Python】sklearn机器学习之Birch聚类算法

文章目录基本原理sklearn调用基本原理 BIRCH,即Balanced Iterative Reducing and Clustering Using Hierarchies,利用分层的平衡迭代规约和聚类,特点是扫描一次数据就可以实现聚类, 而根据经验,一般这种一遍成功的算…

02 elf 的 binary 解析

前言 需求来自于 linux binary 的执行分析, 以及一些反编译工具的实现 比如 readelf, hopper disassemble 什么的 主要的目的是 更加详细了解 elf 的文件格式 为 后续的一些 理解做准备 elf 解析 elf 文件主要分为 四个部分 elfHeader, programHeaders, segments, …

2022年度盘点|聚焦运维服务,云智慧的高光时刻

回首2022,从IE 浏览器退役到AIGC 火遍全球,每一次科技的兴衰演进都打破着技术的新边界。与此同时,随着各行业数据规模爆发式地增长,云智慧作为国内全栈智能运维解决方案服务商,企业数字化地加速转型也为其带来了更多的…

Hibernate validator注解及Spring Boot自定义Hibernate Validator注解校验(超级详细)

一 Hibernate validator是什么 验证数据是贯穿整个应用层(从表示层到持久层)的常见任务。通常在每一层中都需要实现相同的验证逻辑,这样既耗时又容易出错。为了避免这些验证的重复,开发认原经常将验证逻辑直接捆绑到Model域中&…

1.9 基础综合案例|pyechart第三方包

文章目录json数据格式pyecharts模块介绍pyecharts快速入门数据处理这里使用比较经典的pyechart的第三方包。json数据格式 json是一种轻量级的数据交互形式。可以按照json指定的格式去组织和封装数据。或者这么说本质上json就是一个带有特定格式的字符串。 主要功能&#xff1…

【金猿案例展】正官庄——全渠道会员数据治理驱动商业增长

‍珍岛集团案例本项目案例由珍岛集团投递并参与“数据猿年度金猿策划活动——《2022大数据产业年度创新服务企业》榜单/奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业随着商业品牌的全渠道裂变式发展,对DTC直营会员为中心的综合数据运营提出了新的…

【自学Java】Java基本数据类型

Java基本数据类型 Java基本数据类型 Java 基本数据类型如下表: 序号数据类型大小/位可表示的数据范围默认值1long(长整数)64-9223372036854775808~92233720368547758070L2int(整数)32-2147483648&#x…

设置 MYSQL 数据库编码为 utf8mb4

utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,java程序中将报SQL异常: java.sql.SQLException: Inc…

带音频播放的MPlayer播放器在ARM上的移植笔记

前言 mplayer想要播放带音频的视频文件,需要依赖alsa-lib和zlib,所以交叉编译mplayer前还需要先编译alsa-lib和zlib 一、alsa-lib alsa-lib 是 ALSA 提供的一套 Linux 下的 C 语言函数库,需要将 alsa-lib 移植到板卡上,这样基于…

人话解读LGPLv3

大家都知道:你调用了 LGPL的库,你还是可以开发一个闭源程序。这就说明,LGPL比GPL要宽松。但并不像想象的那么简单。一、为什么会有LGPL作为GPL的发明人Stallman,是自由软件的死忠坚定维护者,为什么还允许让别人用了自己…

2022年终总结-2023新年快乐

这是学习笔记的第 2446篇文章新的一年了,还是得总结点东西,本来想盘一下自己买了多少书,做了哪些有意义的事情,想想我还是自己先慢慢盘吧,发不发出来另说,还是希望写点自己的感悟,也希望对大家有…

LabVIEW共享变量

LabVIEW共享变量 创建共享变量 要创建共享变量,必须先打开一个LabVIEW项目。在项目浏览器窗口中,右键单击终端、项目库或项目库中的文件夹,从快捷菜单中选择新建(New) 变量(Variable),打开共享变量属性(Shared Variable Proper…

dubbo源码实践-SPI扩展

1 概述 SPI的官方文档说明:Dubbo SPI | Apache Dubbo SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时&…

我的2022总结

博客记录 踏石留印 抓铁有痕 使用csdn写博客,发帖子,帮助网友回答问题。都是实实在在满足了学习,交流的需求 这是我自己使用 CSDN 各种功能记录: 工作方面: 年初参与了公司的一个产品,主要负责串口服务…

Allegro上如何计算阻抗操作指导

Allegro上如何计算阻抗操作指导 Allegro上同样可以快捷的进行阻抗计算,免去了用第三方软件计算的麻烦,以下图为例 具体操作如下 选择X-section在层叠中把每个层的Dielectric Constant填写正确,即板材的Er值