使用Scl语言编写博图应用:音乐喷泉
文章目录
目录
一、音乐喷泉
1.控制要求
2.I/O分配
3.编写程序
4.效果和完整代码
二、装配流水线模拟控制(练习)
1.控制要求
2.场景
前言
承接上文,这里写一下上一篇的练习题 音乐喷泉应用案例,主要会说一下实现脉冲的几种方法和case语句应用。
一、音乐喷泉
1.控制要求
2.I/O分配
输入 | 输出 | ||||
名称 | 作用 | 地址 | 名称 | 作用 | 地址 |
SB1 | 启动 | I0.0 | L1 | 灯1 | Q0.0 |
SB2 | 停止 | I0.1 | L2 | 灯2 | Q0.1 |
L3 | 灯3 | Q0.2 | |||
L4 | 灯4 | Q0.3 | |||
L5 | 灯5 | Q0.4 | |||
L6 | 灯6 | Q0.5 | |||
L7 | 灯7 | Q0.6 | |||
L8 | 灯8 | Q0.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,
2.场景
总结
以上就是今天本篇文章的内容,将音乐喷泉案例写了一下,最后还有一个练习题可以试着写一下!