首页 理论教育 音乐演奏程序设计优化指南

音乐演奏程序设计优化指南

时间:2023-06-30 理论教育 版权反馈
【摘要】:音乐演奏程序可运用S7-200 CPU的脉冲输出功能演奏WHISTLE(号笛)音乐。实现PLC音乐演奏系统需要硬件和程序两大部分。中断程序附着于PTO完成事件,第1个音符演奏完,中断程序调进下一个音符。音乐演奏程序由1个主程序、4个子程序和2个中断程序组成。图7-133 音乐演奏子程序2④子程序3。图7-136 音乐演奏中断程序1

音乐演奏程序设计优化指南

音乐演奏程序可运用S7-200 CPU(DC/DC/DC)的脉冲输出功能演奏WHISTLE(号笛)音乐。

实现PLC音乐演奏系统需要硬件和程序两大部分。

(1)硬件要求

1)SIMATIC S7-200CPU DC/DC/DC。

2)电源:AC115V/DC24V,0.9A(通常300~400mA就可以了)。

3)扬声器。

4)43053电阻

SIMATIC S7-200的输出端Q0.0和Q0.1分别串联一只电阻(约为430Ω,1/2W)与扬声器的一端相连,扬声器的另一端与公共输出端(1M)相连。SIMATIC S7-200的电源输入端(1L+)接+24V,各自的地线接在公共输出端(1M)上。

(2)程序设计

1)程序设计原理。WHISTLE(号笛)音乐程序使用25个半音阶音符。程序设计时用音符表,通道0的乐曲信息表和通道1的乐曲信息表分别存放音符及乐曲信息,如将从“A”(440 Hz)开始的25个半音阶音符的音符周期时间与之对应的脉冲数存放在音符表(表1)中,表2和表3分别存放通道0和1的乐曲信息,每个乐曲信息由两个字节音符组成,第1个字节是音符的参考号码(1~25),第2个字节是这个音符的时间单位数目(以0.125s为1个时间单位)。为了使音调能持续0.125s的频率发出,演奏时是两个音符同时进行,需将两个乐曲信息分别用脉冲通话0和通道1输出,并均被设置成脉冲序列输出(PTO),首先演奏每个通道的第1个音符,紧接着就请求第2个音符。这样就构成了深度为1的队列(1个在进程中,1个在队列中)。中断程序附着于PTO完成事件,第1个音符演奏完,中断程序调进下一个音符。这个过程继续下去,总是保持深度为1的队列,直到乐曲结束。

2)所用PLC内存单元。音乐演奏程序使用了放多的PLC内存单元,用于存储音符表、指针及乐曲表通道等,具体分工如下:

V4~V103 音符表

V500~V503 指向音符表的指针

V504~V507 指向通道0乐曲表的指针

V508~V511 临时的工作寄存器

V554~V557 指向通道1乐曲表的指针

V600~V743 通道0乐曲表

V800~V1059 通道1乐曲表

3)程序设计说明。音乐演奏程序由1个主程序、4个子程序和2个中断程序组成。

主程序主要用于调用子程序,只在第1个扫描周期中执行,随着主菜单关闭,主程序运行随之结束,其梯形图及对应的语句表程序如图7-130所示。

978-7-111-40269-5-Chapter07-176.jpg(www.xing528.com)

图7-130 音乐演奏主程序

①子程序0。初始化程序所使用的音符,用MOVD指令把用十六进制数表示的音符存于S7-200的内存中。音符的前4个字符码表征音符的频率,后4个字符码表示持续音调0.125s所需的脉冲数。此外还初始化脉冲序列输出,用特殊标志字节SMB67定义输出端Q0.0输出的方波特性,用SMB77定义输出端Q0.1输出的方波特性,其梯形图及对应的语句表程序如图7-131所示。

②子程序1。初始化通道0的乐曲表,演奏每个通道的第一个音符,通道0的音符参考号码和与之匹配的时间单价数被装入脉冲输出0(PS 0);同样的过程在通道1中进行(PLS 1);因此能同时演奏两个音符。其梯形图及对应的语句表程序如图7-132所示。

978-7-111-40269-5-Chapter07-177.jpg

图7-131 音乐演奏子程序0(初始化程序)

978-7-111-40269-5-Chapter07-178.jpg

图7-132 音乐演奏子程序1(初始化通道0的乐曲表)

③子程序2。初始化通道1的乐曲表,把每个通道的第2个音符排入队列,通道0的音符参考号码和与之匹配的时间单位数被装入脉冲输出0(PLS 0);同样的过程也在通道1中进行(PLS1),因此能同时演奏两个音符。其梯形图及对应的语句表程序如图7-133所示。

978-7-111-40269-5-Chapter07-179.jpg

图7-133 音乐演奏子程序2(初始化通道2的乐曲表)

④子程序3。起动中断程序,实现音乐的连续演奏。其梯形图及对应的语句表程序如图7-134所示。

⑤中断程序0。演奏通道0的下一个音符,是脉冲输出0(PLS 0)的脉冲计数。其中断事件19,其梯形图及对应的语句表程序如图7-135所示。

978-7-111-40269-5-Chapter07-180.jpg

图7-134 音乐演奏子程序3(起动中断程序)

978-7-111-40269-5-Chapter07-181.jpg

图7-135 音乐演奏中断程序0(演奏通道0的下一个音符)

⑥中断程序1。脉冲输出1(PLS 1)的脉冲计数,其中断事件20,演奏完一个音符后中断发生,其梯形图及对应的语句表程序如图7-136所示。

该课题展示了利用S7-200 DC/DC/DC脉冲输出功能演奏音乐。程序设计大致思路是:首先,建立25个音符周期的音符表并初始化音符表;其次,初始化通道0和1乐曲表,然后初始化脉冲序列;最后,用队列中断程序附着于脉冲序列输出(PTO)完成事件,完成音符连续演奏。

978-7-111-40269-5-Chapter07-182.jpg

图7-136 音乐演奏中断程序1(脉冲输出1的脉冲计数)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈