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

正文內(nèi)容

基于c的rs232通信協(xié)議模擬終端畢業(yè)論文-wenkub

2022-09-11 18:21:00 本頁(yè)面
 

【正文】 控系統(tǒng)會(huì)根據(jù)系統(tǒng)運(yùn)行情況通過(guò)串口向監(jiān)控設(shè)備發(fā)送指令,調(diào)節(jié)設(shè)備的運(yùn)行參數(shù)等使得生產(chǎn)過(guò)程平穩(wěn)進(jìn)行 [1]。串行通信中的串口應(yīng)用始于 1960 年,然而 RS232 的初始版本于 1969 年才得到認(rèn)證,認(rèn)證的版本號(hào)為 RS232C,在這之前有 RS232A、RS232B 這兩個(gè)版本。 未來(lái) RS232 串口通信仍將在低成本、設(shè)計(jì)簡(jiǎn)單的產(chǎn)品中繼續(xù)發(fā)揮著重要作用。在設(shè)計(jì)過(guò)程中,我通過(guò)查閱大量相關(guān)書(shū)籍和資 3 料,研究學(xué)習(xí)了 RS232 標(biāo)準(zhǔn)協(xié)議和 VC++編程語(yǔ)言下的 MFC 界面編程,學(xué)習(xí)串行通信相關(guān)知識(shí),通過(guò)編程軟件的仿真完成了基于 C++的 RS232 通信協(xié)議的模擬終端。 在 VC++高級(jí)語(yǔ)言中,利用 Windows 下的 MSComm ActiveX 控件,實(shí)現(xiàn)兩臺(tái) 計(jì)算機(jī)間的通信測(cè)試與仿真。有 25 條信號(hào)線(xiàn), 盡管有如此 多的信號(hào)線(xiàn),但是 對(duì)于一般雙工通信,僅 僅 需 要其中 幾條信號(hào)線(xiàn)就可實(shí)現(xiàn) 數(shù)據(jù)的傳送 ,即 一條發(fā)送線(xiàn)、一條接收線(xiàn)和一條地線(xiàn)。同時(shí),由于 RS232 標(biāo)準(zhǔn)具有連線(xiàn)簡(jiǎn)單、通訊距離長(zhǎng)等優(yōu)點(diǎn),目前也廣泛應(yīng)用于微型計(jì)算機(jī)系統(tǒng) 、工控機(jī) 和大型設(shè)備系統(tǒng)中。是目前 PC 機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。 RS232 9 針通訊的接口圖如圖 21 所示 。串行通信中所傳送數(shù)據(jù)的各位按順序一位一位地發(fā)送或接收。串行端口的本質(zhì)功能是作為 CPU 和串行設(shè)備間的編碼轉(zhuǎn)換器 [5]。 (1)波特率 所謂波特率就是每秒中傳送的二進(jìn)制位數(shù),其單位是 bps( bits per second),用來(lái)描述數(shù)據(jù)的傳送速率,是衡量串行通信數(shù)據(jù)傳輸速度快慢的重要指標(biāo)。在串行通信中,通信線(xiàn)上所傳輸?shù)淖址麛?shù)據(jù)(代碼)是逐位傳送的,一個(gè)字符由若干位組成,所以每秒鐘所傳輸?shù)牟ㄌ芈屎妥址?數(shù)(字符速率)是完全不同的。怎樣決定數(shù)據(jù)位的取值取決于傳送的信息。 (3)停止位 7 停止位一般為 和 2 位,用來(lái)表示單個(gè)包的最后一位。對(duì)于奇校驗(yàn)和偶校驗(yàn),串口會(huì)設(shè)置校驗(yàn)位,是數(shù)據(jù)位后面的一位,用一個(gè)值保證傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。 同步通信是一種在發(fā)送端發(fā)送一個(gè)抑制載波的雙邊帶信號(hào),而在接收端恢復(fù)載波,再進(jìn)行檢波的通信方式。 它們均由數(shù)據(jù)字符、 CRC 即同步字符和校驗(yàn)字符組成。發(fā)送端和接收端可以由各自的時(shí)鐘 源 來(lái)控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,互不同步, 接收端檢測(cè)到 傳輸線(xiàn)上發(fā)送過(guò)來(lái)的低電平邏輯 0(即字符幀起始位)時(shí),確定發(fā)送端已開(kāi)始發(fā)送數(shù)據(jù),每當(dāng)接收端收到字符幀中的停止位時(shí),就知道一幀字符已經(jīng)發(fā)送完畢 [3]。所以要想通過(guò) 串行通信實(shí)現(xiàn)與外圍設(shè)備數(shù)據(jù)交換,必須用 USB 轉(zhuǎn) RS232 9 針串口轉(zhuǎn)換線(xiàn)。圖 23顯示了 9 針通訊的接口管腳, 9 針管腳的串口各引腳名稱(chēng)、功能和信號(hào)來(lái)源各不相同。這就需要用到串口調(diào)試小助手。 10 本章小結(jié) 本章從原理上介紹了串行通信 的基本原理,詳細(xì)的闡 述了 RS232 標(biāo)準(zhǔn)協(xié)議接口和與串行通信相關(guān)的一些知識(shí)。這主要是由通信技術(shù)不可靠性決定的。接收方為了檢查所接收的數(shù)據(jù)是否有誤碼,可采用多種檢測(cè)方法。 CRC 校驗(yàn)碼是 在 K 位信息碼后 再拼接 R 位的校驗(yàn)碼,整個(gè)編碼長(zhǎng)度為 N 位,因此,這種編碼也叫( N, K)碼。 12 CRC校驗(yàn)碼權(quán)的形式 CRC 校驗(yàn)碼有很多 種權(quán)的 行式, 使用哪一種形式是根據(jù)通信雙方共同制定的 “規(guī)則 ”而定的,其中各種常用 權(quán) 的形式 如下所示: 18 458 ???? XXXC R C ( 31) 151216 ????? XXXC C ITTC R C ( 32) 116 51516 ???? XXXC R C ( 33) 112 231112 ????? XXXXC R C ( 34) ????????? 101112162223263232 XXXXXXXXC R C 124578 ?????? XXXXXX ( 35) 以其中 CRCCCITT 形式為例。此時(shí), 16 位移位寄存器中的內(nèi)容就是 CRC 碼。在使用的時(shí)候,把計(jì)算出來(lái)的校驗(yàn)值放在最后兩個(gè)字節(jié)里,將其發(fā)送出去,接收端對(duì)所有的數(shù)據(jù)進(jìn)行相同的校驗(yàn),如校驗(yàn)值為 0 我們則認(rèn)為其數(shù)據(jù)沒(méi)有出錯(cuò)。并通過(guò) CRC 校驗(yàn)實(shí)現(xiàn)通信中的檢錯(cuò)。 MFC 提供了構(gòu)造 Windows 應(yīng)用程序的框架,它不僅為應(yīng)用程序建立標(biāo)準(zhǔn)的結(jié)構(gòu),還為其提供了標(biāo)準(zhǔn)的圖形用戶(hù)界面如菜單欄、工具欄、狀態(tài)欄等,開(kāi)發(fā)人員只需要在此基礎(chǔ)上添加針對(duì)特定應(yīng)用的代碼即可。 MFC的全稱(chēng)是 Microsoft Foundation Classes。 串行通信控件 MSComm 目前,以 Windows 下的 MFC 應(yīng)用程序?yàn)橹饕?的 框架, 常用的 基于 VC++的串行通信編程一般可以用兩種方法實(shí)現(xiàn):一種是使用 Windows API 通信函數(shù)。 程序員 就 不需要花 費(fèi)大量 時(shí)間去了解 API 函數(shù),只需要利用 MSComm 控件就可實(shí)現(xiàn)串口 通信 編程 [16]。 圖 41 主要功能框圖 應(yīng)用程序 主要實(shí)現(xiàn)的功能如圖 41 所示 的主要功能框圖 ,此應(yīng)用程序的 總體程序流程圖如圖 42 所示。能夠發(fā)送單個(gè)或多個(gè)數(shù)據(jù) 。 建立工程 要實(shí)現(xiàn)通信,首先應(yīng)先建立工程,即新建基于 Win32 的 MFC 應(yīng)用程序。 圖 43 建立基于對(duì)話(huà)框應(yīng)用程序過(guò)程圖 18 按照如上所示的方法步驟 ,建立 Win32 下的 MFC 應(yīng)用程序工程, 應(yīng)用程序工程名為 “通信 ”,最后點(diǎn)擊完成按鈕,就會(huì)出現(xiàn) MFC 應(yīng)用程序初始界面如圖44 所示 [19]。對(duì) Access 數(shù)據(jù)庫(kù)的連接與操作有很多種方法,例如在 ASP 中建立對(duì) Access數(shù)據(jù)庫(kù)的連接、使用 Recordset 對(duì)象操作 Access 數(shù)據(jù)庫(kù)、使用 SQL 指令操作數(shù)據(jù)庫(kù)、使用 DSN 連接 Access 數(shù)據(jù)庫(kù)等。數(shù)據(jù)庫(kù)和數(shù)據(jù)源建 立完成后,開(kāi)始用 MFC 建立登陸界面。登陸界面如圖 46 所示。 圖 47 主界面 (3)參數(shù)設(shè)置界面 完成兩臺(tái) PC 機(jī)間的串行通信(數(shù)據(jù)交換),必須保證兩個(gè)串口的 通信 參數(shù)一致,這樣就需要將兩個(gè)應(yīng)用程序的通信參數(shù)重新設(shè)置,通信參數(shù)包括波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等。 需要重新輸入和驗(yàn)證,驗(yàn)證通過(guò)后才可以登錄。 //新建的類(lèi),是基于 CRecordset 開(kāi)始 輸入獲取信息 是否登錄 密碼用戶(hù)名是否一致 登錄成功,轉(zhuǎn)到主界面 結(jié)束 點(diǎn)擊退出按鈕 Y N Y N 23 try { if(())//判斷記錄集是否打開(kāi) ()。%s39。 AfxMessageBox(用戶(hù)名、密碼錯(cuò)誤,請(qǐng)重試! )。 CDialog::OnOK()。 初始化的程序流程圖如圖 410 所示。//顯示登錄界面 if(()) //如果發(fā)現(xiàn)串口本來(lái)是打開(kāi)的,則關(guān)閉串口 (FALSE)。 //設(shè)置輸入緩沖區(qū) (512)。程序流程圖如圖 411 所示,實(shí)現(xiàn)其功能代碼如下: void CMyDlg::OnOpen() 開(kāi)始 設(shè)置串口號(hào) 打開(kāi)串口 關(guān)閉串口 結(jié)束 26 { if(()) (FALSE)。 (m_n+1)。//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為 ,表示全部讀取 (1)。 //每當(dāng)接收緩沖區(qū)有個(gè)字符則接收串口數(shù)據(jù) (0)。 } (4)實(shí)現(xiàn)數(shù)據(jù)交換模塊 使用 MSComm 通信控件是 MFC 中進(jìn)行串口通訊最簡(jiǎn)單的。 COleSafeArray safearray_inp。 if(()==2) //值為表示接收緩沖區(qū)內(nèi)有字符 { variant_inp=()。klen。klen。 //將字符送入臨時(shí)變量 strtemp存放 CByteArray hexdata。 UpdateData(false)。 29 UpdateData(FALSE)。 = m_databit。 CString conf。break。 } switch(m_jiaoyan) // 設(shè)置校驗(yàn)方法 { case 0:conf = conf + n,。 case 2:conf = conf + e,。 } switch(m_databit) // 設(shè)置數(shù)據(jù)位 { case 0:conf = conf + 5,。 case 2:conf = conf + 7,。 default:conf = conf+8,。 case 1:conf = conf + 。 default:conf = conf+1。 } } (6)發(fā)送模塊 圖 414 發(fā)送模塊流程圖 開(kāi)始 讀取編輯框 更新編輯框 結(jié)束 字符形式發(fā)送 16 進(jìn)制形式發(fā)送 計(jì)算 CRC 值值 32 發(fā)送數(shù)據(jù)模塊中,程序先讀取編輯框的內(nèi)容, 根據(jù)是否選擇 16 進(jìn)制顯示選取字符發(fā)送形式,并計(jì)算發(fā)送數(shù)據(jù)的 CRC 值,同時(shí)發(fā)送并 清空,最后更新編輯框的內(nèi)容。 //此處返回的 len可以用于計(jì)算發(fā)送了多少個(gè)十六進(jìn)制數(shù) (COleVariant(hexdata))。 unsigned char* pC = (unsigned char*)(LPCTSTR)m_send。 //發(fā)送后清空輸入框 UpdateData(false)。senddata) { int hexdata,lowhexdata。 for(int i=0。 39。 if(i=len) break。 if((hexdata==16)||(lowhexdata==16)) break。 hexdatalen++。039。939。)amp。)) return ch39。a39。f39。 else return (1)。 然后需要打開(kāi)串口,點(diǎn)擊【打開(kāi)串口】按鈕, 程序會(huì)提示串口打開(kāi)成功,最后設(shè)置 通信參數(shù), 點(diǎn)擊【設(shè)置】按鈕,跳轉(zhuǎn)到設(shè)這界面,根據(jù)需要選擇通信參數(shù),如果保存設(shè)置就點(diǎn)擊【確定按鈕】否則點(diǎn)擊【退出】按鈕,之后又回 到了主界面,現(xiàn)在即可進(jìn)行數(shù)據(jù)的發(fā)送了。 圖 419 發(fā)送接收數(shù)據(jù) (4)十六進(jìn)制顯示和計(jì)算 CRC 值 設(shè)置完成各參數(shù)后,選擇十六進(jìn)制發(fā)送、接收復(fù)選框和計(jì)算 CRC 數(shù)值復(fù)選框,點(diǎn)擊【發(fā)送按鈕】,可以看到在接收區(qū)字符是以十六進(jìn)制形式顯示的,接收和發(fā)送的 CRC 值在編輯框中顯示,這樣就可以判斷發(fā)送的內(nèi)容是否受到干擾。并對(duì)此應(yīng)用程序進(jìn)行了運(yùn)行測(cè)試。掌握了串行通信的基本概念。 主要功能有用戶(hù)名密碼 驗(yàn)證登錄、設(shè)置串口號(hào)、打開(kāi)串口、 關(guān)閉串口、設(shè)置通信參數(shù)等 。 38 圖 420 十六進(jìn)制顯示和計(jì)算發(fā)送接收數(shù)據(jù) CRC 值 (5)關(guān)閉串口退出整個(gè)應(yīng)用程序 發(fā) 送數(shù)據(jù)結(jié)束后,關(guān)閉串口,點(diǎn)擊【退出】按鈕,程序提示 “謝謝使用!再見(jiàn) ”。 圖 418 設(shè)置串口和參數(shù) (3)發(fā)送數(shù)據(jù) 選擇串口號(hào),并將此 串口 打開(kāi) ,設(shè)置通信參數(shù)完成后,在發(fā)送 區(qū)內(nèi)的 編輯框輸入要發(fā)送的內(nèi)容, 然后點(diǎn)擊【發(fā)送】按鈕, 發(fā)送 去編輯框里要發(fā)送的內(nèi)容 37 會(huì)通過(guò)此串口發(fā)送到 另一個(gè)端口的接收區(qū) 的編輯框 內(nèi), 并 在接收區(qū) 的編輯框內(nèi)顯示了發(fā)送的 內(nèi)容, 同理也可在另一個(gè)串口的發(fā)送區(qū)編輯框內(nèi)輸入數(shù)據(jù),此 數(shù)據(jù)也可發(fā)送到本串口的編輯框內(nèi),也會(huì)在 接收區(qū)的編輯框內(nèi)得到顯示, 如圖 419所示。 圖 416 用戶(hù)名密碼不一致 輸入正確用戶(hù)名和密碼,程序提示 “登錄成功!歡迎使用! ”如圖 417 所示。a39。amp。+10。(ch=39。 else if((ch=39。amp。 return hexdatalen。 i++。 hexdata=ConvertHexChar(hstr)。 continue。) { char lstr
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1