使用博图的SCL语言来完成多人抢答器的应用案例。
文章目录
目录
文章目录
前言
一、控制要求和I/O分配
1.控制要求
2.I/O分配
3.具体场景
二、编写
1.建立变量
2.编写
1.四路抢答器互锁
2.抢答提示指示灯
3.提前抢答和超时不抢答
4.完善
三、效果
1.仿真效果
2.虚拟工厂效果
四、练习题 (音乐喷泉)
总结
前言
在上一篇我们将常用的指令梳理了一遍,有一些没有说到的,在应用中如果用到了,咱们再详细说一下!那下面,简单的一些应用实例我们就可以动手试一试了!本文就从之前的抢答器开始(在之前我们使用梯形图做过这个应用),使用SCL语言来完成编写!
一、控制要求和I/O分配
1.控制要求
2.I/O分配
输入 | 输出 | ||||
名称 | 作用 | 地址 | 名称 | 作用 | 地址 |
SD | 开始抢答按钮 | I0.0 | L1 | 抢答提示指示灯 | Q0.0 |
SR | 系统复位按钮 | I0.1 | L6 | 指示灯L6 | Q0.1 |
SB1 | 1号抢答按钮 | I0.2 | L2 | 1号指示灯 | Q0.2 |
SB2 | 2号抢答按钮 | I0.3 | L3 | 2号指示灯 | Q0.3 |
SB3 | 3号抢答按钮 | I0.4 | L4 | 3号指示灯 | Q0.4 |
SB4 | 4号抢答按钮 | I0.5 | L5 | 4号指示灯 | 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一起仿真的话,就在里面提前布置一下场景和变量,然后和博图连接来看效果。
如图:上面是选手抢答部分,下面是主持人部分,旁边是指示灯。
这个也可以看一下完成后的效果:
四、练习题 (音乐喷泉)
最后呢,下面这题大家可先自己试一试,看能否完成控制要求!加油!
总结
以上就是本篇文章的内容啦!边写边说将抢答器这个写出来了,大部分都是用的if语句和逻辑运算符那个,程序可以参考,最好还是看一遍根据要求写出来,主要还是自己的思路,之后有些题的要求会很复杂,有思路就会好很多的!
今天就到这里啦!拜拜!!