国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網(wǎng)絡通信 > 正文

程控交換機自動記費系統(tǒng)的開發(fā)及應用

2019-11-03 10:11:05
字體:
供稿:網(wǎng)友
程控交換機自動記費系統(tǒng)的開發(fā)及應用 摘要:介紹程控交換機與計算機通信的實現(xiàn)方法及其在實踐中的應用,簡要說明Windows95的通信原理,并解釋Windows95通信及相關(guān)API函數(shù)在程控交換機自動記費軟件編程中的應用 關(guān)鍵詞:通信;原理;API函數(shù);編程0 前言 目前,我國的電力通信隨著電力事業(yè)的發(fā)展而在迅速發(fā)展,許多電力企業(yè)均購置了光進的程控交換機。通信手段的現(xiàn)代化不僅促進了電力事業(yè)的發(fā)展,而且還為電力企業(yè)的職工安裝私人電話提供了便利條件。為此,程控交換機自動記費系統(tǒng)的開發(fā)與應用將顯得越來越重要。同時,該系統(tǒng)的開發(fā)與應用也必將進一步促進和提高對程控交換機的管理水平。 程控交換機自動記費系統(tǒng)的開發(fā)是建立在串行通信的基礎(chǔ)上的,而串行通信是計算機與計算機、計算機與程控交換機之間有效的通信手段。由于它高效可靠、價格便宜并且遵循統(tǒng)一的標準,因而得到廠廣泛的應用。隨著計算機技術(shù)的飛速發(fā)展,操作系統(tǒng)也日益復雜和龐大,同時能提供給程序員的編程手段也越來越先進和復雜。本又試從理論和應用兩個方面探討基于32位操作系統(tǒng)Windows95&NT的串行通信編程方法。1編程系統(tǒng) Windows應用程序是一一個以事件驅(qū)動、信息傳遞以Windows對象為組織單位的系統(tǒng),在C++中可看作是一個基于對類實例(對象)組織設(shè)計編程的系統(tǒng)。本系統(tǒng)采用BC++5.02版本提供owl5.0進行編程。owl5.0是Borland公司在原來owl2.5版本的基礎(chǔ)經(jīng)過進一步擴充,并重新加以包裝集成的一套軟件應用框架。 owl是應用程序框架,主要有如下優(yōu)點: (1)程序碼少。由于Obiect Windows的各個類是經(jīng)過專家將Windows API加以組合包裝,而具有OOP(面向?qū)ο蟪绦蛟O(shè)計)的特性,更便于應用繼承的特性,使其程序碼減少。 (2)運行速度快。程序碼少,相對地也就執(zhí)行快。 (3)標準的應用框架。在Object Windows中,各種類的分類及從屬關(guān)系,不是隨意拼湊而成的,而是按一定的標準加以包裝的。 (4)提供了更豐富及更有效率的功能。其功能包括工具條、消息欄、狀態(tài)欄、工具籍及更有效的MDI等。 (5)具有C++的Windows API特性。2 應用程序的構(gòu)成 Windows應用程序的任務就是構(gòu)造所需的窗口井且提供給Windows。進行管理,Windows又為每個窗口調(diào)用其窗口函數(shù)、處理輸入輸出以從其它事件,而這一切都是通過消息來驅(qū)動的結(jié)果,因而程序設(shè)計的主體是在于消息的處理過程的設(shè)計。 在Windows的環(huán)境下,應用程序的組織實際就是對窗口及其窗口函數(shù)的組織,主要實現(xiàn)構(gòu)造相應窗口及編制相應窗口函數(shù),在OWL中這些都是通過相應的類來實現(xiàn)的。 本系統(tǒng)有三個主要的類:一是JFApp;二是JFMainWindows;三是JFDecwindows。這三個類分別繼承了基類Tapplication,TWindow及TDecoreted Window。這三個類構(gòu)成了本系統(tǒng)的基本應用框架。通常,采用TFrameWindows類作為框架窗口的某類,這里我們采用裝飾窗口類TDecoreted Windows作為框架窗口的基類,是為了在框架窗口中構(gòu)造工具條、狀態(tài)條及信息條??蛻舸翱贘FWindows繼承Windows類,該窗口包含在框架窗口內(nèi),隨框架窗口的變化而變化,窗口函數(shù)的設(shè)計及構(gòu)造在客戶窗口JFWindwos內(nèi)加以實現(xiàn),也可在TApp應用中買現(xiàn)。由于本系統(tǒng)采用單文檔界面,所以,關(guān)閉客戶窗口在客觀上也就關(guān)閉了該系統(tǒng)。 在JFApp類中,定義一個指向TDecoreted Windows類的PRotected類型的指針變量decwndw,主要在建立主窗口時使用。還有一個public類型的成員函數(shù)為InitMainWindow(),主要功能足建立一個主窗口,其標題欄文字為“MD4110程控交換機自動記費系統(tǒng)”,其實InitMain Window()是TApplication類下的prottected成員函數(shù),在此我們將該函數(shù)進行重新定義,利用SetMainWindow()建立一個主窗口,SetMainWindow 函數(shù)必須接受一指向TDecoratedWindow的指針變量,它是屬于TAp-plication下的Public成員函數(shù)。 OwlMain()函數(shù)為OWL的主程序,也是程序的入口點此函數(shù)執(zhí)行TApplication類下的run()函數(shù),run()函數(shù)的主要功能如下: (1)首先調(diào)用TApplication下的InitApplication()函數(shù),替第一個實例做初始化工作。 (2)繼而調(diào)用 InitInstance()函數(shù),執(zhí)行所有實例的初始化工作。 (3)如果(1)(2)項的初始化工作皆成功地完成,run()函數(shù)繼而調(diào)用消恩循環(huán)函數(shù)MessageLoop(),并執(zhí)行此應用程序。 其中第(2)項Initlnstance()函數(shù)又會調(diào)用Init-Main Window()函數(shù)(此函數(shù)旨在建立 TDecoratedWindow對象),然后利用TWindow::Create()及TWi-ndow::Show()來建立和顯示主窗口,假使主窗口無法建立,則彈出TXInvalidate Window()函數(shù)作異常處理。當消息循環(huán)有異常處理時,run()函數(shù)則會擷取此異常處理,其執(zhí)行過程如圖1所示。3 串口通信的實現(xiàn) 在主控程序的設(shè)計中,關(guān)鍵問題是如何高效地實現(xiàn)交換機與計算機之間通信聯(lián)系,因此通信函數(shù)的編制及實現(xiàn)是該系統(tǒng)能正常運行的關(guān)鍵。 通常,在DOS系統(tǒng)下的串行通信程序編制往往要對UART(電行通信芯片)進行操作,通過調(diào)用INT14 BIOS中斷的方式編程。而Windows系統(tǒng)是一個具有設(shè)備無關(guān)性的操作系統(tǒng),它不鼓勵對系統(tǒng)硬件的直接操作,而是由系統(tǒng)自動進行處理。在Window3.1以后,系統(tǒng)提供戶中斷方式驅(qū)動的通信設(shè)備驅(qū)動程序Comm.drv和一組專用API通信函數(shù),使我們可以高效直觀地完成串行通信任務。3.1硬件配置 要實現(xiàn)交換機與計算機之間的串行通信,就必須首先制定出一個硬件的通信協(xié)議,通常是指何種連接方式。根據(jù)RS—232C的標準,RS~232上的線2被稱為數(shù)據(jù)發(fā)送端(TXD),線3為數(shù)據(jù)接收端(RXD),為實現(xiàn)數(shù)據(jù)的正確傳送,終端設(shè)備連在線2上的輸出設(shè)備稱為DTE設(shè)備,而調(diào)制解調(diào)器則必須接在線2接收數(shù)據(jù),這樣的設(shè)備被稱為DCE(DateCommunic-ation Equipmnet)。通常串口之間的連接方式采用下面兩種,即調(diào)制解調(diào)器連接和零調(diào)制解調(diào)器的連接。調(diào)制解調(diào)器連接通常在兩臺遠程PC機之間和遠程終端與市機之間進行通信時使用;而零調(diào)制解調(diào)器的連接上要在15m以內(nèi)(RS-232標準)的采用交叉電纜的通信連接方式時,用于兩個DTE設(shè)備或兩個DCE設(shè)備的直接連接。本系統(tǒng)采用交義電纜的通信連接方式,計算機的端口數(shù)據(jù)線連接均采用標準的DTE設(shè)備信號方式,其連接如圖2所示。3.2 Windows消息驅(qū)動機制 由于Windows系統(tǒng)是一個基于消息驅(qū)動的操作系統(tǒng),因此在Windows環(huán)境下進行串口編程之前,有必要對設(shè)備消息處理作一個分析。Windows許多消息均來源于設(shè)備。來自設(shè)備的消息首先由Windows的設(shè)備驅(qū)動程序進行處理,這些設(shè)備驅(qū)動程序?qū)⒂布氖录D(zhuǎn)換成消息,并將轉(zhuǎn)換的消息放入Windows系統(tǒng)隊列中,而Windows有兩種類型的消息隊列:即系統(tǒng)隊列和應用程序隊列。系統(tǒng)隊列只有一個,硬件驅(qū)動程序把轉(zhuǎn)換的消息加入到系統(tǒng)隊列,每個運行的Windows程序又有唯一的應用程序隊列,W-indows把系統(tǒng)隊列中的消息傳送給適當?shù)膽贸绦蜿犃泻螅琖indows應用程序的消息環(huán)從應用程序隊列中檢索出相應的輸人消息,并將其發(fā)送到適當?shù)拇翱诨虼翱诤瘮?shù)進行處理。3.3Windows通信函數(shù) 在Windows 3.1中串行通信有一條專用的消息WM-COMMNOTIFY,當有一個串口事件(接收或發(fā)送字符)發(fā)生時,通信設(shè)備驅(qū)動程序Comm.drv將WM-COMMNOTIFY消息發(fā)送給Windows,該消息所攜帶的參數(shù)指出了串口事件的屬性(給出相應的串口設(shè)備號),同時標記目前的通信狀態(tài)。Windows將這個消息放到其對應的應用程序隊列中,主控程序的入口函數(shù)OwlMain)得到這個信息后,經(jīng)過一個消息環(huán)的處理,發(fā)送給相應的窗口函數(shù)。在Windows 95&NT中,WM-COMMNOTIFY消息已被取消,取代的是操作系統(tǒng)為每個通信設(shè)備開辟的可由用戶自定義大小的讀/寫緩沖區(qū),數(shù)據(jù)進、出通信口均由操作系統(tǒng)完成,應用程序只要讀/寫緩沖區(qū)就可以了,這樣通信數(shù)據(jù)丟失的可能性就大大降低。在Windows95&NT中,對通信口的操作就像對文件的操作一樣,串行通信的函數(shù)已作了改進及標準化,其串行設(shè)備的打開和關(guān)閉與文件的打開與關(guān)閉使用相同的函數(shù),同時,應用程序亦可以通過創(chuàng)建線程來監(jiān)視各通信設(shè)備的狀態(tài)。 現(xiàn)將常用Windows的32位通信函數(shù)介紹如下,供參考: (1)打開通信端口函數(shù): HANDLE CrearFile(szDevice,fdwaccess,fdwshareMode,lpsa,fdwCreate,fdwAttrsAndFlags,hTemplateFile): SZDevice為通信串口的邏輯名,如COM1或COM2。 fdWAccess指定了端口的訪問的類型,如讀、寫或讀寫等,本系統(tǒng)可設(shè)fdwAccess =GENERIC.READ。 fdwShareMode指端口的共享屬性,文件可供許多應用程序共享,但通信口不行,必須置0。 Insa引用安全性屬性結(jié)構(gòu),該參數(shù)置為NULI,將為通信口分配缺省的安全性屬性。 fdwCreate指定如果CreateFile正在被已有的文件調(diào)用時應該怎樣做。由于串口總是存在的,fdwCreate就必須置為 OPEN EXISSING。告訴Windows不要創(chuàng)建新端口,而是打開已存在的端口。 fdwAttsAndFlags描述端口的各種屬性。對于串口唯一有意義的設(shè)置是FILE FLAG OVERLAPPED。 TemplateFile是指向模板文件的句柄,當端口處于打開狀態(tài)時,它必須置為NULL。 (2)關(guān)閉通信端口函數(shù): CloseHandle(hComm), hComm是CreateFile返回的句柄。 (3)配置端口數(shù)函數(shù) ROOL GetcommState(hComm,&dcb); ROOL SetCommState(hCom.m,&dcb); 這兩個函數(shù)完成對打開端口參數(shù)的獲得和配置,dcb是設(shè)備控制塊DCB的結(jié)構(gòu),包含各種選定的參數(shù),用戶可以對其進行合理的配置。設(shè)置端口參數(shù)時,通常是先打開端口,用GetCommState()函數(shù)讀取端口參數(shù),在dcb內(nèi)對參數(shù)做合理的必要的修改,并通過調(diào)用SetCommstate()函數(shù)來完成這種改變。此外還可以用一個函數(shù)Bui-ldCommDCB()來設(shè)定一個帶有有限個參數(shù)的DCB,它改變的參數(shù)與MSDOS中的mode命令的參數(shù)相同。 (4)串行端口的讀操作函數(shù) BOOL ReadFile(hComm,inBuffer,nBytes,&nBytesRead,&overlapped): hComm為打開串行設(shè)備的句柄; inBuffer是數(shù)據(jù)將要返回的緩沖區(qū),該緩沖區(qū)要足夠大; nBytes是要讀取的字節(jié)數(shù); nBytesRead是實際要讀取的字節(jié)數(shù); overlapped是同步或異步方式。 (5)串行端口的寫操作函數(shù) BOOL WriteFile(hComm,outBuffer,nBytes,&nTOWrite,&overlapped): hComm為打開串行設(shè)備的句柄; outBuffer是數(shù)據(jù)將要寫入的緩沖區(qū),要足夠大。 nBytes是要寫的字節(jié)數(shù); nToWrte是實際要寫的字節(jié)數(shù); overlapped是同步或異步方式。 (6)事件屏蔽設(shè)備函數(shù) BOOL,setCommMask(hComm,dwMask): hComm為打開單行設(shè)備的句柄; dwMask是要等待的一個或多個事件的掩碼,表示你要使Windows系統(tǒng)通知你哪類事件。幾個常用的事件為:EV-RXCHAR表示接收到一個字符;EV-RXFLAG表示在DCB(設(shè)備控制塊)中定義為EvtChar的字符到達;EV-TXEMPTY表示所有發(fā)送隊列中的字符已發(fā)送,本系統(tǒng)采用EV-RXFLAG作為標記。 (7)等待事件出現(xiàn)函數(shù) BOOL WaitCommEvent(hComm,&dwEvent,&overlapped): hComm為打開串行設(shè)備的句柄; dwEvent為函數(shù)返回的事件; overlapped是同步或異步方式。 (8)清除事件屏蔽函數(shù) BOOL,CLearCommError(hComm,&dwErrorMask,&comstat); 該函數(shù)有雙重目的,正如其名字所表示的那樣,一是清除錯誤條件,二是確定端口狀態(tài),我們感興趣的是后者。 hComm為打開串行設(shè)備的句柄; dwErrorMask為該函數(shù)可能返回的錯誤掩碼; comstat指向一個COMSTAT結(jié)構(gòu),此結(jié)構(gòu)保存有關(guān)端口狀態(tài)的有用信息。 其過程是函數(shù)從hComm指定的通信設(shè)備中清除錯誤,并獲得事件掩碼,獲得事件掩碼后清除掩碼。 (9)清除函數(shù) BOOL PurgeComm(hComm,action): hComm為打開串行設(shè)備的句柄; action為該函數(shù)執(zhí)行的動作,在本系統(tǒng)中置為PURGE-RXCLEAR。4 軟件編制 記費系統(tǒng)的關(guān)鍵問題在于通信程序是如何處理的,一般來說,有兩種方式可采用,一是“查詢”方式,二是“事件”方式。由于活單輸出的隨機性,本系統(tǒng)采用后者。即創(chuàng)建一個線程函數(shù)以監(jiān)視通信設(shè)備的狀態(tài),當通信設(shè)備處于信號狀態(tài)或超時時,就會給應用程序發(fā)出消息,應用程度可利用該消息讀取通信設(shè)備數(shù)據(jù)。使用線程函數(shù)對通信設(shè)備監(jiān)視的優(yōu)點是5應用實例: 本實例以MD110程控交換機為例。MD110程控交換機具有呼叫信息記錄的功能,稱為CIL/SMDR??梢杂涗浫魏晤愋偷暮艚行畔?。每次呼叫的內(nèi) 容以記錄的形式存儲在文件中,通過呼叫信息串行接1收板SIU傳送到外部設(shè)備(如打印機、計算機等)進行處理,對于所要記錄的內(nèi)容和輸出格式可通過維護終端進行靈活的編程選擇。 (1)呼叫記錄信息內(nèi)容 在每個呼叫信息記錄中均包含如下內(nèi)容: 1)日期; 2)時間;; 3)時長; 4)主、被叫號碼; 5)呼叫類型; 6)有權(quán)碼、由號碼等。 (2)呼叫信息記錄的準則 即定義哪此呼叫應輸出對外部設(shè)備上,可在一個或多個文件上定義一個或多個呼叫準則,該呼叫輸出文件可連接到一個成多個外部設(shè)備上??梢远?義的呼叫內(nèi)容是: 1)輸出所有呼叫; 2)按主叫號碼輸出呼叫作息; 3)按被叫號碼輸出呼叫信息; 4)輸出呼叫時長超過一個規(guī)定時間的呼叫;等等。 本實例采用主叫號碼輸出信息。 3)呼叫信息記錄的格式 MD110程控交換機有幾種輸出格式,可通過人機命令選擇其中一種。輸出格式表明呼叫數(shù)據(jù)應采用那種格式輸出,每個輸出格式呵被分配給一個成多個輸出文件。 1)FP15格式; 2)MDFP15格式; 3)ASB501標準格式; 4)ASBU MDFP15格式。 其中 1),2),4)格式是經(jīng)過簡化后的格式,輸出的信息流較短。 本實例采用3)的標準格式輸出。具體內(nèi)容可參看MD110交換機的隨機技術(shù)手冊。 (4)呼叫信息記錄串行接口板SIU的電氣特性。 SIU板的電氣特性符合CCITT的V.24/.28標準,除電氣特性外,還可通過人機命令設(shè)置如下接口參數(shù): 1)傳輸速率; 2)字長; 3)停止位 4)校驗位等。 本系統(tǒng)的接口參數(shù)必須與上述參數(shù)相符合才能正確地完成呼叫信息的接收和處理。 (5)軟件接口的編程 確立傳輸協(xié)議,傳輸數(shù)據(jù)采用ASCII模式,傳輸?shù)臄?shù)據(jù)包是以換行符LF為結(jié)尾的字符流,且長度為一固定值MAXLENGTH。程控交換機是MD110,數(shù)據(jù)接收為方是AST adva-ntage!2000計算機。通信參數(shù)為:波特率9600,數(shù)據(jù)位8位,停止位1位,奇偶無效驗,本實例均沒有考慮有關(guān)函數(shù)的錯誤信息。本實例少作修改即話用于HARRIS 20-20等程控交換機的記費需要、我局采用本系統(tǒng)已安全穩(wěn)定運行兩年多。 #define EVENTCHAR 0X0a unisgned long far_stdcall Comm Watch(); HANDLE handle_com,com_thread; HWND post_hwnd; static char aPacket[MAXLENGHT}; OVERLAPPED over; DCB dcb; COMSTAT comstat; DWord dw ThreadID; int com_mask.com_buff,com_state; bool fReadStat; void ProcessApacket(void);//數(shù)據(jù)包處理函數(shù) void JFMain Window::SetupWindow() { TWindow::Setup Window(); handle_com=CreateFile("COM2",GENRIC_READ,0,NULL,OPEN_EXISTING; FILE_FLAG_OVERLAPPED,NULL); //打開串口: com_state=GetCommState(handle_com, &dcb);//獲得當前串口參數(shù); dcb, BaudRate=9600;dcb.ByteSize=8;dcb.Parity=NOPARITY;dcb.StopBits=1;dcb.EvtChat=EVENTCHAR;com_state=SetCommState(hadle_com, &dcb);//修改后的串口參數(shù)再設(shè)置;com_buff=SetuppComm(handle_com,8092, NULL);//設(shè)置接收緩沖區(qū)的大?。籭f(!SetCommMask(handle_com,EVRXFLAG))//設(shè)置事件屏蔽字;rerurn;com_thread=Create Thread(NULL,0. (LPTHREAD_START_ROUTINE) CommWatch, NULL,0,&dwThreadID);//創(chuàng)建線程;post_hwnd=HWindow;{unsigned long far_stdcall CommWatch(){DWORD dwLen,number;DWORD dwEvtMask;if(!SetCommMask(hadle_cim,EV RXFLAG))returm false;while(ture){dwEvtMask-0;if(WatiCommEvent(handle_com,&dwEvtMask,&over)//等待EVRXFLAG事件發(fā)生;{ClearCommError(handle_com,&errorflag,&comstat),//清除端口錯誤,并確定端口狀態(tài);dwLen-comstat,cbInQue;if((dwEvtMask&EV-RXFLAG-ev-RXFLAG&&dwLEN){if(!ReadFile(handle_com,aPacket,dwLen,&number.&over))//從緩沖區(qū)中讀取數(shù)據(jù);GetLastError();//檢查錯誤;else ProcessApacket();//處理數(shù)據(jù)包aPacket;}}else GetLastError();}PurgeComm(handle_com,PURGE-RXCLEAR);//程序結(jié)束前刷新輸入緩沖區(qū);}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 陕西省| 军事| 广南县| 沙田区| 铁岭县| 平顶山市| 剑川县| 石泉县| 绵竹市| 太仆寺旗| 玛多县| 双江| 定兴县| 凌海市| 兰西县| 龙南县| 德州市| 磐安县| 邯郸县| 泾川县| 台山市| 克东县| 崇信县| 钟山县| 吉安县| 霍州市| 皮山县| 于都县| 瑞金市| 保靖县| 塘沽区| 大厂| 旬阳县| 比如县| 灯塔市| 固始县| 如东县| 德阳市| 荔波县| 常州市| 武胜县|