【正文】
第 59 頁參考文獻[1]:200303[2]宋寶華. 深入淺出VC++6年3月25日[3] C++[4]黃承安, C++.附 錄(1)英文(原文)Study on the Leakage Current Characteristics of the Salt Contaminated InsulatorsTsongShiann Wu ShihShong YenNational YunLin Electric Power Lab.Institute of Technology Power Research InstituteTaiwan, ROC Taiwan, ROCI . IntroductionIt is well known that the degree of surface contamination of insulators will affect the surface flashover characteristics of insulators when an AC high voltage is applied. Therefore, insulators and bushings used in power line should be frequently washed for keeping them clean. If the frequent washing can be conducted, the method of coating silicone grease for preventing surface contamination of the insulators can be employed. Both of these methods are very effective, but the problem is how to knows the best time for washing or the tost suitable period for recoating silicon grease. This problem needs to know how to judge or estimate when flashover will occur.For estimating the occurrence of flashover, the indications of starting flashover and its progressive status should be understood. The lain purposes of this study are to obtained the indications of different degree of salt contamination through experiments, and to judge and estimate the occurrence of flashover if insulators based on these indication。 指導(dǎo)老師黃新波為我提供了GSM MODEM設(shè)備和舒適的辦公環(huán)境,這是我畢業(yè)設(shè)計得以成功的基本條件,并且對我的設(shè)計如何實現(xiàn)提供了指導(dǎo)性建議,在論文的初稿、撰寫、定稿各個階段都提出了許多修改的建議,在此要特別鳴謝。致 謝 在畢業(yè)設(shè)計的過程中,不斷地遇到棘手的問題,而為最終得以解決而感到興奮,這種感覺伴隨我的畢業(yè)設(shè)計始終。解決這一問題的方法是應(yīng)用C/S模式使本系統(tǒng)作為服務(wù)器端,并添加用戶管理等功能使客戶端能夠通過局域網(wǎng)或internet訪問服務(wù)器端。實踐證明通過GSM通信模塊與電腦的相連可以利用電腦技術(shù)的尖端優(yōu)勢和強大的功能使得通信系統(tǒng)的本身的功能提升不少,在人機對話方面更具方便性和快捷性。}elsem_RecvData+=msg。(m_RecvData)。(%c,10)。//讀取緩沖區(qū)內(nèi)的數(shù)據(jù)CString msg=?!劣跀?shù)據(jù)的接收,我們可以通過讓MS Comm控件響應(yīng)其OnComm事件來完成,通過ClassWizard加入其對事件的響應(yīng)后,通過下面的事件映射,當有字符到達時便會通知 OnComm()函數(shù)去處理,從而實現(xiàn)數(shù)據(jù)的異步接收:……BEGIN_EVENTSINK_MAP(COLECommView, CFormView)//{{AFX_EVENTSINK_MAP(COLECommView)ON_EVENT(COLECommView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)//}}AFX_EVENTSINK_MAPEND_EVENTSINK_MAP()……void COLECommView::OnComm() {VARIANT Input。m_SendData+=str。i++。){(%c,a[i])。while(a[i]!=39。int i=0。HWND hwnd=GetSafeHwnd()。在線程中通過調(diào)用視類中的DoSendProc函數(shù)來完成對數(shù)據(jù)的發(fā)送,正是由于該函數(shù)是被全局的線程所調(diào)用的,我們就不可以使用取編輯框上的數(shù)據(jù)時通常所用的UpdateData()函數(shù)了,取而帶之的是API 函數(shù)GetDlgItemText(),取到輸入的數(shù)據(jù)后通過控件的SetOutput() 方法就把數(shù)據(jù)從串口發(fā)出去了,其中發(fā)送數(shù)據(jù)必須經(jīng)ColeVariant類將其轉(zhuǎn)換為通用的VARIANT型變量。ViewDoSendProc()。在線程中可以用如下兩種方法之中的一種調(diào)用視類的成員函數(shù):((COLECommView*) pParam)DoSendProc()。發(fā)送數(shù)據(jù)的代碼原則上是可以寫到一個成員函數(shù)中被直接調(diào)用的,但這并不是一個良好的編程習慣:我們應(yīng)當把比較耗時的操作,如文件拷貝、打印、端口傳輸?shù)裙ぷ鞣诺揭粋€單獨的線程當中,以避免其在工作時會引起整個進程的阻塞,以提高整個系統(tǒng)對CPU的利用率。一般來說可以將下面的打開端口的代碼寫在OnCreate()、OnInitialUpdate()、InitInstance ()等程序入口函數(shù)中:……if(!()) //檢測是否已經(jīng)打開過端口(TRUE)。為了編程方便起見,也可以在資源視圖中直接對該控件的屬性進行設(shè)置,如無特別要求,對下表所列屬性進行設(shè)置就基本可以滿足編程要求了?! ≡陂_始進行代碼編程前,首先以在工程中插入組件或控件的方式將Active X控件Microsoft Communications Control,version 加入到工程中來,此時將會在工程中添加一個關(guān)于此控件的新類。 X控件實現(xiàn)串口通信 當我們在Windows操作系統(tǒng)下開發(fā)串行通信程序時通常不得不面對許多復(fù)雜的API函數(shù),因為在Windows操作系統(tǒng)下不能直接對設(shè)備端口進行操作,也不能在系統(tǒng)級(Ring 3級別)使用任何DOS或BIOS中斷,如要對端口進行編程則只能以文件的形式來對端口進行操作,這就使開發(fā)人員不得不面對非常煩瑣的API函數(shù)編程。筆者曾經(jīng)在拙作中多次以實例論證計算機領(lǐng)域里許多知識的相通性,這又是一個明證?! ∵@里我們聯(lián)想開來,RTS/CTS模式在許多領(lǐng)域里都出現(xiàn)過?! ×硪环N方法是:數(shù)據(jù)的發(fā)送和接收由硬件控制,進行硬件握手,其連接方法如圖6(最常用DB9連接示意),需要連接的信號除RXD、TXD和GND外,還包括DTR、DSR、RTS和CTS。兩串口互連,連接方法主要有二:一種方法是:數(shù)據(jù)的發(fā)送和接收由軟件控制,不進行硬件握手,其連接方法如圖43,真正需要互相連接的是RXD、TXD和GND;圖43 無硬件握手時兩串口連接軟件握手又稱為XON/XOFF,通常以CTRLS(0x13)和CTRLQ(0x11)兩個字符來實現(xiàn)流控制。RS232C接口(又稱EIA RS232C),1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機終端生產(chǎn)廠家共同制定,全名是數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進制數(shù)據(jù)交換接口技術(shù)標準。不過RS232C顯然已經(jīng)開始被后起之秀USB趕超,因為USB的傳輸速率已經(jīng)遠遠超過了RS232C。本質(zhì)而言,COM是PC為和外界通信所提供的一種串行數(shù)據(jù)傳輸?shù)慕涌?。我們可以通過設(shè)備管理器來查看COM的硬件參數(shù)設(shè)置,如圖41。// 字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串 返回: 目標字符串長度// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} C8329BFD0E01int gsmBytes2String(const unsigned char *pSrc, // pSrc: 源數(shù)據(jù)指針char *pDst, // pDst: 目標字符串指針int nSrcLength // nSrcLength: 源數(shù)據(jù)長度)。// UCS2解碼 返回: 目標字符串長度int gsmDecodeUcs2(const unsigned char *pSrc, //源編碼串指針char *pDst, // pDst: 目標字符串指針int nSrcLength // nSrcLength: 源編碼串長度)。} 編/解碼GSM短消息 這里只給出編解碼函數(shù)的原型,具體請參看GSM標準及上一章?! return FALSE。amp?!?/ 讀應(yīng)答數(shù)據(jù) nLength = ReadComm(ans, 128)。 // 應(yīng)答串 sprintf(cmd, AT+CMGD=%d\r, index)。 // 串口收到的數(shù)據(jù)長度 char cmd[16]。 // 短消息計數(shù)加1 } } return nMsg。 // PDU串解碼 pMsg++。 // 找下一行 ptr += 2。pMsgindex)。 strncmp(ans, +CMS ERROR, 10) != 0) { // 循環(huán)讀取每一條短消息, 以+CMGL:開頭 while((ptr = strstr(ptr, +CMGL:)) != NULL) { ptr += 6。 // 讀應(yīng)答數(shù)據(jù) // 根據(jù)能否找到+CMS ERROR決定成功與否 if(nLength 0 amp。 // 生成命令,用+CMGL可一次性讀出全部短消息 WriteComm(cmd, strlen(cmd))。 ptr = ans。 // 命令串 char ans[1024]。 // 短消息計數(shù)值 char* ptr?! } 其中調(diào)用的gsmReadMessage函數(shù)完成最核心的短信接收功能,它按照第1節(jié)闡述的GSM模塊接收短消息的串口控制流程進行短信的接收:// 參數(shù):pMsg 短消息緩沖區(qū),必須足夠大// 返回:短消息條數(shù)int gsmReadMessage(SM_PARAM* pMsg){ int nLength。ismsNum。//短信條數(shù) smsNum = gsmReadMessage(smParam)。} 點擊接收按鈕會通過gsmReadMessage函數(shù)的調(diào)用獲得所有短消息,最后在列表控件中顯示所有短信:void CSMSControlDlg::OnRecvButton() { // TODO: Add your control notification handler code here SM_PARAM smParam[100]。 strncmp(ans, +CMS ERROR, 10) != 0) { return TRUE。 // 讀應(yīng)答數(shù)據(jù) // 根據(jù)能否找到+CMS ERROR決定成功與否 if (nLength 0 amp。 strncmp(ans, \r\n , 4) == 0) { WriteComm(pdu, strlen(pdu))。 // 讀應(yīng)答數(shù)據(jù) // 根據(jù)能否找到\r\n 決定成功與否 if (nLength == 4 amp。 // 生成命令 WriteComm(cmd, strlen(cmd))。 // 取PDU串中的SMSC信息長度 nSmscLength++。 // 以CtrlZ結(jié)束 gsmString2Bytes(pdu, amp。 // 應(yīng)答串 nPduLength = gsmEncodePdu(pSrc, pdu)。 // 命令串 char pdu[512]。 // SMSC串長度 int nLength。}其中調(diào)用的gsmSendMessage函數(shù)體現(xiàn)了串口通信的核心內(nèi)容,它按照第1節(jié)闡述的GSM模塊發(fā)送短消息的串口控制流程進行短信的發(fā)送:BOOL gsmSendMessage(const SM_PARAM *pSrc // pSrc: 源PDU參數(shù)指針){ int nPduLength。 smParam = CreateSMPARAMStruct(desPhoneNum,smsContent)。 GetDlgItemText(IDC_SMSCONTENT_E