




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、成都理工大學(xué)畢業(yè)設(shè)計(jì)(論文)接入網(wǎng)絡(luò)的輻射測(cè)量數(shù)據(jù)傳輸與譜處理作者姓名:舒為 專業(yè)班級(jí):201006090104指導(dǎo)老師:周建斌摘要隨著計(jì)算機(jī)通信的發(fā)展,我們身邊的很多事物開始接入互聯(lián)網(wǎng)。在這樣的背景下,我嘗試將輻射測(cè)量?jī)x器接入網(wǎng)絡(luò)。本文設(shè)計(jì)目的是:將本地計(jì)算機(jī)控制下的儀器所測(cè)量的數(shù)據(jù)傳送給局域網(wǎng)中的其他計(jì)算機(jī)。本文設(shè)計(jì)中用到的工具有Visual C+ 6.0、Visual Studio 2012;開發(fā)環(huán)境為MFC和Win32;使用到的程序設(shè)計(jì)語(yǔ)言是C/C+;操作系統(tǒng)平臺(tái)基于64位Windows 7旗艦版;通信協(xié)議選擇串口協(xié)議、TCP/IP協(xié)議;傳送的譜數(shù)據(jù)為由高純鍺探測(cè)器產(chǎn)生的4096道Ga
2、mma譜;譜數(shù)據(jù)處理:光滑、尋峰、尋邊界、計(jì)算峰面積。關(guān)鍵詞:C/C+;TCP/IP通信;Gamma譜;數(shù)據(jù)處理Abstract:With the development of computer communication, things around us began to access the global internet. Under such background, I try to make the instruments of radiation measuring access internet. This article is designed to send data fr
3、om local computer to another computer in Local area network. Tools used in this article include Visual C+ 6.0、Visual Studio 2012; Programming language is C/C+; Platform is based on Windows 7 Ultimate 64bit; Communication Protocol include Serial protocol、TCP/IP; Data to be transmitted is Gamma Spectr
4、al data with 4096 channel; Spectral data processing method include Smoothing、Peak Searching、finding boundary、Calculating peak area.Key Word: C/C+; TCP/IP; Gamma; Data Processing目錄 TOC o 1-3 h z u HYPERLINK l _Toc387407136 摘要 PAGEREF _Toc387407136 h 1 HYPERLINK l _Toc387407137 第一章 前言 PAGEREF _Toc3874
5、07137 h 5 HYPERLINK l _Toc387407138 1.1選題依據(jù) PAGEREF _Toc387407138 h 5 HYPERLINK l _Toc387407139 1.2現(xiàn)狀 PAGEREF _Toc387407139 h 5 HYPERLINK l _Toc387407140 1.3研究?jī)?nèi)容 PAGEREF _Toc387407140 h 5 HYPERLINK l _Toc387407141 第二章 平臺(tái)介紹與搭建 PAGEREF _Toc387407141 h 6 HYPERLINK l _Toc387407142 2.1平臺(tái)搭建 PAGEREF _Toc38
6、7407142 h 6 HYPERLINK l _Toc387407143 2.2特點(diǎn) PAGEREF _Toc387407143 h 6 HYPERLINK l _Toc387407144 第三章 通信協(xié)議 PAGEREF _Toc387407144 h 6 HYPERLINK l _Toc387407145 3.1串口通信 PAGEREF _Toc387407145 h 6 HYPERLINK l _Toc387407146 3.1.1 特點(diǎn)(參考自51單片機(jī)P125) PAGEREF _Toc387407146 h 6 HYPERLINK l _Toc387407147 3.1.2 通信
7、方式(參考自51單片機(jī)P127) PAGEREF _Toc387407147 h 6 HYPERLINK l _Toc387407148 3.1.3 串行通信的錯(cuò)誤校驗(yàn)(參考自51單片機(jī)P127) PAGEREF _Toc387407148 h 7 HYPERLINK l _Toc387407149 3.2TCP/IP通信 PAGEREF _Toc387407149 h 7 HYPERLINK l _Toc387407150 3.2.1 OSI模型與TCP/IP模型(參考自鳥哥服務(wù)器篇P36) PAGEREF _Toc387407150 h 7 HYPERLINK l _Toc38740715
8、1 3.2.2 TCP/IP數(shù)據(jù)格式 PAGEREF _Toc387407151 h 9 HYPERLINK l _Toc387407152 3.2.3 錯(cuò)誤檢測(cè)機(jī)制 PAGEREF _Toc387407152 h 9 HYPERLINK l _Toc387407153 第四章 譜分析方法 PAGEREF _Toc387407153 h 10 HYPERLINK l _Toc387407154 4.1最小二乘法譜光滑(參考多道脈沖分析系統(tǒng)原理Word版) PAGEREF _Toc387407154 h 10 HYPERLINK l _Toc387407155 4.2求導(dǎo)公式(參考多道脈沖分析系
9、統(tǒng)原理Word版) PAGEREF _Toc387407155 h 12 HYPERLINK l _Toc387407156 4.2尋峰與尋邊界 PAGEREF _Toc387407156 h 14 HYPERLINK l _Toc387407157 4.2.1 導(dǎo)數(shù)尋峰原理(參考多道脈沖分析系統(tǒng)原理) PAGEREF _Toc387407157 h 14 HYPERLINK l _Toc387407158 4.2.2 先尋邊界后尋峰(參考DEV一階導(dǎo)數(shù)尋峰程序) PAGEREF _Toc387407158 h 14 HYPERLINK l _Toc387407159 4.2.3 先尋峰后尋邊
10、界(參考多道脈沖分析系統(tǒng)原理Word) PAGEREF _Toc387407159 h 19 HYPERLINK l _Toc387407160 4.3計(jì)算面積 PAGEREF _Toc387407160 h 21 HYPERLINK l _Toc387407161 第五章 重要功能實(shí)現(xiàn)方法(無參考) PAGEREF _Toc387407161 h 22 HYPERLINK l _Toc387407162 5.1新建工程 PAGEREF _Toc387407162 h 22 HYPERLINK l _Toc387407163 5.1.1 VC6.0新建單文檔工程 PAGEREF _Toc387
11、407163 h 22 HYPERLINK l _Toc387407164 5.1.2 VC2012新建單文檔工程 PAGEREF _Toc387407164 h 22 HYPERLINK l _Toc387407165 5.1.3 VC2012新建Win32工程 PAGEREF _Toc387407165 h 22 HYPERLINK l _Toc387407166 5.1打開文件 PAGEREF _Toc387407166 h 22 HYPERLINK l _Toc387407167 5.1.1 MFC類庫(kù)打開文件 PAGEREF _Toc387407167 h 22 HYPERLINK
12、l _Toc387407168 5.1.2 Windows API打開文本文檔 PAGEREF _Toc387407168 h 24 HYPERLINK l _Toc387407169 5.1.3打開元素信息表 PAGEREF _Toc387407169 h 26 HYPERLINK l _Toc387407170 5.1.4打開能量刻度文件 PAGEREF _Toc387407170 h 26 HYPERLINK l _Toc387407171 5.2元素匹配 PAGEREF _Toc387407171 h 27 HYPERLINK l _Toc387407172 5.7實(shí)現(xiàn)窗口滾動(dòng) PAG
13、EREF _Toc387407172 h 27 HYPERLINK l _Toc387407173 5.9雙緩沖消除圖像閃爍 PAGEREF _Toc387407173 h 28 HYPERLINK l _Toc387407174 5.3建立坐標(biāo)軸 PAGEREF _Toc387407174 h 29 HYPERLINK l _Toc387407175 5.8繪制鼠標(biāo)點(diǎn)擊線 PAGEREF _Toc387407175 h 30 HYPERLINK l _Toc387407176 5.6填充峰面積 PAGEREF _Toc387407176 h 30 HYPERLINK l _Toc387407
14、177 5.10通信 PAGEREF _Toc387407177 h 31 HYPERLINK l _Toc387407178 5.11圖像顯示 PAGEREF _Toc387407178 h 31 HYPERLINK l _Toc387407179 結(jié)論 PAGEREF _Toc387407179 h 33 HYPERLINK l _Toc387407180 致謝 PAGEREF _Toc387407180 h 33 HYPERLINK l _Toc387407181 參考文獻(xiàn) PAGEREF _Toc387407181 h 34第1章 前言選題依據(jù)今年來,網(wǎng)絡(luò)技術(shù)發(fā)展迅猛,得利于網(wǎng)絡(luò)技術(shù)的
15、發(fā)展,加速了物聯(lián)網(wǎng)時(shí)代的到來,現(xiàn)在各個(gè)商家生產(chǎn)銷售的儀器設(shè)備,很多都會(huì)附帶網(wǎng)絡(luò)功能,將儀器設(shè)備接入網(wǎng)絡(luò),已成為一種趨勢(shì)。設(shè)備接入網(wǎng)絡(luò)的優(yōu)勢(shì):1、實(shí)時(shí)監(jiān)控。傳統(tǒng)儀器在工作時(shí),需要人實(shí)時(shí)監(jiān)控;如果在沒有人監(jiān)控的情況下,儀器出現(xiàn)故障,將不能被及時(shí)發(fā)現(xiàn)。利用實(shí)時(shí)網(wǎng)絡(luò)監(jiān)控,可在第一時(shí)間發(fā)現(xiàn)儀器出現(xiàn)的故障,以使其得到及時(shí)的修復(fù)。 2、安全性高。傳統(tǒng)儀器在數(shù)據(jù)采集完畢后,將數(shù)據(jù)存放在儀器中,這需要儀器有一定大小的存儲(chǔ)空間,當(dāng)存儲(chǔ)空間不夠時(shí),將不得不刪除一部分?jǐn)?shù)據(jù);如果存儲(chǔ)器壞掉,大量重要的數(shù)據(jù)將丟失,造成不可挽回的損失。利用網(wǎng)絡(luò),將數(shù)據(jù)實(shí)時(shí)備份到服務(wù)器中,即使儀器出現(xiàn)故障,數(shù)據(jù)也不會(huì)丟失。3、共享性好。傳統(tǒng)
16、儀器采集得到的數(shù)據(jù),直接存放在機(jī)器中,要想查看數(shù)據(jù),必須將數(shù)據(jù)先提取出來。利用網(wǎng)絡(luò)傳輸能力,將采集得到的數(shù)據(jù)放進(jìn)服務(wù)器,當(dāng)有人想要查看數(shù)據(jù)時(shí),直接向服務(wù)器發(fā)出數(shù)據(jù)請(qǐng)求,即可查看數(shù)據(jù),方便快捷高效。4、更精確。在便攜式儀器上,做數(shù)據(jù)處理,得到的結(jié)果不是太準(zhǔn)確,這是因?yàn)楸銛y式儀器滿足了便攜性,丟掉了計(jì)算速度。如果將數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)上的計(jì)算機(jī)中,利用計(jì)算機(jī)的強(qiáng)大數(shù)據(jù)處理能力,可以得到一些更好的結(jié)果。儀器測(cè)量得到的數(shù)據(jù),與理想數(shù)據(jù)在一定范圍內(nèi)存在偏差。為了將得到的數(shù)據(jù)進(jìn)行修正,同時(shí),為了將數(shù)字量翻譯成文字描述,我們有必要對(duì)得到的譜數(shù)據(jù)進(jìn)行處理。在數(shù)據(jù)的處理過程中,因?yàn)樯婕暗骄W(wǎng)絡(luò)傳輸,為了獲得更好的實(shí)時(shí)性
17、,所以選取簡(jiǎn)單的譜數(shù)據(jù)處理方法。我對(duì)計(jì)算機(jī)語(yǔ)言很感興趣,在課下做了一些計(jì)算機(jī)方面的練習(xí);在課程中,涉及到數(shù)據(jù)處理的部分我都盡力去做,積累一些數(shù)據(jù)處理的經(jīng)驗(yàn),有做這部分工作的能力。在我接觸到的核儀器中,都沒能實(shí)現(xiàn)聯(lián)網(wǎng)功能。在這樣的背景下,有必要做一些嘗試。而且我對(duì)網(wǎng)絡(luò)通信非常感興趣,希望通過此次做畢業(yè)論文的契機(jī),好好學(xué)習(xí)一下網(wǎng)絡(luò)相關(guān)知識(shí)與C/S模式原理,滿足自己的好奇心。這也是促使我選擇此題目的原因。1.3研究?jī)?nèi)容 本文要完成的工作是將數(shù)據(jù)從一臺(tái)機(jī)器發(fā)送到另一臺(tái)機(jī)器,然后將接收到的譜數(shù)據(jù)進(jìn)行數(shù)據(jù)分析。為了達(dá)到這個(gè)目的,我選擇TCP/IP通信協(xié)議作為數(shù)據(jù)傳輸約定。在本文中對(duì)TCP/IP協(xié)議,有一個(gè)
18、大概的介紹。在之前學(xué)習(xí)串口通信中,試驗(yàn)中用到的數(shù)據(jù)量很少,一次通信只有幾個(gè)字符。然而在本文中,在我自定義的數(shù)據(jù)格式中,一個(gè)數(shù)據(jù)單位會(huì)有40Kbyte大小??紤]到局域網(wǎng)中,數(shù)據(jù)傳輸速度可達(dá)到數(shù)MByte每秒,理論上,在客服端完全可以實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)顯示而不會(huì)對(duì)通信線路產(chǎn)生負(fù)載壓力。在程序設(shè)計(jì)過程中,我采用從底向上的設(shè)計(jì)辦法,即先編寫代碼實(shí)現(xiàn)單一的功能,在所有功能都實(shí)現(xiàn)后,將程序的所有功能都集中到一起。對(duì)于之前沒有接觸過通信的我來說,這是比較簡(jiǎn)單的一種方法。因?yàn)樵谝粋€(gè)工程中只涉及到單一功能,因此在代碼調(diào)試過程中,可以很方便的查找問題所在,在遇到不能解決的問題時(shí),也能在短時(shí)間內(nèi)解決。在解決問題的過程中,
19、我會(huì)在工作日志中建立相應(yīng)的問題描述以及解決方案,在做程序功能集成時(shí),當(dāng)某一模塊發(fā)生問題時(shí),我能很快地通過工作日志找到問題所在,并在短時(shí)間內(nèi)解決。在程序的設(shè)計(jì)過程中,主要有三大模塊TCP/IP模塊、串口模塊、 數(shù)據(jù)處理模塊。在TCP/IP模塊中,我主要做的工作定義了數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu),在這個(gè)結(jié)構(gòu)中,4096個(gè)譜數(shù)據(jù),每一個(gè)數(shù)據(jù)占用十個(gè)字節(jié)的內(nèi)存,之所以這樣做,是因?yàn)槊恳粋€(gè)整數(shù)數(shù)據(jù)轉(zhuǎn)化為字符數(shù)據(jù)后,字符數(shù)據(jù)的長(zhǎng)度不一,在接收到TCP/IP數(shù)據(jù)包之后,對(duì)數(shù)據(jù)包的解讀比較麻煩。為了讓數(shù)據(jù)打包和解包算法簡(jiǎn)便,我增加了每一個(gè)數(shù)據(jù)占用的字節(jié)數(shù)。在本地環(huán)回地址和局域網(wǎng)中兩臺(tái)電腦上測(cè)試,能數(shù)據(jù)發(fā)送和接收的功能。在
20、串口模塊中,只做數(shù)據(jù)的接收顯示。數(shù)據(jù)處理模塊是本文的重點(diǎn),在做數(shù)據(jù)處理過程中,除了文中介紹的方法外,在數(shù)據(jù)光滑、尋峰尋邊界過程中,還用到了其他方法,但文中介紹的方法是我做過的方法中效果最好的。程序中的三個(gè)模塊,我都做了一遍,正文中會(huì)一一介紹。在做功能集成時(shí),我發(fā)現(xiàn)在多線程程序中,很容易出問題,由于時(shí)間不足,這個(gè)問題一直沒有得到解決。于是在多線程中,我做了一些新的嘗試。文中會(huì)有介紹。第2章 開發(fā)環(huán)境介紹2.1 軟件選擇本文中用到的開發(fā)軟件有VC6.0企業(yè)中文版、VS2012官方英文版。之所以用VC6.0,一是因?yàn)樵趯W(xué)校里剛開始計(jì)算機(jī)語(yǔ)言,做程序設(shè)計(jì)時(shí)就是用的這個(gè)版本,期間積累的許多工程需要這個(gè)版
21、本軟件來打開,二是在Win7操作系統(tǒng)下的運(yùn)行速度很快,很適合學(xué)習(xí)。但是,當(dāng)程序代碼越寫越長(zhǎng),用的變量越來越多,變量名越來越長(zhǎng)時(shí),就會(huì)發(fā)現(xiàn)用VC6.0會(huì)產(chǎn)生一些拼寫上的錯(cuò)誤,即使再小心,也未必能在一次編寫完程序時(shí),編譯不出錯(cuò)。VS2012是微軟推出的新版本開發(fā)工具,能很好地支持Win7 64位操作系統(tǒng),而VC6.0在Win7 64位環(huán)境下運(yùn)行時(shí),打開文件會(huì)導(dǎo)致程序崩潰,添加Axtive X控件會(huì)提示錯(cuò)誤。而VS2012有智能提示功能,在拼寫代碼時(shí),系統(tǒng)會(huì)自動(dòng)匹配代碼,提供給我們選擇,這一功能大大提高了代碼編寫的準(zhǔn)確度。其次,VS2012包含了很多的依賴文件,通過這些依賴文件,系統(tǒng)自動(dòng)匹配我們?cè)诔?/p>
22、序中使用到的變量,如果沒有某一變量的定義,系統(tǒng)將在該變量的下方畫上波浪線,標(biāo)記成錯(cuò)誤狀態(tài),這一功能大大提高了最終編譯程序的正確性。在VC6.0中,我們用的一些C函數(shù),并不是國(guó)際標(biāo)準(zhǔn),在使用過程中,也會(huì)出現(xiàn)一些安全性問題(如itoa、sprintf等函數(shù))。VS2012提供更多標(biāo)準(zhǔn)化的C函數(shù),并針對(duì)在舊版本開發(fā)工具中出現(xiàn)的問題提供解決方案。2.2 安裝2.2.1 VC6.0安裝VC6.0中文完整版下載地址: HYPERLINK /soft/35205.html /soft/35205.html 為了在Win7 64位旗艦版操作系統(tǒng)下獲得比較好的兼容性,安裝過程中請(qǐng)參考如下網(wǎng)站提供的安裝方法: H
23、YPERLINK /link?url=Poc8lMbLxstOEDs_kqEUElrIeHb5eSQ8_3eCxO04MIFtIdnRR8Jya3xfO53pr7Rog6irbg63W7iZHdGASq80BoCJvEoZ4EIz0F9oyAcsNCi /link?url=Poc8lMbLxstOEDs_kqEUElrIeHb5eSQ8_3eCxO04MIFtIdnRR8Jya3xfO53pr7Rog6irbg63W7iZHdGASq80BoCJvEoZ4EIz0F9oyAcsNCi VC6.0 MSDN完整版下載地址: HYPERLINK /pub/software/program/MSDN
24、_OCT_2001.ISO /pub/software/program/MSDN_OCT_2001.ISO 2.2.2 VS2012安裝VS2012官方英文版下載地址: HYPERLINK /en-us/download/details.aspx?id=30678 /en-us/download/details.aspx?id=30678VS2012 MSDN官方英文版下載地址: HYPERLINK /en-us/download/details.aspx?id=34794 /en-us/download/details.aspx?id=34794 第3章 通信協(xié)議3.1串口通信3.1.1 特
25、點(diǎn)(參考自51單片機(jī)P125)數(shù)據(jù)在單條位寬為1的傳輸線上,一位接一位按順序傳送的方式成為串行通信,在通信中,一個(gè)數(shù)據(jù)包包含一個(gè)起始位,隨后部分包含自定義位數(shù)(一般選擇8位)的數(shù)據(jù)位,緊接著是校驗(yàn)位,可以自定義不同的校驗(yàn)方式,隨后是停止位,停止位也可自定義。串口通信的一個(gè)數(shù)據(jù)包的結(jié)構(gòu)如下所示:停止位校驗(yàn)位起始位停止位校驗(yàn)位起始位空閑數(shù)據(jù)空閑空閑數(shù)據(jù)空閑B01234567CS發(fā)送接收接收發(fā)送發(fā)送接收接收發(fā)送接收發(fā)送3.1.2 通信方式(參考自51單片機(jī)P127發(fā)送接收接收發(fā)送發(fā)送接收接收發(fā)送接收發(fā)送單工 半雙工 全雙工如上圖所示,串口有三種通信方式:?jiǎn)喂?、半雙工、全雙工。單工:數(shù)據(jù)傳輸僅沿一個(gè)方
26、向,不能實(shí)現(xiàn)反向傳輸。半雙工:數(shù)據(jù)傳輸可以沿兩個(gè)方向,但因?yàn)橹挥幸粭l數(shù)據(jù)通路,發(fā)送和接收只能分時(shí)進(jìn)行。全雙工:因?yàn)橛袃蓷l數(shù)據(jù)通路,可以同時(shí)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收。3.1.3 串行通信的錯(cuò)誤校驗(yàn)(參考自51單片機(jī)P127)(1)奇偶校驗(yàn)在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)尾部的一位為校驗(yàn)位(1或0),奇校驗(yàn)時(shí),數(shù)據(jù)中1的個(gè)數(shù)與校驗(yàn)位1的個(gè)數(shù)之和應(yīng)為奇數(shù);偶校驗(yàn)時(shí),數(shù)據(jù)位中1的個(gè)數(shù)與校驗(yàn)位1的個(gè)數(shù)之和應(yīng)為偶數(shù)。接收字符時(shí),對(duì)于1的個(gè)數(shù)進(jìn)行校驗(yàn),若發(fā)現(xiàn)不一致,則說明傳輸數(shù)據(jù)過程中出現(xiàn)了差錯(cuò)。(2)代碼和校驗(yàn)發(fā)送方將待發(fā)送的數(shù)據(jù)進(jìn)行運(yùn)算(各字節(jié)求和或各字節(jié)異或),將產(chǎn)生的結(jié)果附加到數(shù)據(jù)塊的末尾。接收方接收到數(shù)據(jù)后,進(jìn)行相
27、同的運(yùn)算,如果計(jì)算的結(jié)果和接收到的校驗(yàn)值不一樣,則說明數(shù)據(jù)傳送過程中出現(xiàn)了差錯(cuò)。(3)循環(huán)冗余校驗(yàn)通過某種數(shù)學(xué)運(yùn)算實(shí)現(xiàn)有效信息與校驗(yàn)位之間的循環(huán)校驗(yàn),常用于對(duì)磁盤信息的傳輸、存儲(chǔ)區(qū)的完整性校驗(yàn)等。3.2TCP/IP通信接收端發(fā)送端3.2.1 OSI模型與TCP/IP模型(參考自鳥哥服務(wù)器篇P36)接收端發(fā)送端Data應(yīng)用程序應(yīng)用程序Data應(yīng)用程序應(yīng)用程序DataH應(yīng)用層Data-Link LayerApplication LayerDataH應(yīng)用層Data-Link LayerApplication LayerHHData表示層Presentation LayerHHData表示層Prese
28、ntation LayerHHHData會(huì)話層Session LayerHHHData會(huì)話層Session LayerHHHHData傳輸層Transport LayerHHHHData傳輸層Transport LayerHHHHHData網(wǎng)絡(luò)層HHHHHData網(wǎng)絡(luò)層Network LayerNetwork LayerCDataHHHHHH數(shù)據(jù)鏈路層CDataHHHHHH數(shù)據(jù)鏈路層比特流(一串0與比特流(一串0與1)Physical Layer物理層傳輸介質(zhì)OSI七層協(xié)議中的數(shù)據(jù)傳遞方式從上圖中可以看到,OSI七層模型,在發(fā)送端,下層會(huì)對(duì)來自上層的數(shù)據(jù)進(jìn)行封裝,每經(jīng)歷一層,數(shù)據(jù)包都會(huì)添加一個(gè)
29、報(bào)頭(Header),數(shù)據(jù)到達(dá)物理層后,由傳輸介質(zhì)(如光纖、網(wǎng)線等)傳輸?shù)浇邮斩?。接收端接收到?shù)據(jù)包后,由下往上,對(duì)數(shù)據(jù)包進(jìn)行拆封,每經(jīng)歷一層,數(shù)據(jù)包報(bào)頭都被相應(yīng)層給去掉,在數(shù)據(jù)到達(dá)應(yīng)用程序時(shí),只剩下數(shù)據(jù)部分。OSI七層協(xié)議十分嚴(yán)謹(jǐn),是學(xué)習(xí)網(wǎng)絡(luò)的標(biāo)準(zhǔn)模型。但因?yàn)檫^分嚴(yán)謹(jǐn),使程序撰寫十分不易,為了簡(jiǎn)化程序開發(fā)過程,于是便出現(xiàn)了基于OSI七層模型的TCP/IP模型。TCP/IP是OSI七層模型的簡(jiǎn)化形式。HTTPFTPTCPUDP應(yīng)用層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)接口層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層傳輸層應(yīng)用層HTTPFTPTCPUDP應(yīng)用層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)接口層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層傳輸層應(yīng)用層表示層會(huì)話層UDPU
30、DPICMPICMPARPARPOSI與TCP/IP協(xié)議相關(guān)性從上圖中可以看到,TCP/IP協(xié)議將OSI七層模型簡(jiǎn)化成了四層,每一層都定義了很多的協(xié)議,用來完成不同的工作。TCP/IP模型中的傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層受操作系統(tǒng)控制,而我要編寫的應(yīng)用程序?qū)⒅饕槍?duì)應(yīng)用層。雖然編寫的軟件作用于應(yīng)用程序接口層,但探討TCP/IP協(xié)議下,數(shù)據(jù)如何進(jìn)行傳輸,不同計(jì)算機(jī)、不同網(wǎng)絡(luò)如何通信,對(duì)我們深刻理解通信協(xié)議大有裨益。TCP/IP協(xié)議在計(jì)算機(jī)世界中, 已經(jīng)成功運(yùn)行幾十年,我們學(xué)習(xí)它的工作方式,也是對(duì)前人工作成果的一種繼承。下文中,將對(duì)TCP/IP協(xié)議做部分介紹。3.2.2 MAC數(shù)據(jù)幀(參考網(wǎng)絡(luò) HY
31、PERLINK /link?url=Tk-H8aTl7ajS_ow0tsgvP3E_q8R9bER_0HQsbNYtDikrhRpy-xrCA-P8OuRhDNZVicZOEUHNSAKBjW-svfjBT81vHHGJesALlZLFlYyVINW /link?url=Tk-H8aTl7ajS_ow0tsgvP3E_q8R9bER_0HQsbNYtDikrhRpy-xrCA-P8OuRhDNZVicZOEUHNSAKBjW-svfjBT81vHHGJesALlZLFlYyVINW )在數(shù)據(jù)鏈路層,協(xié)議數(shù)據(jù)單元PDU稱為幀(frame),也叫MAC,它是網(wǎng)線上傳送數(shù)據(jù)的最小單位。以下為MAC數(shù)
32、據(jù)幀結(jié)構(gòu):前導(dǎo)碼8 Byte目的地址6 Byte源地址6 Byte長(zhǎng)度指示2 ByteLLC數(shù)據(jù)46-1500 Byte幀校驗(yàn)序列4 Byte前導(dǎo)碼:在用協(xié)議分析器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行抓取分析時(shí),我們并沒有看到前導(dǎo)碼,對(duì)于前導(dǎo)碼的格式如下:10101010101010101010101010101010101010101010101010101010前導(dǎo)碼一共7個(gè)字節(jié),在前導(dǎo)碼之后的一個(gè)字節(jié)幀起始定界符 (SDF),用于指示一幀的開始,幀起始定界符為10101011。目的地址:為本機(jī)網(wǎng)卡卡號(hào),查看本機(jī)網(wǎng)卡卡號(hào),可以在命令行界面中輸入ipconfig查看。目的地址:為MAC數(shù)據(jù)幀將要到達(dá)的目的地機(jī)器
33、網(wǎng)卡卡號(hào)。長(zhǎng)度指示:長(zhǎng)度指示為2字節(jié),用于標(biāo)識(shí)該幀數(shù)據(jù)所使用的協(xié)議類型,如下為已分配的協(xié)議類型編號(hào):類型協(xié)議0 x0800IPV40 x86ddIPV60 x0806地址解析協(xié)議(Address Resolution Protocol, ARP)0 x809bAppleTalk0 x8137Novell互聯(lián)網(wǎng)包交換(Internetwork Packet Exchange,IPX)LLC數(shù)據(jù):LLC幀是對(duì)IP數(shù)據(jù)幀的封裝,幀數(shù)據(jù)結(jié)構(gòu)部如下:目的地服務(wù)訪問點(diǎn)(DSAP)1Byte源地址服務(wù)訪問點(diǎn)(SSAP)1Byte控制字段1ByteIP數(shù)據(jù)幀3.2.3 TCP/IP數(shù)據(jù)幀(參考鳥哥服務(wù)器篇P6
34、8)IP數(shù)據(jù)幀有兩種結(jié)構(gòu):IPV4和IPV6,目前IPV4使用最為廣泛,本文僅介紹IPV4有關(guān)內(nèi)容。在網(wǎng)絡(luò)中,每一臺(tái)計(jì)算機(jī)有一個(gè)網(wǎng)卡卡號(hào),代表了計(jì)算機(jī)的身份。在網(wǎng)絡(luò)上,計(jì)算機(jī)要想實(shí)現(xiàn)聯(lián)網(wǎng),也必須要有一個(gè)身份表示,這個(gè)身份標(biāo)識(shí)就是IP地址。IP數(shù)據(jù)幀封裝了發(fā)送方和接收方的網(wǎng)絡(luò)地址,在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包,會(huì)在網(wǎng)絡(luò)介質(zhì)的幫助下傳送到接收方,靠的就是IP地址。當(dāng)接收方接收到數(shù)據(jù)幀之后,會(huì)一層一層地解析數(shù)據(jù)幀,最終將數(shù)據(jù)轉(zhuǎn)交給應(yīng)用程序。MAC、IP、TCP、實(shí)際數(shù)據(jù)個(gè)關(guān)系如下:MAC總長(zhǎng)度IP總長(zhǎng)度TCP總長(zhǎng)度MAC幀頭IP包頭TCP報(bào)頭實(shí)際數(shù)據(jù)資料3.2.4 可靠數(shù)據(jù)傳輸(參考網(wǎng)絡(luò))TCP/IP之所以
35、可以實(shí)現(xiàn)無差錯(cuò)數(shù)據(jù)傳輸,是通過發(fā)送確認(rèn)信息和超時(shí)重傳兩種機(jī)制實(shí)現(xiàn)。發(fā)送端每發(fā)送一個(gè)數(shù)據(jù)包,在接收端接收到數(shù)據(jù)之后,都會(huì)產(chǎn)生確認(rèn)信息返回給發(fā)送端。當(dāng)發(fā)送端發(fā)送一個(gè)數(shù)據(jù),在一定時(shí)間內(nèi)沒有收到來自接收端的確認(rèn)信息時(shí),發(fā)送端會(huì)自動(dòng)再一次發(fā)送數(shù)據(jù)。在接收端接收到數(shù)據(jù)之后,會(huì)根據(jù)接收到的數(shù)據(jù)的校驗(yàn)位數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),如果校驗(yàn)成功就接收,如果校驗(yàn)失敗,就丟棄數(shù)據(jù)包。3.2.5 WireShark協(xié)議分析器(參考TCP/IP協(xié)議原理與應(yīng)用P20) 協(xié)議分析是進(jìn)入網(wǎng)絡(luò)通信系統(tǒng),捕獲在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)流,對(duì)數(shù)據(jù)流轉(zhuǎn)化為可閱讀形式的過程。協(xié)議分析可用來診斷網(wǎng)絡(luò)故障、測(cè)試網(wǎng)絡(luò)、研究網(wǎng)絡(luò)性能。下圖為利用WireSh
36、ark抓取的一個(gè)TCP網(wǎng)絡(luò)數(shù)據(jù)包:在數(shù)據(jù)包中,包含了發(fā)送端、接收端的網(wǎng)卡地址,源、目的地IP地址,數(shù)據(jù)包協(xié)議類型,數(shù)據(jù)包大小等信息。通過查看WireShark獲取的數(shù)據(jù)包信息,我們能對(duì)數(shù)據(jù)通信有更直觀的認(rèn)識(shí)。第4章 譜分析方法4.1最小二乘法譜光滑(參考多道脈沖分析系統(tǒng)原理Word版)最小二乘法平滑公式:其中,代表光滑后的數(shù)據(jù)點(diǎn),2k+1代表了待光滑的數(shù)據(jù)點(diǎn)個(gè)數(shù),根據(jù)光滑數(shù)據(jù)點(diǎn)個(gè)數(shù)的不同,可以確定的取值和j的取值。例如,本文中,光滑數(shù)據(jù),用的是5點(diǎn)光滑, = 35,j=-2,-1,0,1,2,于是得到如下公式:下表中列出了最小二次光滑計(jì)算公式的參數(shù)信息:579111315172k+1 j-21
37、-8-78-6-7-11-137-6-3604218-5-21998727-4-214441612234-3-3339692114739-212654842416242-1177598925167430126548424162421-33396921147392-2144416122343-219987274-36042185-11-1376-78-67-21835212314291431105323NK如下是程序中數(shù)據(jù)光滑代碼:/Smooth_1for(i = 2;i4094;i+)temp_smth1i = (-3*datai-2.src+12*datai-1.src+17*datai.s
38、rc+12*datai+1.src-3*datai+2.src)/35.0;/Smooth_2for(i = 4;i4092;i+)temp_smth2i = (-3*temp_smth1i-2+12*temp_smth1i-1+17*temp_smth1i+12*temp_smth1i+1-3*temp_smth1i+2)/35.0;/Smooth_3for(i = 6;i4090;i+)temp_smth3i = (-3*temp_smth2i-2+12*temp_smth2i-1+17*temp_smth2i+12*temp_smth2i+1-3*temp_smth2i+2)/35.0;
39、/Put Smooth Data into datai.smthfor(i = 0;i4096;i+)datai.smth = temp_smth3i;注意:光滑過程中,我們看到,每光滑一次數(shù)據(jù),在數(shù)據(jù)的首尾各丟失兩個(gè)數(shù)據(jù)。三次光滑,總共丟失十二個(gè)數(shù)據(jù)。過程如下表所示:數(shù)據(jù)編號(hào)0.4095光滑一次2.4093光滑兩次4.4091光滑三次640894.2求導(dǎo)公式(參考多道脈沖分析系統(tǒng)原理Word版)本文中用到了一階、二階最小二乘法導(dǎo)數(shù),求導(dǎo)公式如下:公式中各參數(shù)根據(jù)選取數(shù)據(jù)點(diǎn)數(shù)的不同,取不同的值,具體對(duì)應(yīng)關(guān)系如下表所示:最小二乘移動(dòng)平滑法計(jì)算平滑譜的一階導(dǎo)數(shù)公式579111315172k+1 j
40、748-812922-98-71133-4121-643-6300-660-14150-930-586-294-1578-18334-1002-422-142-532-1796-17842-902-31-67-193-503-1489-13843-673-2-8-58-126-296-832-7506-358-10000000085812629683275063581-1671935031489138436732-221425321796178429023-8629415781833410024-300660141509305-113341216436-12922987748812252118
41、8514824024334152-23256NK最小二乘移動(dòng)平滑計(jì)算平滑譜的二階導(dǎo)數(shù)公式579111315172k+1 j40-89125-7225212-61511191-52862-8-8-457-1-5-29-15-320-8-6-10-48-20-2-1-3-17-9-13-53-23-1-2-4-20-10-14-56-240-1-3-17-9-13-53-23120-8-6-10-48-20257-1-5-29-1532862-8-841511191522521269125740840NK本文求導(dǎo),選取數(shù)據(jù)點(diǎn)數(shù)為5,故求導(dǎo)公式如下:一階導(dǎo)數(shù):二階導(dǎo)數(shù):如下是程序中,一階導(dǎo)數(shù)的代碼:
42、for(i = 8;i4088;i+)temp_derv1i =(+datai-2.smth-8*datai-1.smth+8*datai+1.smth-datai+2.smth)/12.0; for(i = 0;i4096;i+)datai.derv1 = temp_derv1i;如下是程序中,二階導(dǎo)數(shù)的代碼:for(i = 8;i4088;i+)temp_derv2i =(+2*datai-2.smth-datai-1.smth-2*datai.smth-datai+1.smth+2*datai+2.smth)/7.0;4.2尋峰與尋邊界4.2.1 導(dǎo)數(shù)尋峰原理(參考多道脈沖分析系統(tǒng)原理)
43、如下圖,我們可以看到,光滑數(shù)據(jù)的峰值點(diǎn)和一階導(dǎo)數(shù)由正變負(fù)過零點(diǎn)的點(diǎn)一一對(duì)應(yīng)。利用這一性質(zhì),從0道址開始左側(cè),依次檢索一階導(dǎo)數(shù)值數(shù)據(jù)由正變負(fù)過零點(diǎn)的點(diǎn),便可找到光滑數(shù)據(jù)的所有峰值點(diǎn)。4.2.2 先尋邊界后尋峰(參考DEV一階導(dǎo)數(shù)尋峰程序)在上一節(jié)中,我闡述了利用一階導(dǎo)數(shù)尋找峰值點(diǎn)的原理。但是,這里存在一個(gè)問題,我們知道,測(cè)量得到的譜數(shù)據(jù),存在波動(dòng),按照上述方法,我們會(huì)找到很多的假峰,如何剔除假峰,是我要解決的問題。在多道脈沖分析系統(tǒng)原理中,我找到一種方法,在這種方法中: 先利用一階導(dǎo)數(shù)尋找左右邊界,再在每一段擁有左右邊界的數(shù)據(jù)范圍內(nèi),根據(jù)一階導(dǎo)數(shù)由正變負(fù)過零點(diǎn)的性質(zhì),確定峰值點(diǎn)。判斷條件如下:確
44、定左邊界:確定右邊界:在峰區(qū)的左、右邊界確定之后,需要檢驗(yàn)峰區(qū)的寬度。利用下述公式:參數(shù)說明:1、是道的譜數(shù)據(jù)。是道平滑譜的一階導(dǎo)數(shù)值。K為常數(shù),是對(duì)應(yīng)于某一置信度時(shí)正態(tài)分布的橫坐標(biāo)。K值與置信度的關(guān)系如下表所示:置信度K0.9993.0900.9952.5760.9902.3260.9751.9600.9501.6450.9001.2820.8000.8420.7500.6750.7000.5250.6000.2540.50002、中mL道一階導(dǎo)數(shù)值的標(biāo)準(zhǔn)偏差。當(dāng)變換窗口為五點(diǎn)時(shí)然而,在寫程序的過程中,我發(fā)現(xiàn)幾個(gè)問題:找到的左右邊界無對(duì)應(yīng)關(guān)系2、尋找到的左邊界或者右邊界中,常常幾個(gè)數(shù)值連在一
45、起3、存在很多假邊界解決辦法:1、在找到的左右邊界中,首先將連在一起的數(shù)值點(diǎn),選擇一個(gè)進(jìn)行保留,注意:對(duì)左右邊界的處理,建議單獨(dú)進(jìn)行。保留原則如下:程序中的代碼如下:for(i = 6;i K*sqrt(datai.data_lsf) &datai.data_lsf 0)if(+datai+1.data_derv K*sqrt(datai+1.data_lsf) &datai+1.data_lsf datai.data_lsf)if( +datai+1.data_derv datai.data_derv -0.1*sqrt(4*(datai+2.data_lsf +datai-2.data_l
46、sf)+(datai+1.data_lsf + datai-1.data_lsf)datai.data_lf_bdr = i;/去掉連在一起的邊界值,按原則保留左邊界值for(i = 4089;i=6;i-)if(datai.data_lf_bdr0 & datai-1.data_lf_bdr 0)datai.data_lf_bdr = 0;/尋找右邊界for(i = 6;i4090;i+)if(fabs(datai.data_derv)= sqrt(datai.data_lsf)+ (0.1*sqrt(4*(datai+2.data_lsf + datai-2.data_lsf)+(data
47、i+1.data_lsf + datai-1.data_lsf) & datai.data_derv 0)if(datai-1.data_derv = datai.data_derv + 0.1*sqrt(4*(datai+2.data_lsf + datai-2.data_lsf)+(datai+1.data_lsf+ datai-1.data_lsf)& datai.data_derv + 0.1*sqrt(4*(datai+2.data_lsf + datai-2.data_lsf)+(datai+1.data_lsf + datai-1.data_lsf) 0)if(datai.dat
48、a_derv = datai+1.data_derv + 0.1*sqrt(4*(datai+2.data_lsf + datai-2.data_lsf)+(datai+1.data_lsf + datai-1.data_lsf)datai.data_rt_bdr = i; for(i = 6;i 0 & datai+1.data_rt_bdr 0)datai.data_rt_bdr = 0;2、左右邊界處理完畢之后。開始將左邊界與右邊界進(jìn)行綁定,集體操作如下:a)在存儲(chǔ)左邊界的數(shù)組中,從0道址開始,尋找左邊界,然后在存儲(chǔ)右邊界的數(shù)組中,以尋找到的左邊界為起點(diǎn),尋找右邊界數(shù)組中,邊界值不為0的
49、第一個(gè)數(shù)據(jù)。然后在左右邊界內(nèi),判斷是否存在峰值點(diǎn),如果不存在,則左邊界不動(dòng),繼續(xù)在右邊界數(shù)組中查找。b)左邊界和右邊界綁定完畢后,將右邊界中多余的數(shù)據(jù)全部置為0。程序代碼如下:/將左邊界和右邊界進(jìn)行一一對(duì)應(yīng)for(i = 6;i 0) for(j = i;j0) for(k = i;kj;k+) if(datak.data_derv 0 datai.data_lf_bdr = 0;break;break;/過濾右邊界數(shù)組中多余的數(shù)據(jù)for(i = 0;i 0) for(j = i;j 0) temp_rt_bdrj = dataj.data_rt_bdr;break;在上述方法中,可以找到大部
50、分的峰值點(diǎn)。4.2.3 先尋峰后尋邊界(參考多道脈沖分析系統(tǒng)原理Word)在上一節(jié)中,說到,先尋找邊界根據(jù)邊界尋找峰值點(diǎn)。但是,在觀察程序效果的時(shí)候,我發(fā)現(xiàn):1、有些很明顯的峰,用上述方法并不能找到;2、離得很近的峰,程序找不到峰值點(diǎn)。與一階導(dǎo)數(shù)尋峰相比,二階導(dǎo)數(shù)有更強(qiáng)的分辨能力。于是,我嘗試用二階導(dǎo)數(shù)法尋找峰值點(diǎn)。原理圖如下:如圖所示,通過尋找二階導(dǎo)數(shù)在一個(gè)區(qū)間內(nèi)的極小值點(diǎn),判斷該極值的絕對(duì)值|是否大于其標(biāo)準(zhǔn)偏差若干倍, 若是,則斷定改點(diǎn)是一個(gè)峰值點(diǎn),將改點(diǎn)的道址保存進(jìn)存儲(chǔ)峰值點(diǎn)的數(shù)組中,判定依據(jù)如下:其中,K為第m點(diǎn)二階導(dǎo)數(shù)值時(shí)在第m道左右各取的數(shù)據(jù)點(diǎn)數(shù),本文規(guī)定為2。2K1為變換窗口。為
51、求二階導(dǎo)數(shù)值公式中的權(quán)重因子,根據(jù)表格給出。TRH1為自定義的尋峰閾值,本文規(guī)定TRH1=4。為m點(diǎn)的標(biāo)準(zhǔn)偏差。為了進(jìn)一步剔除假峰,在找到的峰位mp左右各取一個(gè)相鄰的二階導(dǎo)數(shù)值進(jìn)行如下的判定:如果上式滿足時(shí),則認(rèn)為找到了一個(gè)有意義的峰。其中 、 是峰位左、右相鄰兩道的二階導(dǎo)數(shù)值是其相應(yīng)的標(biāo)準(zhǔn)偏差。TRH2是預(yù)先設(shè)定的另一個(gè)尋峰閾值,本文規(guī)定TRH21.7。找到峰值點(diǎn)之后,同樣的,我們要像上一節(jié)中提到的那樣尋找邊界,找到邊界,還要對(duì)存儲(chǔ)邊界的數(shù)組進(jìn)行相應(yīng)的處理。但是,我們注意到,找到的峰值點(diǎn)和邊界并沒有太大的聯(lián)系。有些存在邊界的峰,并不能找到峰值點(diǎn)。在這里,我在第一次找到邊界的時(shí)候,并沒有對(duì)存儲(chǔ)
52、邊界的數(shù)組進(jìn)行處理,而是根據(jù)峰值點(diǎn),從兩邊分別找存儲(chǔ)邊界的數(shù)組中,第一個(gè)數(shù)值不為零的點(diǎn),作為邊界值,將峰值點(diǎn)和邊界一一對(duì)應(yīng)上了之后,再將存儲(chǔ)邊界數(shù)組中無關(guān)的數(shù)據(jù)全部置為零。在用兩種方法得到的譜中,這種先將峰值點(diǎn)和邊界進(jìn)行綁定,再清理邊界數(shù)組的方法,明顯優(yōu)于先清理數(shù)組,再綁定的方法。在實(shí)際操作中,我發(fā)現(xiàn),有時(shí)候,尋找到的左右邊界,并不是完美的在峰值點(diǎn)兩側(cè),可能的情況會(huì)有:峰值點(diǎn)附近只能找到左邊界或者右邊界找到的左邊界或者右邊界離峰值點(diǎn)很遠(yuǎn),發(fā)生明顯的錯(cuò)誤。于是,在應(yīng)用中,利用二階導(dǎo)數(shù)找到峰位之后,我嘗試只尋找左邊界,或只尋找右邊界,將其綁定到峰值點(diǎn)上。另一個(gè)邊界,通過已知邊界點(diǎn)和峰值點(diǎn)的道址差計(jì)
53、算得到。相當(dāng)于未知邊界是已知邊界相對(duì)峰值點(diǎn)的鏡像。由于由高純鍺探測(cè)器得到的譜數(shù)據(jù),峰的對(duì)稱性很好,所以,用這樣方法處理高純鍺探測(cè)器得到的數(shù)據(jù),效果很好。4.3計(jì)算面積本文中,面積計(jì)算采用線性本底法。計(jì)算方法如下:在僅包含一個(gè)左右邊界的數(shù)據(jù)區(qū)間中,將所有光滑數(shù)據(jù)相加作為總面積A,計(jì)算以左右邊界點(diǎn)及左右邊界點(diǎn)在橫軸上的投影點(diǎn)連接形成的梯形的面積作為本底面積B,然后用A-B,得到凈峰面積S。示意圖如下所示:凈面積S本底面積B凈面積S本底面積B計(jì)算峰面積的代碼如下所示:for(i = 0;i8192;i+)area_sum = 0;if(0 datai.l_bdr)for(j = i;j8192;j+
54、)if(0 dataj.r_bdr)for(k = i;k = j;k+)area_sum += datak.smth;area_bg = (datai.smth+dataj.smth)*(j-i+1)/2.0;for(k = i;k 0)datak.area = area_sum - area_bg;break;break;4.4 SNIP去本底第5章 重要功能實(shí)現(xiàn)方法(無參考)5.1新建工程5.1.1 VC6.0新建單文檔工程打開VC6.0軟件界面,在界面左上角,選擇文件新建,文件類型選擇工程MFC AppWizad(exe),選擇單文檔應(yīng)用程序,點(diǎn)擊完成。5.1.2 VC2012新建單文
55、檔工程打開VS2012軟件界面,在界面左上角,選擇FILENewProject,在彈出的對(duì)話框中,選擇InstalledTemplatesVisual C+MFCMFC Application,在彈出的對(duì)話框中選擇next,選擇Application type為Single document,在同一界面右側(cè)的Project style下,選擇MFC standard,點(diǎn)擊右下角的Finish按鈕,完成工程創(chuàng)建。5.1.3 VC2012新建Win32工程打開VS2012軟件界面,在界面左上角,選擇FILENewProject,在彈出的對(duì)話框中,選擇InstalledTemplatesVisual
56、 C+Win32,選擇Win32 Project,在彈出的窗口下方點(diǎn)擊next,在對(duì)話框的Additional options下方,選擇Empty project。點(diǎn)擊對(duì)話框下方的Finish按鈕,完成工程創(chuàng)建。創(chuàng)建完成的工程,并沒有帶程序編輯界面,我們要手動(dòng)添加一個(gè)編輯界面。方法如下:在Solution explorer中,選中Source Files,鼠標(biāo)點(diǎn)擊右鍵,在彈出的對(duì)話框中,選擇AddNew Item,選擇Visual C+C+ File(.cpp)。修改完畢Name和Location之后,點(diǎn)擊對(duì)話框下方的Add按鈕,完成添加cpp文件。5.1打開文件5.1.1 MFC類庫(kù)打開文件
57、我們要讀取的文件,格式主要有兩類:一類是二級(jí)制文件,一類是文本文件。本文程序中用到的文件類型為txt文檔類型。由于很多原始譜數(shù)據(jù)都是以二進(jìn)制文件的形式給出,因此,讀取二進(jìn)制文件也顯得非常重要。在此,我也會(huì)介紹如何讀取二進(jìn)制文件。、打開文本文件首先給出程序代碼:int i = 0;long offset = 0;/存放行偏移CString string;/臨時(shí)對(duì)象,用來存放直接從文件中讀取的字符串CString filename;/存儲(chǔ)文件名的對(duì)象CString fileex;/存儲(chǔ)文件名后綴的對(duì)象CString filepath;/存儲(chǔ)文件路徑的對(duì)象CStdioFile file;/文件對(duì)象C
58、FileDialog fdlg(TRUE,/標(biāo)志位,標(biāo)志打開文件spe,/默認(rèn)文件后綴名8H4275,/默認(rèn)文件名OFN_HIDEREADONLY | /屏蔽只讀文件OFN_OVERWRITEPROMPT,/重寫提醒對(duì)話框(All Type)(*.*)|*.*|,/定義可打開文件類型NULL);/定義打開文件對(duì)話框父窗口if(fdlg.DoModal() = IDOK) /判斷是否點(diǎn)擊”打開”按鈕filename = fdlg.GetFileName();/如果點(diǎn)擊,獲取文件名fileex = fdlg.GetFileExt();/獲取文件名后綴filepath = fdlg.GetPathN
59、ame();/獲取文件路徑if(filepath = _T()/如果路徑為空,結(jié)束函數(shù)return ;if(!file.Open(LPCTSTR)filename,/根據(jù)文件名打開文件CFile:typeText | CFile:modeRead)AfxMessageBox(打開文件失敗);return ;for(i = 0;i12;i+)/讀取頭文件file.ReadString(string);for(i = 0;i 8192;i+)/讀取測(cè)量數(shù)據(jù)file.ReadString(string);/讀取一行字符sscanf(string,%d,&datai.src);/將讀取的字符轉(zhuǎn)化為整數(shù)
60、存進(jìn)數(shù)組for(i = 0;i14;i+)/讀取尾文件file.ReadString(string);file.Close();/關(guān)閉文件在代碼中,我對(duì)重要函數(shù)的用法做了詳細(xì)的批注,如有不清楚的地方,請(qǐng)自行查看VS開發(fā)套件提供的MSDN幫助文檔。在譜處理中,我們有時(shí)候會(huì)要求讀取能量刻度文件、元素庫(kù)文件等其他文件。讀取所有文本格式的文件的通用原則是:將讀取的內(nèi)容當(dāng)成字符串,在程序中,用sscanf函數(shù)將字符串格式化為我們想要的數(shù)據(jù)類型,比如int、float、char型等等。下圖為點(diǎn)擊打開文件按鈕效果圖:、打開二進(jìn)制文件首先給出程序代碼:FILE *fp;/定義文件對(duì)象指針fp = fopen(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高壓電工考試題庫(kù):高壓試驗(yàn)技術(shù)操作現(xiàn)場(chǎng)作業(yè)試題
- 2025年小學(xué)英語(yǔ)畢業(yè)考試模擬試卷:英語(yǔ)歌曲與童謠教學(xué)多媒體應(yīng)用
- 2025年小學(xué)語(yǔ)文畢業(yè)升學(xué)考試模擬試卷(趣味知識(shí)拓展與閱讀理解)
- 2025年高壓電工考試題庫(kù):高壓設(shè)備維護(hù)保養(yǎng)計(jì)劃與故障排查試題
- 畢業(yè)活動(dòng)主題策劃書
- 2025年征信考試題庫(kù):征信信用修復(fù)流程及風(fēng)險(xiǎn)控制試題
- 2025年葡萄牙語(yǔ)能力測(cè)試試卷:葡萄牙語(yǔ)口語(yǔ)與聽力綜合試題
- 2025年征信考試題庫(kù)-征信監(jiān)管政策動(dòng)態(tài):案例分析試題集
- 2025年征信考試題庫(kù)(企業(yè)征信專題):企業(yè)信用評(píng)級(jí)流程試題
- 2025年大數(shù)據(jù)分析師職業(yè)技能測(cè)試卷:Python數(shù)據(jù)分析與數(shù)據(jù)清洗實(shí)戰(zhàn)案例試題
- Q∕SY 05175-2019 原油管道運(yùn)行與控制原則
- 汽車收音機(jī)天線的參數(shù)
- 供配電系統(tǒng)畢業(yè)設(shè)計(jì)
- 《藝術(shù)學(xué)概論考研》課件藝概緒論
- 工廠致全體員工一份感謝信
- 怎樣做一名合格的高校中層領(lǐng)導(dǎo)干部( 54頁(yè))
- 中職一年級(jí)數(shù)學(xué)課外活動(dòng)趣味數(shù)學(xué)基礎(chǔ)知識(shí)競(jìng)賽課件(必答+選答+風(fēng)險(xiǎn)題含倒計(jì)時(shí)PPT)
- 工藝評(píng)審記錄表
- 新加坡觀賞魚國(guó)際貿(mào)易發(fā)展模式及對(duì)我國(guó)的啟示
- 移動(dòng)式操作平臺(tái)專項(xiàng)施工方案
- 畢業(yè)設(shè)計(jì)(論文)中期報(bào)告-感應(yīng)電機(jī)矢量控制及仿真
評(píng)論
0/150
提交評(píng)論