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

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

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

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