基于VB的音乐喷泉上位机控制系统研制

2007-12-29 00:00:00钟震西
中国集体经济 2007年5期


  摘要:基于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