介紹了一種電話語(yǔ)音查詢與
控制系統(tǒng),闡述了電話語(yǔ)音卡的
硬件和軟件,并給出了利用V
C++6.0的多線程技術(shù)和
ADO
參數(shù)化查詢技術(shù)對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)的方法。
關(guān)鍵詞:電話,語(yǔ)音,控制,多線程,ADO
?
1 引言
具有PC機(jī)的監(jiān)測(cè)和控制系統(tǒng),已經(jīng)廣泛應(yīng)用在諸多領(lǐng)域。由于我們只能在監(jiān)控
中心才能夠查詢和控制整個(gè)系統(tǒng)的監(jiān)測(cè)情況,所以,在工作中,特別是在檢修被控制的設(shè)備時(shí),常常需要幾個(gè)人在相距較遠(yuǎn)的監(jiān)控中心和被控設(shè)備之間來(lái)回忙碌,當(dāng)發(fā)現(xiàn)問(wèn)題時(shí)不能盡快采取有效措施予以解決,從而導(dǎo)致不必要的經(jīng)濟(jì)損失。應(yīng)某單位的要求,本文設(shè)計(jì)了交互式電話語(yǔ)音查詢和控制系統(tǒng)。它既能對(duì)該單位所有可訪問(wèn)的數(shù)據(jù)進(jìn)行查詢,又能對(duì)幾個(gè)大型
電機(jī)進(jìn)行重點(diǎn)的溫度監(jiān)測(cè)和遠(yuǎn)程控制,以此優(yōu)化管理,提高工作效率。它還能夠根據(jù)用戶需求擴(kuò)展出一些個(gè)性化功能,是一種新型的具有市場(chǎng)前景的系統(tǒng)。
2 系統(tǒng)硬件設(shè)計(jì)
電話語(yǔ)音查詢和控制系統(tǒng)的硬件部分主要由
上位機(jī)(PC機(jī))、下位機(jī)、執(zhí)行機(jī)構(gòu)、電話語(yǔ)音卡、外線(普通市話線路)和內(nèi)線等組成。系統(tǒng)結(jié)構(gòu)如圖1所示。用戶可以在任何地方使用雙
音頻電話或
手機(jī)等通訊工具撥打監(jiān)控中心的系統(tǒng)電話,振鈴
信號(hào)通過(guò)電話網(wǎng),經(jīng)語(yǔ)音卡接口傳人上位機(jī),系統(tǒng)感知振鈴后接通電話,并播放提示音。當(dāng)用戶按下電話鍵盤后,上位機(jī)將傳送來(lái)的雙音多頻碼DTMF進(jìn)行分析處理后轉(zhuǎn)換為計(jì)算機(jī)命令。若收到的是查詢命令,則對(duì)相應(yīng)的測(cè)控?cái)?shù)據(jù)庫(kù)進(jìn)行查詢,上位機(jī)將查詢后的結(jié)果轉(zhuǎn)換合成為語(yǔ)音
信息,再經(jīng)語(yǔ)音卡接口和電信網(wǎng)播放給用戶收聽(tīng);若收到的是控制命令,則由控制算法計(jì)算出控制量,上位機(jī)通過(guò)通訊將此信息下傳到下位機(jī)中,驅(qū)動(dòng)相應(yīng)的執(zhí)行機(jī)構(gòu),然后上傳控制命令的執(zhí)行情況,上位機(jī)將其轉(zhuǎn)換合成為語(yǔ)音信息播放給用戶,并顯示狀態(tài)信息參數(shù),將控制日志記錄到數(shù)據(jù)庫(kù)中,以便今后的統(tǒng)計(jì)和分析。如果系統(tǒng)
檢測(cè)到掛機(jī)信號(hào)或等待雙音頻信息的時(shí)間過(guò)長(zhǎng),系統(tǒng)將掛斷電話機(jī)。
下位機(jī)在上位機(jī)的非控制狀態(tài)下,不斷地將監(jiān)測(cè)數(shù)據(jù)上傳到上位機(jī),并將有效數(shù)據(jù)記錄到數(shù)據(jù)庫(kù)中,當(dāng)被監(jiān)測(cè)數(shù)據(jù)超出預(yù)定值時(shí)則產(chǎn)生預(yù)警信息。
2.2 電話語(yǔ)音卡簡(jiǎn)介
電話語(yǔ)音卡,即“
電腦與電話語(yǔ)音處理卡”,是C
TI(Compu
ter Telecommun
ication Integration)技術(shù)的
產(chǎn)品。它包含有
模擬電話語(yǔ)音處理卡和數(shù)字中繼
接口語(yǔ)音處理卡。本系統(tǒng)使用的是模擬語(yǔ)音卡。作為公共電話網(wǎng)與電腦的關(guān)鍵接口設(shè)備,它負(fù)責(zé)檢測(cè)和執(zhí)行各種電話信息。國(guó)產(chǎn)電話語(yǔ)音卡的開(kāi)發(fā)在技術(shù)上(除PC
接口技術(shù)外)主要是利用了時(shí)分交換技術(shù),這是從程控
交換機(jī)的思路演化而來(lái)的。目前,時(shí)分交換、語(yǔ)音壓縮、專用或通用
DSP(Digital Signal Processing)技術(shù)及PC接口等方面的技術(shù)已很成熟。每塊卡具有相互獨(dú)立的多個(gè)通道,根據(jù)各個(gè)通道的不同需求,可選用不同的功能模塊。語(yǔ)音卡一般具有以下幾種主要的模塊:接口、放音、錄音、搭線、傳真、聲控錄音等。接口模塊分為用戶模塊(內(nèi)線模塊)和中繼模塊(外線模塊)兩種。用戶模塊可以直接驅(qū)動(dòng)電話,將電話連接到此模塊上,摘機(jī)即可工作。中繼模塊連接電信網(wǎng)的電話中繼線或小型程控交換機(jī)的用戶線,相當(dāng)于一部電話機(jī)。
?

語(yǔ)音卡支持兩種總線,即安裝時(shí)要設(shè)置I/O與IRQ的ISA(Industry Standard Architecture)和能即插即用的PCI(Peripheral Component Interconnect)。
電話語(yǔ)音卡生產(chǎn)廠家隨卡提供的軟件包括底層驅(qū)動(dòng)程序(動(dòng)態(tài)鏈接庫(kù)DLL)和二次開(kāi)發(fā)接口程序。每個(gè)通道都可以由軟件(如VC++、VB、Delphi、C/C++、VFp等)
編程完成以下基本功能:
·自動(dòng)檢測(cè)外線振鈴信號(hào)和內(nèi)線的摘掛機(jī)動(dòng)作;
·控制外線的摘掛機(jī),內(nèi)線的饋電或鈴流;
·將數(shù)字化電腦語(yǔ)音文件播放到電話線上;
·將電話語(yǔ)音錄制成數(shù)字化電腦語(yǔ)音文件;
·接收用戶的電話機(jī)按鍵碼,即雙音多頻碼;
·檢測(cè)電話線路返回的各種信號(hào)音狀態(tài),如撥號(hào)音、忙音、回鈴音等;
·電話卡上任意兩通道可連接相互通話。當(dāng)卡上同時(shí)配有內(nèi)外線時(shí),內(nèi)外線之間也可連接通話;
·軟件可調(diào)語(yǔ)音壓縮比。
2.3 下位機(jī)的設(shè)計(jì)
通過(guò)比較,本文選用
PIC16C57
單片機(jī)進(jìn)行設(shè)計(jì)。它是采用精簡(jiǎn)指令集
RISC,全靜態(tài)CMOS工藝的8位機(jī);它性價(jià)比高,有較強(qiáng)的帶負(fù)載能力;具有20個(gè)I/O口,可分別作為監(jiān)測(cè)口和控制口,每個(gè)I/O口最大拉
電流為20mA,最大灌電流為25mA,可直接驅(qū)動(dòng)
LED。
溫度傳感器采用AD590,測(cè)溫范圍為-55℃~150℃,它的輸出電流公式為
??????? Iout=CT×(273.15+t)
式中,CT=1μA/K是標(biāo)稱溫度系數(shù);t表示攝氏度。其電流再經(jīng)
運(yùn)算放大器LM324放大后輸出。系統(tǒng)采用MAX232電路通過(guò)
RS232C接口與上位機(jī)串行
通信。執(zhí)行機(jī)構(gòu)的
驅(qū)動(dòng)電路由MOC3081和雙向
晶閘管等器件組成。MOC3081的輸入控制電流15mA,過(guò)零檢測(cè)電壓值為20V,輸出額定電壓是600V,最大重復(fù)浪涌電流為1A,輸出輸入隔離電壓大于7500V。驅(qū)動(dòng)電路的觸發(fā)部分如圖2所示。
?
?

?
2.4 電話通信線路的改善
電話通信線路的質(zhì)量是系統(tǒng)可靠工作的重要保障之一。電話機(jī)的傳輸頻帶為300Hz~3400Hz。若電話中有干擾聲,則首先檢查電話線是否遠(yuǎn)離干擾源。如果電話線過(guò)于陳舊,線里有銹蝕現(xiàn)象,電話線絕緣性不良或電話線芯接觸到其它導(dǎo)體(如鋁合金門窗等)上都會(huì)造成其
電氣性能的下降、傳輸誤碼率的上升和嚴(yán)重的交流或廣播等噪聲。應(yīng)將其更換成新線,并將接線處連接好。若此后電話中仍有干擾噪聲,則可在電話線接入電話和系統(tǒng)之前,接上一個(gè)簡(jiǎn)易的抗干擾濾波電路(如圖3),元件參數(shù)可由公式
取得,最終經(jīng)實(shí)驗(yàn)確定。式中f是需要過(guò)濾的干擾頻率,XC是容抗,XL是感抗;電路中的地線一定要可靠,否則電路可能無(wú)效,甚至適得其反。
?
?

?
3 系統(tǒng)軟件設(shè)計(jì)
3.1 軟件的組成
本系統(tǒng)的下位機(jī)程序主要包含啟動(dòng)自檢模塊、AD轉(zhuǎn)換、數(shù)據(jù)處理模塊、通訊模塊、輸入輸出模塊等。為了解決程序受干擾后跳飛的問(wèn)題,在每個(gè)存儲(chǔ)器頁(yè)面最后放置一條SLEEP指令,在小于18ms的延時(shí)等待程序中不使用清
看門狗指令,在大于18ms的延時(shí)等待程序中必須使用CLRWDT指令。當(dāng)系統(tǒng)運(yùn)行時(shí),由于阻容、
放大器等
元器件的特性會(huì)造成參數(shù)的誤差,直接影響到整個(gè)系統(tǒng)的性能,因此,在數(shù)據(jù)處理模塊中必須具有誤差的修正
算法。
上位機(jī)軟件主要由電話語(yǔ)音處理、數(shù)據(jù)庫(kù)處理、通訊處理和系統(tǒng)維護(hù)等程序模塊組成。電話語(yǔ)音處理程序是通過(guò)調(diào)用底層驅(qū)動(dòng)軟件,對(duì)每個(gè)電話通道進(jìn)行摘機(jī)掛機(jī)控制、錄制播放語(yǔ)音控制、接收發(fā)送DTMF碼、檢測(cè)各種信號(hào)音、檢測(cè)電話通道忙/閑狀態(tài)以及計(jì)算控制量。當(dāng)播放多位數(shù)字(如123,2002)時(shí),可以采用組合放音方式依次連續(xù)播放每個(gè)數(shù)字對(duì)應(yīng)的預(yù)先錄制好的語(yǔ)音文件。語(yǔ)音處理模塊中必須具有等待用戶信息命令的超時(shí)控制,以免出現(xiàn)永不掛機(jī)的現(xiàn)象。程序流程如圖4所示。數(shù)據(jù)庫(kù)處理模塊主要是對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢、記錄控制日志、生成分析報(bào)表等數(shù)據(jù)管理工作。通訊處理模塊使用MSComm對(duì)象以9600,N,8,1格式呼叫下位機(jī)、向下位機(jī)發(fā)送和接收信息。
3.2 軟件的設(shè)計(jì)思想
電話語(yǔ)音查詢與控制系統(tǒng)基于Windows98或WindowsNT等
操作系統(tǒng),我們可以選用
時(shí)鐘中斷輪詢方式或多線程(Multithread)方式來(lái)進(jìn)行設(shè)計(jì)。為了使系統(tǒng)具有較強(qiáng)的并行性和程序的高效性,本系統(tǒng)采用多線程序設(shè)計(jì)。為了保障數(shù)據(jù)和控制的安全有效性,本系統(tǒng)采用多線程設(shè)計(jì)。為了保障數(shù)據(jù)和控制的安全有效性,在軟件設(shè)計(jì)中對(duì)共享變量的訪問(wèn)和設(shè)置要采取同步、互斥和臨界區(qū)等操作。
本文利用Visual C++6.0中MFC類庫(kù)提供的多線程支持進(jìn)行設(shè)計(jì)。MFC區(qū)分兩種類型的線程:工作者線程(W
orker Thread)和用戶界面線程(User Interface Thread)。應(yīng)用程序的主執(zhí)行線程就是一個(gè)用戶界面線程,我們可以在此線程中編寫系統(tǒng)初始化代碼,并調(diào)用AfxBeginThread函數(shù)來(lái)啟動(dòng)工作者線程。
工作者線程在程序中是一個(gè)函數(shù),它完成該線程并行的工作。可以在工作者線程中編寫電話語(yǔ)音查詢
3.3 系統(tǒng)軟件訪問(wèn)數(shù)據(jù)庫(kù)
本系統(tǒng)利用ADO(
ActiveX Data Object)技術(shù),以共享方式對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行操作。為了提高系統(tǒng)的查詢速度,數(shù)據(jù)庫(kù)中的表應(yīng)增加
索引。如果系統(tǒng)只進(jìn)行查詢操作,可以指定以只讀方式和僅向前方式連接數(shù)據(jù)庫(kù)。由于查詢語(yǔ)句以不同的查詢條件多次執(zhí)行,故最有效的方法是使用ADO Command對(duì)象參數(shù)化查詢(當(dāng)然存儲(chǔ)過(guò)程也是一種方法)。為此,編寫程序時(shí)需要如下步驟:
(1)創(chuàng)建一個(gè)SQL SELECT語(yǔ)句,用問(wèn)號(hào)代表參數(shù)的占位符(如Where AdmID=?);
(2)創(chuàng)建一個(gè)ADO Command對(duì)象的實(shí)例;
(3)通過(guò)調(diào)用Command對(duì)象的CreatePa
rameter方法,為第一個(gè)參數(shù)創(chuàng)建一個(gè)ADO Parameter對(duì)象(如Adm Cmd - > CreateParameter(L“AdmID”,adBSTR,adParamInput,0));
(4)用Command對(duì)象的Append方法將前一步中創(chuàng)建的Parameter對(duì)象加入到Command對(duì)象的Paramete
rs集合中;
(5)重復(fù)步驟(3)和步驟(4),為查詢語(yǔ)句創(chuàng)建其它參數(shù);
(6)調(diào)用Command對(duì)象的GetParameter方法以訪問(wèn)Parameters集合;
(7)用Parameters集合的GetItem方法取回它所包含的第一個(gè)ADO Parameter對(duì)象;
(8)給Parameter對(duì)象的Value屬性賦值(如GetItem(“AdmID”) - > =_bstr_t(Channels[Chn]. AdmII));
(9)重復(fù)步驟(6)~(8)為其它參數(shù)賦值;
(10)調(diào)用Command對(duì)象的Execute方法執(zhí)行查詢,返回一個(gè)打開(kāi)的Recordset對(duì)象;
(11)將Recordset對(duì)象的Field值轉(zhuǎn)換為語(yǔ)音文件以備播放。
另外,為了更有效地提高取回多行記錄的效率,可以采用Recordset對(duì)象的GetRows方法將記錄拷貝到一個(gè)異構(gòu)類型的二維安全數(shù)組中進(jìn)行操作。
4 系統(tǒng)的可擴(kuò)展性
根據(jù)本系統(tǒng)的特點(diǎn),我們可以進(jìn)一步擴(kuò)展出一些功能:添加具有可以撥發(fā)DTMF碼的用于監(jiān)測(cè)的下位機(jī),使用DTMF碼接通并傳入信息到系統(tǒng)中,這樣使其能夠具有對(duì)那些產(chǎn)生小數(shù)據(jù)量的設(shè)備進(jìn)行遠(yuǎn)程監(jiān)測(cè)的能力;當(dāng)上位機(jī)處理到偏離要求的參數(shù)時(shí),通過(guò)語(yǔ)音卡向電信網(wǎng)撥發(fā)系統(tǒng)管理員的電話或手機(jī)號(hào)碼,從而形成自動(dòng)遠(yuǎn)程報(bào)警的功能;系統(tǒng)能夠定時(shí)遠(yuǎn)程提醒值班人員此時(shí)該進(jìn)行哪項(xiàng)工作(如夜間巡視),因此,它能夠有效地管理監(jiān)控中心某些工作的進(jìn)度。
該系統(tǒng)不僅節(jié)省硬件成本,應(yīng)用靈活廣泛,而且研制周期短,可靠性高,已得到用戶的一致好評(píng)。
?
參考文獻(xiàn)
?
1 王有緒,許 杰,李拉成.PIC系列單片機(jī)接口技術(shù)及應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社,2001
2 [美] Jim Maloney著,田雨,劉云,鄭軼峰譯.Visual C++ 6.0
DCOM開(kāi)發(fā)指南.北京:清華大學(xué)出版社,2000
評(píng)論