时间:2009-05-17 12:50
人气:
作者:admin
语音卡支持两种总线,即安装时要设置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 上一篇:一种实用的压力传感器测量电路
下一篇:一种基于公用电话网的家电遥控系统