freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

在線溫度監(jiān)控系統(tǒng)上位機(jī)軟件設(shè)計(jì)_畢業(yè)設(shè)計(jì)(論文)-資料下載頁(yè)

2025-07-02 14:04本頁(yè)面

【導(dǎo)讀】端溫度進(jìn)行實(shí)時(shí)采集,并將其顯示于上位機(jī)上。但由于現(xiàn)場(chǎng)限制,需要通過(guò)。據(jù)顯示在數(shù)據(jù)表上,還需調(diào)用數(shù)據(jù)表中的數(shù)據(jù)顯示成曲線。

  

【正文】 a n d l e 關(guān) 閉 通 信 端 口結(jié) 束 是否否是打 開(kāi) 成 功 否 圖 46 串口流程圖 1) 打開(kāi)串口通信。串行通信前,要調(diào)用 CreatFile()函數(shù)打開(kāi)串行端口,當(dāng)通信端口成功打開(kāi)后,就返回一個(gè)串口句柄( Handle),以后只要使用這個(gè)句柄就可以對(duì)通信端口操作。然后進(jìn)行串口配置,在打開(kāi)通信設(shè)備句柄后,通常要西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 24 對(duì)串口進(jìn)行初始化工作,即配置參數(shù)如波特率、數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗(yàn)以及握手協(xié)議等。 配置串口通過(guò)改變數(shù)據(jù)結(jié)構(gòu) —設(shè)備控制塊 DCB( Device Control Block)來(lái)實(shí)現(xiàn)。只要設(shè)置波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等幾個(gè)關(guān)鍵參數(shù)即可。我們可以使用 GetCommState 函數(shù)獲得串口的配置,該函數(shù)把當(dāng)前配置填充到 DCB 結(jié)構(gòu)中。要修改串口配 置,應(yīng)該先修改 DCB 結(jié)構(gòu)數(shù)據(jù)成員值,然后調(diào)用SetCommState 函數(shù)將改變了的通信設(shè)備控制塊 DCB 再返回給串行通信端口,一重新分配串口資源的各個(gè)參數(shù)。 點(diǎn)擊開(kāi)始通訊按鈕便開(kāi)始接收資料,因此 雙擊開(kāi)始通訊按鈕, 加入如下程序代碼 : void __fastcall TForm1::Button1Click(TObject *Sender) { char *ComNo。 DCB dcb。 String Temp。 //取得要打開(kāi)的通信端口 Temp = COM+IntToStr(rdCOMItemIndex +1)。 //轉(zhuǎn)換至指針類型 Char ComNo = ()。 hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0)。 if (hComm == INVALID_HANDLE_VALUE) // 如果通信端口未打開(kāi) { MessageBox(0, 打開(kāi)通信端口錯(cuò)誤 !!,Comm Error,MB_OK)。 return。 } //將 dcb 地址傳入,以取得通信參數(shù) GetCommState(hComm,amp。dcb)。 // 得知目前通信端口的狀態(tài) = CBR_9600 // 設(shè)置波特率為 9600 = 8。 // 字節(jié)為 8 bit = NOPARITY。 // Parity 為 None 西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 25 = ONESTOPBIT。 // 1 個(gè) Stop bit //通信端口設(shè)置 if (!SetCommState(hComm, amp。dcb)) { // 設(shè)置通信端口的狀態(tài) MessageBox (0, 通信端口設(shè)置錯(cuò)誤 !!!,Set Error,MB_OK)。 CloseHandle(hComm)。 return。 } } 2) 接 發(fā)數(shù)據(jù)。當(dāng)有通信事件產(chǎn)生時(shí),可使用函數(shù) ReadFile()和 WriteFile()直接對(duì)串口緩沖區(qū)進(jìn)行讀寫(xiě)操作。其中 JpBuffer 指向讀寫(xiě)緩沖區(qū),nNumberOfBytes 為要讀寫(xiě)的字節(jié)數(shù), lpNumberOfBytes 為實(shí)際讀寫(xiě)的字節(jié)數(shù),lpOverlapped 指定同步或異步操作。在實(shí)際使用中,當(dāng)有數(shù)據(jù)到達(dá)通信端口時(shí),應(yīng)主動(dòng)將數(shù)據(jù)接收下來(lái)。將數(shù)據(jù)由串口讀進(jìn)計(jì)算機(jī)的方法是使用 ReadFile()函數(shù),要得知被送到串口輸入緩沖區(qū)的字節(jié)數(shù),必須使用 ClearCommError()函數(shù),來(lái)獲得當(dāng)前串行端口狀態(tài),這些狀態(tài)中包括了輸入緩沖區(qū)中數(shù)據(jù)的字節(jié)數(shù),只要將這兩個(gè)函數(shù)放在 定時(shí)器內(nèi)即可達(dá)到不斷讀取數(shù)據(jù)的目的。 在發(fā)送數(shù)據(jù)時(shí),只要在發(fā)送數(shù)據(jù)的 mSend_Data 控件中,輸入要發(fā)送的信息,然后按回車鍵即能發(fā)送 。 雙擊 傳送資料按鈕 ,給其 加入如下程序代碼: void __fastcall TForm1::Button3Click(TObject *Sender) { String Temp。 char *SendData。 int ln。 unsigned long lrc,BS。 if (hComm==0) return。 //檢查 Handle 值 Temp = mSendText。//取得發(fā)送的字符串 SendData = ()。 //字符串轉(zhuǎn)換 //取得發(fā)送的字符串?dāng)?shù) BS = ()。 西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 26 //BS = StrLen(SendData)。 //也可以使用此種方式取得字符串長(zhǎng)度 //實(shí)際的發(fā)送動(dòng)作 WriteFile(hComm,SendData,BS, amp。lrc,NULL)。 // 送出數(shù)據(jù) } 在接收資料按鈕下加入如下程序代碼: void __fastcall TForm1::Button4Click(TObject *Sender) { String Temp。 char inbuff[1024]。 DWORD nBytesRead, dwEvent, dwError。 COMSTAT cs。 //取得狀態(tài) ClearCommError(hComm,amp。dwError,amp。cs)。 // 數(shù)據(jù)是否大于我們所準(zhǔn)備的緩沖區(qū) if ( sizeof(inbuff)) { PurgeComm(hComm, PURGE_RXCLEAR)。 // 清除通信端口數(shù)據(jù) return。 } ReadFile(hComm, inbuff,amp。nBytesRead,NULL)。 // 接收通信端口的數(shù)據(jù) //數(shù)組中的字符串結(jié)尾處補(bǔ)上零字符 inbuff[]= 39。\039。 // 將數(shù)據(jù)顯示于 Memo1 上 mReceiveText = inbuff。 } 3) 關(guān)閉串口。串口是非共享資源,所以打開(kāi)串口后,一定要關(guān)閉串口。關(guān)閉串口 函數(shù)的原型是 BOOL CloseHandle( HANDLE hObject);其中 hObject 參數(shù)為 CreatFile()返回的端口句柄。返回值為非 0 時(shí),表示調(diào)用成功。雙擊 結(jié)束通訊按鈕 ,為其 加入如下程序代碼: 西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 27 void __fastcall TForm1::Button2Click(TObject *Sender) { if (hComm!=INVALID_HANDLE_VALUE) CloseHandle(hComm)。 exit(EXIT_SUCCESS)。 } 4) 另外還要 聲明文件句柄變 量,在單元文件聲明部分添加如下一條語(yǔ)句: HANDLE hComm; 此模塊界面的具體設(shè)計(jì): 串口用于接收溫度數(shù)據(jù),因此,串口調(diào)通至關(guān)重要。該模塊用到的組件主要有一個(gè) RadioGroup 組件,兩個(gè) Label 組件,四個(gè) Button組件,兩個(gè) Memo 組件。 調(diào)節(jié)串口界面如下圖 4—7 所示。 圖 4—7 串行模塊界面 臺(tái)式計(jì)算機(jī)一般有兩個(gè)串口,而選擇通訊簿用于選擇用哪個(gè)串口。點(diǎn)擊開(kāi)始通訊按鈕,則系統(tǒng)開(kāi)始接收下位機(jī)傳來(lái)的數(shù)據(jù)。點(diǎn)擊結(jié)束通訊 按鈕 , 則 停止接收數(shù)據(jù) 。 由于我做的只是上位機(jī),為了調(diào)試方便,我做了自發(fā)自收的設(shè)計(jì),即一個(gè)Memo 用于顯示輸入的數(shù)據(jù),而 另一個(gè)則用于顯示接收的數(shù)據(jù)。這樣一來(lái)很容易西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 28 看出串口是否調(diào)試好, 如果串口調(diào)通,那么傳送的資料將會(huì)顯示在接收的資料 欄里 。但要注意的是,如果 輸入一次內(nèi)容,但 連續(xù)按兩次發(fā)送鍵,再按一次接收鍵,則會(huì)在接收資料里顯示兩遍接收到的內(nèi)容 , 即出現(xiàn) 如圖 48 所示 情況。 圖 48 串口調(diào)試 數(shù)據(jù)表 設(shè)計(jì) 數(shù)據(jù) 表 是數(shù)據(jù)的集合,具有統(tǒng)一的結(jié)構(gòu)形式并存放于統(tǒng)一的存儲(chǔ)介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被各個(gè)應(yīng)用程序共享。數(shù)據(jù)庫(kù)存放數(shù)據(jù)是按數(shù)據(jù)所提供的數(shù)據(jù)模式存放的,具有集成與共享的的特點(diǎn)。 在本次畢設(shè)中, 為了使數(shù)據(jù)觀察起來(lái)更方便,我建立了數(shù)據(jù)表, 數(shù)據(jù) 表 主要是用于存放 通過(guò) RS232 串口 接收來(lái)的數(shù)據(jù)。 數(shù)據(jù)成組出現(xiàn),每組有三個(gè)數(shù)據(jù),分別為溫度、時(shí)間和結(jié)點(diǎn)。 接收進(jìn)來(lái)后分別將溫度和時(shí)間數(shù)據(jù)顯示到數(shù)據(jù)表上的時(shí)間和溫度欄。 以下是數(shù)據(jù) 表的 建立方法 。 首先 在開(kāi)始菜單中, C++ 的下拉菜單下, 打開(kāi) Database, 然后 通過(guò)菜單命令 File|new|Table, 這是則 會(huì)出現(xiàn) Creat Table 對(duì)話框,點(diǎn)擊 OK, 將會(huì) 出現(xiàn) Creat Paradox7 Table:( Untiled) 對(duì)話框, 此對(duì)話框 如圖 49 所示, 在該對(duì)話框的右上角有 Table properties 選項(xiàng)欄, 在 Table properties 的下拉菜單中選擇中Secondary Indexes, 如此一來(lái),就可以 在 Field roster 中創(chuàng)建 滿足 自己所需要的索引。 然后 是 保存 過(guò)程 , 保存文件的 名稱 應(yīng)該是 頭文件為 “ .db” 的 ,這一點(diǎn)很重要 。 西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 29 圖 49 Creat Paradox7 Table 建立完后 ,還需建立一個(gè)別名,這樣才能使窗體上的感知數(shù)據(jù)組件連接到數(shù)據(jù)。在開(kāi)始中打開(kāi) BDE Administrator,通過(guò)菜單命令 Object|New 打開(kāi) New Database Alias 對(duì)話框, 在此對(duì)話框中的 Database Driver Name 項(xiàng)中選擇MSACCESS,將發(fā)現(xiàn)在 Database 窗口中增加了一個(gè)新節(jié)點(diǎn),修改 別名為TemperatureData,選中該名稱,單擊右鍵,選 Apply 命令,在出現(xiàn)的對(duì)話框中選OK,便完成了這項(xiàng)工作。創(chuàng)建后的對(duì)話框如圖 410 所示 。 圖 410 建立別名 最后 還需要 通過(guò)能夠感知數(shù)據(jù)的 DBGrid 組件 才能 連接到它 。在C++ 的窗體中,添加一個(gè) TDBGrid 組件、 一個(gè)數(shù)據(jù) 源組件 TDataSource、一個(gè) Table、和一個(gè) StatusBar 組件。名稱取默認(rèn)值( Table StatusBar1)。將Table1 的 DatabaseName 屬性設(shè)置 為 BCDEMOS,TableName 屬性設(shè)置為, Active 屬性設(shè)置為 true, DataSource1 的 DataSet 屬性設(shè)置為 Table1,西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 30 DBGrid1 的 Align 屬性設(shè)置為 alBottom, DataSource 屬性設(shè)置為 樣就可以連接到此數(shù)據(jù)庫(kù)了。 數(shù)據(jù)庫(kù)存儲(chǔ) 的溫度 數(shù)據(jù)如下圖 411 所示 。 圖 411 數(shù)據(jù)表 顯示 上位機(jī)溫度曲線設(shè)計(jì) 在溫度顯示模塊中,所用到的組件并不多。因?yàn)橐髮⒉杉瘉?lái)的溫度和時(shí)間顯示在坐標(biāo)曲線上,時(shí)間在 X 軸上,溫度在 Y 軸上,因此要用到 C++builder 中的 SimuCurves 組件, 并且還需要一個(gè) Button 組件。因?yàn)槭嵌帱c(diǎn)溫度度采集,所以設(shè)置了六個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)下面都配有指示燈和打開(kāi)按鈕,打開(kāi)哪個(gè)按鈕,哪個(gè)指示燈就亮,且變?yōu)榫G色,而顯示的溫度曲線也就是該節(jié)點(diǎn)的溫度曲線。不同節(jié)點(diǎn)的溫度曲線顏色也不同,在節(jié)點(diǎn)下面用 Lable 組件將每個(gè)節(jié)點(diǎn)的曲線顏色進(jìn)行標(biāo)注,這樣就可以通過(guò)顏色來(lái)辨別是哪個(gè)節(jié)點(diǎn)的溫度曲線。下面對(duì)組件分別進(jìn)行介紹。 組件介紹: Button 組件是使用率最高的組件,用于提供一個(gè)給系統(tǒng)用戶操作用的按鈕,在組件面板中的位置及外觀如圖 4—12 所示。 圖 412 Button 組件外觀 而其常用屬性設(shè)置如表 41 所示。 西安工程大學(xué)本科
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1