介绍了一种电话语音查询与控制系统,阐述了电话语音卡的硬件和软件,并给出了利用VC++6.0的多线程技术和ADO参数化查询技术对系统进行设计的方法。
关键词:电话,语音,控制,多线程,ADO
1 引言
具有PC机的监测和控制系统,已经广泛应用在诸多领域。由于我们只能在监控中心才能够查询和控制整个系统的监测情况,所以,在工作中,特别是在检修被控制的设备时,常常需要几个人在相距较远的监控中心和被控设备之间来回忙碌,当发现问题时不能尽快采取有效措施予以解决,从而导致不必要的经济损失。应某单位的要求,本文设计了交互式电话语音查询和控制系统。它既能对该单位所有可访问的数据进行查询,又能对几个大型电机进行重点的温度监测和远程控制,以此优化管理,提高工作效率。它还能够根据用户需求扩展出一些个性化功能,是一种新型的具有市场前景的系统。
2 系统硬件设计
2.1 系统工作原理
电话语音查询和控制系统的硬件部分主要由上位机(PC机)、下位机、执行机构、电话语音卡、外线(普通市话线路)和内线等组成。系统结构如图1所示。用户可以在任何地方使用双音频电话或手机等通讯工具拨打监控中心的系统电话,振铃信号通过电话网,经语音卡接口传人上位机,系统感知振铃后接通电话,并播放提示音。当用户按下电话键盘后,上位机将传送来的双音多频码DTMF进行分析处理后转换为计算机命令。若收到的是查询命令,则对相应的测控数据库进行查询,上位机将查询后的结果转换合成为语音信息,再经语音卡接口和电信网播放给用户收听;若收到的是控制命令,则由控制算法计算出控制量,上位机通过通讯将此信息下传到下位机中,驱动相应的执行机构,然后上传控制命令的执行情况,上位机将其转换合成为语音信息播放给用户,并显示状态信息参数,将控制日志记录到数据库中,以便今后的统计和分析。如果系统检测到挂机信号或等待双音频信息的时间过长,系统将挂断电话机。
下位机在上位机的非控制状态下,不断地将监测数据上传到上位机,并将有效数据记录到数据库中,当被监测数据超出预定值时则产生预警信息。
2.2 电话语音卡简介
电话语音卡,即“电脑与电话语音处理卡”,是CTI(Computer Telecommunication Integration)技术的产品。它包含有模拟电话语音处理卡和数字中继接口语音处理卡。本系统使用的是模拟语音卡。作为公共电话网与电脑的关键接口设备,它负责检测和执行各种电话信息。国产电话语音卡的开发在技术上(除PC接口技术外)主要是利用了时分交换技术,这是从程控交换机的思路演化而来的。目前,时分交换、语音压缩、专用或通用DSP(Digital Signal Processing)技术及PC接口等方面的技术已很成熟。每块卡具有相互独立的多个通道,根据各个通道的不同需求,可选用不同的功能模块。语音卡一般具有以下几种主要的模块:接口、放音、录音、搭线、传真、声控录音等。接口模块分为用户模块(内线模块)和中继模块(外线模块)两种。用户模块可以直接驱动电话,将电话连接到此模块上,摘机即可工作。中继模块连接电信网的电话中继线或小型程控交换机的用户线,相当于一部电话机。
语音卡支持两种总线,即安装时要设置I/O与IRQ的ISA(Industry Standard Architecture)和能即插即用的PCI(Peripheral Component Interconnect)。
电话语音卡生产厂家随卡提供的软件包括底层驱动程序(动态链接库DLL)和二次开发接口程序。每个通道都可以由软件(如VC++、VB、Delphi、C/C++、VFp等)编程完成以下基本功能:
·自动检测外线振铃信号和内线的摘挂机动作;
·控制外线的摘挂机,内线的馈电或铃流;
·将数字化电脑语音文件播放到电话线上;
·将电话语音录制成数字化电脑语音文件;
·接收用户的电话机按键码,即双音多频码;
·检测电话线路返回的各种信号音状态,如拨号音、忙音、回铃音等;
·电话卡上任意两通道可连接相互通话。当卡上同时配有内外线时,内外线之间也可连接通话;
·软件可调语音压缩比。
2.3 下位机的设计
通过比较,本文选用PIC16C57单片机进行设计。它是采用精简指令集RISC,全静态CMOS工艺的8位机;它性价比高,有较强的带负载能力;具有20个I/O口,可分别作为监测口和控制口,每个I/O口最大拉电流为20mA,最大灌电流为25mA,可直接驱动LED。温度传感器采用AD590,测温范围为-55℃~150℃,它的输出电流公式为
Iout=CT×(273.15+t)
式中,CT=1μA/K是标称温度系数;t表示摄氏度。其电流再经运算放大器LM324放大后输出。系统采用MAX232电路通过RS232C接口与上位机串行通信。执行机构的驱动电路由MOC3081和双向晶闸管等器件组成。MOC3081的输入控制电流15mA,过零检测电压值为20V,输出额定电压是600V,最大重复浪涌电流为1A,输出输入隔离电压大于7500V。驱动电路的触发部分如图2所示。
2.4 电话通信线路的改善
电话通信线路的质量是系统可靠工作的重要保障之一。电话机的传输频带为300Hz~3400Hz。若电话中有干扰声,则首先检查电话线是否远离干扰源。如果电话线过于陈旧,线里有锈蚀现象,电话线绝缘性不良或电话线芯接触到其它导体(如铝合金门窗等)上都会造成其电气性能的下降、传输误码率的上升和严重的交流或广播等噪声。应将其更换成新线,并将接线处连接好。若此后电话中仍有干扰噪声,则可在电话线接入电话和系统之前,接上一个简易的抗干扰滤波电路(如图3),元件参数可由公式
取得,最终经实验确定。式中f是需要过滤的干扰频率,XC是容抗,XL是感抗;电路中的地线一定要可靠,否则电路可能无效,甚至适得其反。
3 系统软件设计
3.1 软件的组成
本系统的下位机程序主要包含启动自检模块、AD转换、数据处理模块、通讯模块、输入输出模块等。为了解决程序受干扰后跳飞的问题,在每个存储器页面最后放置一条SLEEP指令,在小于18ms的延时等待程序中不使用清看门狗指令,在大于18ms的延时等待程序中必须使用CLRWDT指令。当系统运行时,由于阻容、放大器等元器件的特性会造成参数的误差,直接影响到整个系统的性能,因此,在数据处理模块中必须具有误差的修正算法。
上位机软件主要由电话语音处理、数据库处理、通讯处理和系统维护等程序模块组成。电话语音处理程序是通过调用底层驱动软件,对每个电话通道进行摘机挂机控制、录制播放语音控制、接收发送DTMF码、检测各种信号音、检测电话通道忙/闲状态以及计算控制量。当播放多位数字(如123,2002)时,可以采用组合放音方式依次连续播放每个数字对应的预先录制好的语音文件。语音处理模块中必须具有等待用户信息命令的超时控制,以免出现永不挂机的现象。程序流程如图4所示。数据库处理模块主要是对数据库进行查询、记录控制日志、生成分析报表等数据管理工作。通讯处理模块使用MSComm对象以9600,N,8,1格式呼叫下位机、向下位机发送和接收信息。
3.2 软件的设计思想
电话语音查询与控制系统基于Windows98或WindowsNT等操作系统,我们可以选用时钟中断轮询方式或多线程(Multithread)方式来进行设计。为了使系统具有较强的并行性和程序的高效性,本系统采用多线程序设计。为了保障数据和控制的安全有效性,本系统采用多线程设计。为了保障数据和控制的安全有效性,在软件设计中对共享变量的访问和设置要采取同步、互斥和临界区等操作。
本文利用Visual C++6.0中MFC类库提供的多线程支持进行设计。MFC区分两种类型的线程:工作者线程(Worker Thread)和用户界面线程(User Interface Thread)。应用程序的主执行线程就是一个用户界面线程,我们可以在此线程中编写系统初始化代码,并调用AfxBeginThread函数来启动工作者线程。
工作者线程在程序中是一个函数,它完成该线程并行的工作。可以在工作者线程中编写电话语音查询
3.3 系统软件访问数据库
本系统利用ADO(ActiveX Data Object)技术,以共享方式对Oracle数据库进行操作。为了提高系统的查询速度,数据库中的表应增加索引。如果系统只进行查询操作,可以指定以只读方式和仅向前方式连接数据库。由于查询语句以不同的查询条件多次执行,故最有效的方法是使用ADO Command对象参数化查询(当然存储过程也是一种方法)。为此,编写程序时需要如下步骤:
(1)创建一个SQL SELECT语句,用问号代表参数的占位符(如Where AdmID=?);
(2)创建一个ADO Command对象的实例;
(3)通过调用Command对象的CreateParameter方法,为第一个参数创建一个ADO Parameter对象(如Adm Cmd - > CreateParameter(L“AdmID”,adBSTR,adParamInput,0));
(4)用Command对象的Append方法将前一步中创建的Parameter对象加入到Command对象的Parameters集合中;
(5)重复步骤(3)和步骤(4),为查询语句创建其它参数;
(6)调用Command对象的GetParameter方法以访问Parameters集合;
(7)用Parameters集合的GetItem方法取回它所包含的第一个ADO Parameter对象;
(8)给Parameter对象的Value属性赋值(如GetItem(“AdmID”) - > =_bstr_t(Channels[Chn]. AdmII));
(9)重复步骤(6)~(8)为其它参数赋值;
(10)调用Command对象的Execute方法执行查询,返回一个打开的Recordset对象;
(11)将Recordset对象的Field值转换为语音文件以备播放。
另外,为了更有效地提高取回多行记录的效率,可以采用Recordset对象的GetRows方法将记录拷贝到一个异构类型的二维安全数组中进行操作。
4 系统的可扩展性
根据本系统的特点,我们可以进一步扩展出一些功能:添加具有可以拨发DTMF码的用于监测的下位机,使用DTMF码接通并传入信息到系统中,这样使其能够具有对那些产生小数据量的设备进行远程监测的能力;当上位机处理到偏离要求的参数时,通过语音卡向电信网拨发系统管理员的电话或手机号码,从而形成自动远程报警的功能;系统能够定时远程提醒值班人员此时该进行哪项工作(如夜间巡视),因此,它能够有效地管理监控中心某些工作的进度。
该系统不仅节省硬件成本,应用灵活广泛,而且研制周期短,可靠性高,已得到用户的一致好评。
参考文献
1 王有绪,许 杰,李拉成.PIC系列单片机接口技术及应用系统设计.北京:北京航空航天大学出版社,2001
2 [美] Jim Maloney著,田雨,刘云,郑轶峰译.Visual C++ 6.0 DCOM开发指南.北京:清华大学出版社,2000
评论
查看更多