摘要:基于VB的音樂噴泉控制系統,運行于windows平臺,文章介紹了音樂噴泉系統的硬件、軟件結構及功能,并給出了主要程序。
關鍵詞:VB;音樂噴泉;控制系統
VB6.0是當前用于數據采集、信號處理和虛擬儀器開發的一個標準工具。它是一種圖形化的編程語言,集成了與滿足GPIF3,VXI,RS232和RS485協議的硬件及數據采集卡通訊的全部功能。它還內置了便于應用TCP/IP,ActiveX等軟件標準的庫函數。這是一個功能強大且靈活的軟件。其圖形化的界面使得編程及使用過程都生動有趣。
隨著城市建設的發展,音樂噴泉已成為現代城市生活的重要娛樂設施之一。目前,大型音樂噴泉的控制方式主要有工業PC和以工業PC為上位機,PLC為下位機的總線控制兩種方式。這里的工業PC控制方式是指以工業控制計算機為核心,通過各種IO板卡和通訊卡發送控制信號的音樂噴泉控制系統。隨著大點數工業IO板卡的推出以及計算機多媒體技術的發展,相比以工業PC為上位機,多個PLC為下位機的總線控制方式相比,它具有更高的性價比,而且充分利用了目前計算機的多媒體技術。下面結合某音樂噴泉控制系統的項目介紹一種基于工業PC控制方式以VB6.0為上位機界面的音樂噴泉控制系統。
一、硬件部分

控制系統的系統框圖如圖1所示,采用多媒體聲卡取代傳統的CD播放機,使用研華PCI_1753P1753E數據采集卡。采用多媒體聲卡后,不再需要CD播ajBnNJmy2qTHc8dnQpFgBstsAhZK22LhzzCOW508NMI=放機,音樂的播放、音樂數據的分析可以全部在工控機內用軟件實現,可以提高音樂跟水型變化的協調性。PCI_1753是一款PCI總線的96路數字量I/O卡,它可以經由PCI_1753E擴展為192路的數字量I/O。PCI_1753仿真8255PPI模式0,但是緩存電路提供了比8255更高的驅動能力,96路I/O線分成12個8位I/O端口:A0、B0、C0、A1、B1、C1、A2、B2、C2、A3、B3和C3。用戶可以使用軟件配置每個端口作為輸入或輸出端口。這樣只需要兩塊PCI_1753再擴展兩塊PCI_1753E就可以取代傳統的多塊PCL_734。解決了板卡多,需擴展ISA槽的問題,而且提高了系統的穩定性、可靠性。對變頻器的控制,采用RS_485總線的控制方式,使用了研華公司的4端口RS_485PCI通訊卡PCI_1612A。
二、軟件部分

設計了控制軟件。該控制軟件運行于WindowsXP,它的基本結構從圖2看出:它由系統管理模塊、水型編輯模塊、系統測試模塊、運行模塊、IO驅動模塊組成。其中,系統管理模塊完成樂曲的添加、刪除,并管理測試、運行和水型編輯等其它功能模塊;系統測試模塊負責測試閥門、燈及變頻器的工作情況;水型模塊提供一個友好的工作界面讓用戶根據對音樂的理解來添加基本水型,最后生成水型文件;運行模塊最后根據水型模塊生成的水型文件,按一定的控制規律控制噴泉的水型,IO驅動模塊則負責接收測試模塊和運行模塊發送的數據,并據此驅動IO板卡和通訊卡。
為了對不同的歌曲進行水型編輯,設計了一個水型庫。水型庫包含基本的水型,每一首歌曲的噴泉水型由多個基本水型組成,不同的歌曲在一定的時間段的水型根據歌曲的節拍、頻率、感情色彩等從基本水型中選出。
這樣,在軟件的水型模塊中設置好噴泉水型,生成對應歌曲的水型文件,運行時由運行模塊讀取水型文件數據,經過處理,驅動各個閥門、彩燈、變頻器等,實現給定的噴泉水型。水型編輯模塊主要對windows的wav文件進行數據處理并編輯水型文件。wav文件數據塊包含了以脈沖編碼調制(PCM)格式表示的聲音信號樣本。在windows中可以通過低級音頻函數很容易的對wav文件進行音樂播放、暫停、定位、結束等操作。由于wav文件的數據塊內容就是聲音信號樣本,因此音樂波形的顯示、信號的快速傅立葉變換等能直接處理。為了方便、形象進行水型編輯,水型編輯模塊具有音樂波形顯示功能,而且音樂波形的顯示可以根據定位要求在時間軸上放大或縮小。水型編輯人員通過對音樂的理解以及在波形顯示的輔助下可以對音樂進行分段,然后插入基本水型。當對整首音樂分好時間段并插入基本水型后,這些基本水型就被保存為對應歌曲的水型文件。
音樂噴泉控制的另外一個關鍵問題是在Windows2000系統下音樂播放如何與水型動作協調。常用的Windows定時器消息只能達到55毫秒的定時精度,而且Windows定時器消息優先級別很低,不能滿足音樂噴泉時間控制的要求。因此對噴泉控制的定時采用了Windows多媒體定時器的方法。使用這種方法可以將時間精確到2毫秒。
三、主要結構及程序
(一)開關量卡控制結構
Type PT_DioWritePortByte
Port As Integer
Mask As Integer
State As Integer
End Type
該開關量卡有32位,分4組,port指定第幾組,mask為屏蔽碼,state為欲設定的組的各位開關狀態,須把對應位的二進制轉換為十進制,如:00000011,表示把1、2位開啟,其余位關閉,則state應為3。在手動已經關閉一些設備后,屏蔽碼則不再是默認的255,而應該去除相應的位。如已關閉第8位對應設備,屏蔽碼就應改為127。此時,即便state設置為127以上,也不會開啟第8位對應設備。
(二)音源線路的控制結構及控制函數
Type MIXERCONTROLDETAILS
cbStruct As Long
dwControlID As Long
cChannels As Long
item As Long
cbDetails As Long
paDetails As Long
End Type
Declare Function mixerGetControlDetailsLib“winmm.dll”_
Alias“mixerGetControlDetailsA”_
(ByValhmxobj As L