介紹了一種電話語音查詢與控制系統,闡述了電話語音卡的硬件和軟件,并給出了利用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
評論
查看更多