基于S7-300控制的音樂(lè)演奏系統(tǒng)仿真設(shè)計(jì)
摘要:針對(duì)西門子S7—300可編程控制器的脈沖輸出功能,將25個(gè)半音階音符的周期及對(duì)應(yīng)的脈沖數(shù)存放S7—300相應(yīng)的內(nèi)存單元中,通過(guò)合理分配S7—300的I/O端口,設(shè)計(jì)了一種音樂(lè)演奏控制系統(tǒng)。在硬件電路和軟件編程的基礎(chǔ)上,結(jié)合Wincc flexible仿真軟件進(jìn)行仿真與調(diào)試,實(shí)現(xiàn)了音樂(lè)演奏系統(tǒng)的功能需求。實(shí)踐表明,該設(shè)計(jì)具有功能強(qiáng)、運(yùn)用靈活、可靠性高、穩(wěn)定性好、編程簡(jiǎn)單、使用方便以及體積小、功耗低等特點(diǎn)。
本文引用地址:http://www.ex-cimer.com/article/201609/304498.htm可編程序控制器PLC是一種新型的通用自動(dòng)控制裝置,它將傳統(tǒng)的繼電器控制技術(shù)、計(jì)算機(jī)技術(shù)和通訊技術(shù)融為一體,是專門為工業(yè)控制而設(shè)計(jì)的。其中西門子S7—300具有功能強(qiáng)、運(yùn)用靈活、可靠性高、穩(wěn)定性好、抗干擾能力強(qiáng)、編程簡(jiǎn)單、使用方便以及體積小、重量輕、功耗低等一系列特點(diǎn)。本次設(shè)計(jì)以S7—300作為主控器件設(shè)計(jì)一種音樂(lè)演奏控制系統(tǒng),通過(guò)該設(shè)計(jì)可以使學(xué)習(xí)者充分掌握S7—300的基本應(yīng)用方法。
1 系統(tǒng)硬件結(jié)構(gòu)圖
音樂(lè)演奏控制系統(tǒng)的組成結(jié)構(gòu)圖如圖1所示,主要包括PLC控制單元、觸摸屏、按鈕、揚(yáng)聲器、指示燈和系統(tǒng)控制計(jì)算機(jī)。其中按鈕和觸摸屏用來(lái)控制系統(tǒng)的啟動(dòng)與停止,PLC用來(lái)通知觸摸屏顯示揚(yáng)聲器的工作狀態(tài),以及控制電路中的工作指示燈。
2 硬件設(shè)計(jì)
2.1 控制需求分析
為保證揚(yáng)聲器按照一定的音符演奏所需要的樂(lè)曲信息,可將從“A”(400 Hz)開(kāi)始的25個(gè)半音階音符的音符周期時(shí)間與之對(duì)應(yīng)的脈沖數(shù)存放在音符表(即內(nèi)存單元V4~V103)中,內(nèi)存單元(V600~V743)和內(nèi)存單元(V800~V1059)分別存放通道0和1的樂(lè)曲信息。因?yàn)槭峭瑫r(shí)演奏2個(gè)音符,所以要將兩個(gè)樂(lè)曲信息分別用脈沖通道0和通道1輸出,并均被設(shè)置成脈沖序列輸出(PTO)。當(dāng)系統(tǒng)啟動(dòng)與停止時(shí)通過(guò)PLC的I/O端口來(lái)分配功能。
根據(jù)對(duì)控制需求分析,可確定出PLC控制的輸入、輸出地址分配表如表1所示。
2.2 硬件電路設(shè)計(jì)
根據(jù)演奏音樂(lè)功能分析,可以設(shè)計(jì)出該電氣控制系統(tǒng)的硬件接線圖,如圖2所示。當(dāng)啟動(dòng)按鈕SB1接通時(shí),開(kāi)始演奏音樂(lè),并從Q0.0和Q0.1輸出脈沖信號(hào)來(lái)控制揚(yáng)聲器。當(dāng)按下停止按鈕SB2,系統(tǒng)停止。
3 軟件設(shè)計(jì)
3.1 程序設(shè)計(jì)的思路
本系統(tǒng)軟件設(shè)計(jì)采用PLC梯形圖語(yǔ)言編寫,針對(duì)梯形圖語(yǔ)言的特點(diǎn),本設(shè)計(jì)在軟件設(shè)計(jì)時(shí)采用了結(jié)構(gòu)化程序設(shè)計(jì)方法。即先把程序分為幾大的模塊,包括音符表、通道0樂(lè)曲、通道1樂(lè)曲、脈沖序列、第一音符、各通道的第二個(gè)音符排入隊(duì)列、啟動(dòng)中斷連續(xù)演奏等。然后再用編程語(yǔ)言實(shí)現(xiàn)。在編程時(shí)力求每個(gè)模塊的獨(dú)立性和通用性,而且做到清晰易讀、易修改。
編程時(shí)首先建立25個(gè)音符周期的音符表并初始化音符表,同時(shí)初始化通道0和1樂(lè)曲表及脈沖序列,然后用隊(duì)列中斷程序附著于脈沖序列輸出(PTO)完成事件,完成音符連續(xù)演奏。
兩個(gè)脈沖通道都被設(shè)置成脈沖序列輸出(PTO),當(dāng)演奏每個(gè)通道的第一個(gè)音符時(shí),就請(qǐng)求第二個(gè)音符,這樣就構(gòu)成了深度為1的隊(duì)列(一個(gè)在進(jìn)程中,一個(gè)在隊(duì)列中)。中斷子程序附著于PTO完成事件。第一個(gè)音符演奏完,中斷程序調(diào)用下一個(gè)音符,這個(gè)過(guò)程繼續(xù)下去,直到樂(lè)曲結(jié)束。
3.2 PLC內(nèi)存單元分配
音樂(lè)演奏程序使用了較多的PLC內(nèi)存單元,用于存儲(chǔ)音符表、指針、及樂(lè)曲表通道等,具體分工如下:
V4~V103音符表。
V500~V503指向音符表的指針。
V504~V507指向通道0樂(lè)曲表的指針。
V508~V511臨時(shí)的工作寄存器。
V554~V557指向通道1樂(lè)曲表的指針。
V600~V743通道0樂(lè)曲表。
V800~V1059通道1樂(lè)曲表。
3.3 程序流程圖
音樂(lè)演奏控制程序由1個(gè)主程序、7個(gè)子程序和2個(gè)中斷程序組成,其控制程序流程如圖3所示。
1)主程序:只在第一個(gè)掃描周期中執(zhí)行,如果主菜單關(guān)閉,主程序也結(jié)束運(yùn)行。
2)SBR0:初始化程序所使用的音符。用MOVD指令把用十六進(jìn)制數(shù)表示的音符存于內(nèi)存中,前4個(gè)字符碼表征音符的頻率,后4個(gè)字符表示持續(xù)音調(diào)0.125秒所需的脈沖數(shù)。
3)SBR1:由于樂(lè)曲的演奏需雙重的音符,所以必須定義兩個(gè)不同的通道(0和1),SBR1就是初始化通道0的樂(lè)曲,每個(gè)MOVD指令包含4個(gè)字節(jié),每個(gè)字節(jié)是音符的參考號(hào)碼(1~125),第二個(gè)字母是0.125秒時(shí)間單位的數(shù)目;第三個(gè)字節(jié)是下一個(gè)音符的參考號(hào)碼,第四個(gè)字節(jié)是下一個(gè)音符的0.125秒時(shí)間單位的數(shù)目。
4)SBR2:初始化通道1的樂(lè)曲。
5)SBR3:初始化脈沖序列輸出,特殊標(biāo)志字節(jié)定義輸出端Q0.0和Q0.1輸出的方波特性。
6)SBR4:演奏每個(gè)通道的第一個(gè)音符,通道0的音符參考號(hào)碼和與之匹配的時(shí)間單位數(shù)被裝入脈沖輸出0,同樣的過(guò)程在通道1中進(jìn)行,因此能同時(shí)演奏兩個(gè)音符。
7)SBR5:把每個(gè)通道的第二個(gè)音符排入隊(duì)列,通道0的音符參考號(hào)碼和與之匹配的時(shí)間單位數(shù)被裝入脈沖輸出0,同樣的過(guò)程在通道1進(jìn)行,因此能同時(shí)演奏兩個(gè)音符。
8)SBR6:設(shè)置的中斷對(duì)于連續(xù)地演奏樂(lè)曲是很重要的,中斷0是脈沖輸出0的脈沖計(jì)數(shù)中斷事件,中斷1是脈沖輸出1的脈沖計(jì)數(shù)中斷事件,演奏完一個(gè)音符后中斷發(fā)生。
9)INT0:演奏完通道0的一個(gè)音符后,就激活中斷程序0,下一個(gè)音符的參考號(hào)碼和計(jì)算出的時(shí)間單位數(shù)將被傳給通道0的脈沖輸出,當(dāng)樂(lè)曲的最后一個(gè)音符演奏完成時(shí),將自動(dòng)禁止中斷,程序終止。
10)INT1:演奏完通道1的一個(gè)音符后,就激活中斷程序1,下一個(gè)音符的參考號(hào)碼和計(jì)算出的時(shí)間單位數(shù)將被傳給通道1的脈沖輸出,當(dāng)樂(lè)曲的最后一個(gè)音符演奏完成時(shí),將自動(dòng)禁止中斷,程序終止。
評(píng)論