【应用】博图SCL语言之抢答器应用

news2024/10/6 10:34:39

使用博图的SCL语言来完成多人抢答器的应用案例。

文章目录

目录

文章目录

前言

一、控制要求和I/O分配

1.控制要求

 2.I/O分配

3.具体场景

二、编写

1.建立变量

2.编写

1.四路抢答器互锁 

2.抢答提示指示灯

3.提前抢答和超时不抢答

4.完善

 三、效果

1.仿真效果

2.虚拟工厂效果 

四、练习题 (音乐喷泉)

总结


前言

在上一篇我们将常用的指令梳理了一遍,有一些没有说到的,在应用中如果用到了,咱们再详细说一下!那下面,简单的一些应用实例我们就可以动手试一试了!本文就从之前的抢答器开始(在之前我们使用梯形图做过这个应用),使用SCL语言来完成编写!


一、控制要求和I/O分配

1.控制要求

设有 4 组抢答器,有 4 位选手,一位主持人,主持人有一个开始答题按钮 SD ,一个系
统复位按钮 SR 。如果主持人按下开始答题按钮,则 4 位选手开始抢答,与此同时,开始抢
答指示灯 L5 亮进行抢答提示。抢先按下按钮的选手的正常抢答指示灯亮,其他选手按钮不
起作用。如果主持人未按下开始答题按钮,就有选手抢答,则认为犯规,指示灯 L6 闪亮。
当主持人按下开始答题按钮,时间开始倒计时,在 10 秒内仍无人抢答,则指示灯 L6 常亮,
此后不能再有选手抢答。所有情况,只要主持人按下系统复位按钮后,系统回到初始状态。

 2.I/O分配

I/O分配
输入输出
名称作用地址名称作用地址
SD开始抢答按钮I0.0L1抢答提示指示灯Q0.0
SR系统复位按钮I0.1L6指示灯L6Q0.1
SB11号抢答按钮I0.2L21号指示灯Q0.2
SB22号抢答按钮I0.3L32号指示灯Q0.3
SB33号抢答按钮I0.4L43号指示灯Q0.4
SB44号抢答按钮I0.5L54号指示灯Q0.5

3.具体场景

具体场景就类似那种,一些节目设置的抢答题目,然后让多个选手进行抢答,抢答成功就亮灯可以回答问题了就,大致就像这样:

 


二、编写

根据控制要求我们来看,4组抢答器,1个主持人,大体上就是4个抢答器,然后根据要求往上加内容,所以一开始我们可以先写四组抢答器,其他的慢慢加。

这里进行调试时可以直接用仿真监视看状态就可以,也可以用虚拟工厂看的更直观一些,当然直接用PLC最好!(这里优先使用仿真和虚拟工厂,哈哈) 

1.建立变量

新建一个项目大家都很熟悉了,下面就建立一个数据块和函数块FB/FC选择SCL语言,然后把变量写里面,都是bool量,下面的中继和上升沿备用! 

 然后找到这里就可以编写了!

2.编写

1.四路抢答器互锁 

按照我们想的先写出四路抢答器

先用if语句接通一个中继1 

//启动
IF "数据块_1".开始抢答按钮 THEN
    "数据块_1".中继1 := 1;
END_IF; 

当中继1为1的时候,我们将4个抢答器写进去,然后再利用指示灯来完成互锁; 

//4个抢答器和指示灯互锁
IF "数据块_1".中继1 THEN
    
    
    
END_IF; 

 这里当1号抢答按钮接通为1时,就点亮1号指示灯;同时在条件这里要加上另外3个指示灯来完成互锁这一功能(其中一个抢答成功后,另外3个无法再抢答)。

IF "数据块_1".1号抢答按钮 & NOT "数据块_1"."2号指示灯" & NOT "数据块_1"."3号指示灯" & NOT "数据块_1"."4号指示灯" THEN
        "数据块_1"."1号指示灯" := 1;
    END_IF; 

 另外3个和上面一样,形成互锁,然后放进大的if语句中;

//4个抢答器和指示灯互锁
IF "数据块_1".中继1 THEN
    
    IF "数据块_1"."1号抢答按钮" & NOT "数据块_1"."2号指示灯" & NOT "数据块_1"."3号指示灯" & NOT "数据块_1"."4号指示灯" THEN
        "数据块_1"."1号指示灯" := 1;
    END_IF;


    IF "数据块_1"."2号抢答按钮" & NOT "数据块_1"."1号指示灯" & NOT "数据块_1"."3号指示灯" & NOT "数据块_1"."4号指示灯" THEN
        "数据块_1"."2号指示灯" := 1;
    END_IF;


    IF "数据块_1"."3号抢答按钮" & NOT "数据块_1"."1号指示灯" & NOT "数据块_1"."2号指示灯" & NOT "数据块_1"."4号指示灯" THEN
        "数据块_1"."3号指示灯" := 1;
    END_IF;


    IF "数据块_1"."4号抢答按钮" & NOT "数据块_1"."1号指示灯" & NOT "数据块_1"."2号指示灯" & NOT "数据块_1"."3号指示灯" THEN
        "数据块_1"."4号指示灯" := 1;

    END_IF;


    END_IF;

 2.抢答提示指示灯

这一小部分也是放在大的if语句中的,当中继1为1,抢答指示灯就亮,当4为选手中有一位抢答成功,灯就灭了。 

  "数据块_1".抢答提示指示灯 := NOT "数据块_1"."1号指示灯" & NOT "数据块_1"."2号指示灯" & NOT "数据块_1"."3号指示灯" & NOT "数据块_1"."4号指示灯";

和下图类似: 

3.提前抢答和超时不抢答

 根据要求,在没有按下抢答按钮时,就提前抢答是要闪烁指示灯来提示;如果超过10s没人抢答L6指示灯常亮。

当这4个其中一个违规按下,就接通中继2,然后中继2接一个1s脉冲给指示灯进行闪烁; 

//在没按开始抢答时,提前抢答,L6指示灯闪烁。
IF "数据块_1"."1号抢答按钮" OR "数据块_1"."2号抢答按钮" OR "数据块_1"."3号抢答按钮" OR "数据块_1"."4号抢答按钮" THEN
    "数据块_1".中继2 := 1;
END_IF; 

超时不抢答:接通中继3连接指示灯6,然后将中继1断开。

//计时部分,超过时间没人答题就亮L6指示灯,并且此时选手不能抢答。
"IEC_Timer_0_DB".TON(IN := "数据块_1".中继1 & NOT "数据块_1"."1号指示灯" & NOT "数据块_1"."2号指示灯" & NOT "数据块_1"."3号指示灯" & NOT "数据块_1"."4号指示灯",
                     PT := T#5s,
                     Q => "数据块_1".定时器输出);
IF "数据块_1".定时器输出 THEN
    "数据块_1".中继3 := 1;
    "数据块_1".中继1 := 0;
END_IF; 

//指示灯L6
"数据块_1".指示灯L6 := NOT "数据块_1".中继1 & "数据块_1".中继2 & "Clock_1Hz" OR "数据块_1".中继3;
IF "数据块_1".指示灯L6 THEN
    "数据块_1".抢答提示指示灯 := 0;
END_IF;  

 4.完善

 关于抢答部分,为了保险起见最好用上升沿来触发指示灯:

具体的使用:在输入端放入按钮或开关,输出点Q输出一个扫描周期的上升沿。

 最后还有复位停止,就将输出点赋值为0就OK!


 

 三、效果

 1.仿真效果

 打开仿真,进行下载,然后调到监视状态。如图:

 然后先按下抢答按钮,再让1号抢答:如果再让2号抢答系统不会相应;

 然后再测试,如果超过10s没人抢答,L6会不会亮:这里可以看到当到达10s后,指示灯L6亮了。

 最后是提前抢答,看L6会不会闪烁:如图L6是会闪烁的。

2.虚拟工厂效果 

下图是和factoryio连接使用的程序。 

 如果是和factoryio一起仿真的话,就在里面提前布置一下场景和变量,然后和博图连接来看效果。

如图:上面是选手抢答部分,下面是主持人部分,旁边是指示灯。 

 这个也可以看一下完成后的效果:


 

四、练习题 (音乐喷泉)

最后呢,下面这题大家可先自己试一试,看能否完成控制要求!加油! 

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

总结

以上就是本篇文章的内容啦!边写边说将抢答器这个写出来了,大部分都是用的if语句和逻辑运算符那个,程序可以参考,最好还是看一遍根据要求写出来,主要还是自己的思路,之后有些题的要求会很复杂,有思路就会好很多的!

今天就到这里啦!拜拜!!

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

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

相关文章

IPO OC 系列模拟信号隔离转换模块0-1mA /0-10mA/0-20mA/ 4-20mA/0-75mV/0-2.5V/0-5V/0-10V

概述 IPO OC 系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源,可以向输入端和输出端…

缅怀致敬 继往开来 | 萨师煊教授诞辰100周年纪念主题活动在京举行

2022年12月27日是我国数据库学科奠基人——萨师煊教授诞辰100周年纪念日。为缅怀萨师煊先生对我国数据库领域做出的突出贡献,弘扬萨师煊先生敢为人先、严谨治学的高尚品格,“萨师煊教授诞辰100周年纪念活动”27日在北京举行。本次纪念活动由中国人民大学…

云原生丨手把手教你使用zabbix监控postgresql数据库(超详细讲解)

文章目录一、前言二、什么是zabbix三、zabbix安装步骤四、监控postgresql实现步骤一、前言 对于运维人员来说,监控是非常重要的,因为如果想要保证线上业务整体能够稳定运行,那么我们则需要实时关注与其相关的各项指标是否正常。 而一个业务…

数据结构-图

1、图的基本概念 (1)定义 图是一种较为复杂的非线性结构。 图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为G(V,E),其中,G表示一个图,V表示顶点的集合,E表示边的集合。 (2&…

当年谷歌为什么退出中国?

《时代》周刊中,百度公司创始人兼CEO李彦宏成为封面人物,成为中国互联网登《时代》的第一人。 而专访中的一段话,却让一段往事再次成为了舆论热议的焦点。专访中,李彦宏表示,谷歌当年退出中国是因为迫于百度给予的市场…

高可用软件什么意思?哪些高可用软件好用?

你知道高可用软件什么意思吗?哪些高可用软件好用?这里我们小编就给大家简单回答一下这两个问题。希望能对大家有用。 高可用软件什么意思? 所谓高可用是指系统无中断地执行其功能的能力;因此高可用软件是指具备处理能力&#xff…

SpringBoot 之自动装配简单使用

什么是自动装配? Spring Boot 自动装配是指 Spring Boot 应用程序在启动时,框架会自动根据应用程序的配置来创建和连接各种对象之间的依赖关系。这意味着,在应用程序中使用的对象可以通过声明它们的依赖关系来自动创建,而不需要人…

Linux中wait()函数

编程过程中&#xff0c;有时需要让一个进程等待另一个进程&#xff0c;最常见的是父进程等待自己的子进程&#xff0c;或者父进程回收自己的子进程资源包括僵尸进程。这里简单介绍一下系统调用函数&#xff1a;wait() 函数原型是#include <sys/types.h>#include <wai…

GPT学习路线分享

初代GPT-3展示了三个重要能力&#xff1a; 语言生成&#xff1a;遵循提示词&#xff08;prompt&#xff09;&#xff0c;然后生成补全提示词的句子。这也是今天人类与语言模型最普遍的交互方式。 上下文学习 (in-context learning): 遵循给定任务的几个示例&#xff0c;然后为…

深入浅出详解进制转换

1.进制转换 1.十进制转其他进制 1.整数转换(短除法) 以十进制数520为例&#xff0c;分别转换为二进制、八进制、十六进制&#xff0c;转换过程如下&#xff1a; 短除法&#xff1a;转进制除以几&#xff0c;余数倒过来为结果 2.小数转换 例如&#xff1a;转换为2进制&#…

Java | 详解创建Web项目、配置Tomcat服务器、实现登录效果

本Demo为本人自学&#xff0c;部分技术已不是前沿技术&#xff0c;望谅解。 目录 一、相关工具及技术 1、相关工具 2、相关技术 3、相关 jar 包 二、IDEA 创建 web 项目 1、创建空项目 2、classes目录和lib目录配置 3、tomcat 服务器配置 三、MySQL 配置 1、登录 mysql 2、创…

Leetcode - 485. 最大连续 1 的个数

与其后悔与抱怨&#xff0c;不如从现在改变 485. 最大连续 1 的个数 - Easy 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续…

原油期货在哪里交易?美原油期货和布伦特原油期货选择哪个交易更好?

石油是与人类社会及经济息息相关的能源&#xff0c;从工业生产、交通运输&#xff0c;以至制造塑胶产品、化妆品及衣服纤维等&#xff0c;无孔不入地渗透我们的日常生活与工商业活动。石油经开采后&#xff0c;未经加工的状态通称为原油&#xff0c;既是不可或缺的能源&#xf…

新茶饮 200+ 门店优化库存成本,需要几个数据分析师?

小 L 是一家茶饮门店的店长&#xff0c;她所在的新茶饮企业已经在全国布局了超过 200 家实体门店。小 L 每周除了整理 Excel 数据向区域总监汇报外&#xff0c;还要抽时间站到柜台前&#xff0c;完成总部要求的“在前线做决策”。虽然忙碌&#xff0c;但还能 Hold 得住&#xf…

云图联动创宇智脑,打造高价值威胁情报赋能的威胁处置闭环与攻击溯源

网络对抗日趋激烈&#xff0c;《关基保护要求》提出更高检测防御要求&#xff0c;高级威胁检测面对需求升级&#xff0c;知道创宇推出创宇云图与创宇威胁情报网关、创宇智脑威胁情报平台联防联控方案&#xff0c;打破单个网络安全产品的孤岛&#xff0c;充分发挥产品联动方案的…

数据结构(2)—算法

&#xff08;1&#xff09;小白建议学习青岛大学王卓老师的数据结构视频&#xff0c;或者购买程杰老师的大话数据结构。 &#xff08;2&#xff09;邀请加入嵌入式社区&#xff0c;您可以在上面发布问题&#xff0c;博客链接&#xff0c;公众号分享&#xff0c;行业消息&#x…

【SpringMVC】数据格式化+数据验证

目录 一、前言 二、目录结构 三、数据格式化 四、数据验证 五、数据格式化、验证梳理图 六、数据格式化、验证梳理图 相关文章 【SpringMVC】入门篇&#xff1a;带你了解SpringMVC的执行流程【SpringMVC】入门篇&#xff1a;带你了解SpringMVC的执行流程 【SpringMVC】使用篇&a…

ref的使用方法 ,组件通信父传子,组件通信子传父,组件分离模块化, v-model 传值的3种方式

原生获取一个节点&#xff1a;document.getElementById() vue方式操作dom节点&#xff1a;ref 通过给元素设定ref属性在vue实例中获取这个元素: <input type"text" ref"input" placeholder"请输入内容"> 组件挂载后(mounted)才能访问…

【重要】有三AI技术专栏作者邀请,5大权益助力共同成长

知识分享平台众多&#xff0c;我们有三AI公众号是其中一个&#xff0c;在过去的3年里&#xff0c;我们已经写了700多篇&#xff0c;超过200万字的技术文&#xff0c;其中一些专栏作者的贡献功不可没。我们公众号只做原创内容&#xff0c;因为我并不希望平台成为一个靠复制转载内…

通过运维编排实现自动化智能运维与故障自愈

自动化帮助用户消除重复性任务&#xff0c;从而降低运营成本、提高效率并提高团队生产力。但是&#xff0c;将自动化引入复杂的 IT 环境还需要编排。编排是指一次性自动执行多项任务&#xff0c;涉及到计算机系统、中间件和服务的自动布置、协调和管理&#xff0c;利用自动执行…