版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
完成時(shí)間2012.6.15科科技創(chuàng)新[4A]全局主系統(tǒng)設(shè)計(jì)報(bào)告項(xiàng)目名稱(chēng):主從式信息測(cè)控系統(tǒng)設(shè)計(jì)小組編號(hào):12設(shè)計(jì)小組名單:(組長(zhǎng))郭曉希、梁津垚交通大學(xué)電子信息與電氣FF垚F摘要:全局主系統(tǒng)是利用計(jì)算機(jī)圖形界面控制計(jì)算機(jī)串口發(fā)送與接收數(shù)據(jù),經(jīng)過(guò)無(wú)線局域網(wǎng)與本系統(tǒng)實(shí)現(xiàn)無(wú)線通信,并通過(guò)本系統(tǒng)對(duì)各個(gè)子系統(tǒng)進(jìn)行無(wú)線。闡述并分析了全局主系全局主機(jī)的主要功能包括:實(shí)時(shí)顯示各從系統(tǒng)當(dāng)前狀態(tài)、對(duì)各各從系統(tǒng)控制、以及和本系統(tǒng)的通信。其中,前兩者將在本文中詳細(xì)討論,與本系統(tǒng)的通信部分可參見(jiàn)本項(xiàng)目的本系:Thegeneralcontrolsystemcommunicateswiththelocalcontrolsystemandcontrolstheworkingofthesubsystems.WeusetheGUIpanelandtheserialportonPCtosendandreceivedata,whichisalsoworkingthroughWIFIandenablethewirelesscontrolfunction.Thisreportpresentstheprocessofthedesignanddevelopmentofthegeneralcontrolsystem,includingthemainfunction,softwaredesign,debuggingandtheusageofthesystem.Themainfunctionsofthislocalcontrolcenterincludes:real-timedisplayofstatusofslave-systems,controlanyoftheslave-systems,andcommunicatewiththelocalmainsystem.Amongthesefunctions,thefirsttwowillbeelaborateinthisreportandthelatterwillbediscussedindetailwithinthereportoflocalmainsystem.GeneralControlSystem,GUIPanel, 概 編寫(xiě)說(shuō) 名詞定 縮略 系統(tǒng)總 系統(tǒng)組 系統(tǒng)的主要功 通信協(xié)議設(shè) 信息幀部 無(wú)線局域網(wǎng)部 WIFI網(wǎng) TCP/IP協(xié) 與 系統(tǒng)通 圖形界面的軟件設(shè) 圖形界面概 軟件設(shè) MFC環(huán)境下使用套接 幾個(gè)重要的函數(shù)介 界面設(shè) 系統(tǒng)界 全局主系統(tǒng)模 水溫系統(tǒng)界 電機(jī)系統(tǒng)界 超聲波系統(tǒng)界 致 參考文 附錄軟件程序............................................................................................概是交通大學(xué)電子信息與電氣大三下科技創(chuàng)新(4A)課程全局主系統(tǒng)小組12小組的具體設(shè)計(jì)過(guò)程與完成情況而編寫(xiě)。報(bào)告闡述了全局主系統(tǒng)的設(shè)計(jì)與本文為本系統(tǒng)的使用者提供了技術(shù)上的支持及操作上的說(shuō)明,同時(shí)可供廣大電子設(shè)計(jì)者子系統(tǒng)(su-sye)為了實(shí)現(xiàn)系統(tǒng)的功能所分割出的系統(tǒng)小模塊,包括硬件和軟件部 :GraphicalUserInterface,圖形用戶接口。 系統(tǒng)總PC本系統(tǒng)的PC部分也向用戶提供與全局主系統(tǒng)類(lèi)似的控制功能,并通過(guò)串口向本系系統(tǒng)工作時(shí),人操作PC機(jī)上的GUI圖形用戶界面,GUI程序向本系統(tǒng)的電路部分輸入信號(hào)。本系統(tǒng)對(duì)收到令數(shù)據(jù)進(jìn)行處理,并發(fā)送給相應(yīng)的子系統(tǒng)。操作得到子系統(tǒng)的響應(yīng)后,本地主系統(tǒng)對(duì)全局主系統(tǒng)進(jìn)行反饋。PCGUI程序檢測(cè)到正確的反饋信息后,顯示出操作完成的情況。GUI界面操作來(lái)控制各子系統(tǒng)的工作情況,并顯示各子系統(tǒng)的工作狀態(tài)。本系統(tǒng)是利用MFCC++語(yǔ)言編寫(xiě)的程序作為本實(shí)驗(yàn)的人機(jī)界面。通信協(xié)議設(shè)計(jì)通信協(xié)議的主要功能是進(jìn)行全局主系統(tǒng)與本系統(tǒng)之間信息的傳輸,進(jìn)而實(shí)現(xiàn)全局主系統(tǒng)信息幀部分【2通信主機(jī)和從機(jī)間信息傳輸,以信息幀(數(shù)據(jù)包)方式進(jìn)行,信息幀在傳輸時(shí)采用全發(fā)往某特定從機(jī)令幀,稱(chēng)為單播命令幀;由通信主機(jī)發(fā)往所有從機(jī)令幀,稱(chēng)為廣播命令幀。響應(yīng)幀是對(duì)確定的單播命令幀的回復(fù),兩者有一一對(duì)應(yīng)關(guān)系;從機(jī)收到廣播命令傳輸時(shí)字符(12[2[2[2[2[2[1]2[1序通信對(duì)功能描命令1水溫控檢測(cè)狀~無(wú)程序自動(dòng)計(jì)設(shè)定溫~0x01:開(kāi)始加溫0x00:停止加無(wú)溫~無(wú)重啟系~無(wú)2電機(jī)轉(zhuǎn)檢測(cè)狀~無(wú)寫(xiě)工~0x00:正轉(zhuǎn)停無(wú)0x01:正轉(zhuǎn)開(kāi)轉(zhuǎn)0x02:反轉(zhuǎn)停無(wú)0x03:反轉(zhuǎn)開(kāi)轉(zhuǎn)狀~無(wú)重啟系~無(wú)3超聲檢測(cè)狀~無(wú)~0x00:查詢(xún)物塊層無(wú)0x011、2層厚0x023、4層厚0x035、6層厚0x047、8層厚重啟系~無(wú)圖3-1-2 響應(yīng)II1~0x00:無(wú)錯(cuò)錯(cuò)0x03:命0x01:~0x00:設(shè)定成0x01:設(shè)定失~0x00:正向停不穩(wěn)轉(zhuǎn)0x01:正向停穩(wěn)0x02:正向運(yùn)不穩(wěn)0x03:正向運(yùn)穩(wěn)0x04:反向停不穩(wěn)0x05:反向停穩(wěn)0x08:反向運(yùn)穩(wěn)2~0x01:~0x01:設(shè)定成0x00:設(shè)定失~0x00:溫3~0x01:~塊數(shù)值或厚度WIFI是一種短程無(wú)線傳輸技術(shù),能夠在數(shù)百英尺范圍內(nèi)支持互聯(lián)網(wǎng)接入的無(wú)線電信號(hào)。幫助用戶電子郵件、Web和流式的互聯(lián)網(wǎng)技術(shù),它為用戶提供了無(wú)線的寬帶互聯(lián)網(wǎng)。無(wú)線通信使用WIFI主要基于如下考慮:第一,WIFI是經(jīng)過(guò)廣泛驗(yàn)證的可靠的無(wú)線解決方WIFI的操作簡(jiǎn)便,兩臺(tái)終端之間建立鏈路的方式比較簡(jiǎn)單。第三,WIFI基于TCP/IP協(xié)議,而操作系統(tǒng)和開(kāi)發(fā)環(huán)境都對(duì)TCP/IP環(huán)境下的SOCKET開(kāi)發(fā)TCP/IPInternetInternetIP協(xié)議和傳輸TCP協(xié)議組成。TCP/IP定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯?wèn)題,一有問(wèn)題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址?!?】TCP數(shù)據(jù)信息:TCP頭部+實(shí)際數(shù)據(jù)(TCP頭包括源和目標(biāo)主機(jī)端、順序號(hào)、確認(rèn)號(hào)、校IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來(lái)的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來(lái)的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒(méi)有做任何事情來(lái)確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒(méi)有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。TCP是面向連接的通信協(xié)議,通過(guò)三次握手建立連接,通訊完成時(shí)要拆除連接,由于TCP是TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用“帶重傳的肯定確認(rèn)”技術(shù)來(lái)實(shí)現(xiàn)傳輸?shù)目煽啃?。TCP還采用一種稱(chēng)為“滑動(dòng)窗口”的方式進(jìn)行流量控制,所謂窗口實(shí)際表示接收能力,用以限制發(fā)送如果IP數(shù)據(jù)包中有已經(jīng)封好TCP數(shù)據(jù)包,那么IP將把它們向?上?傳送TCP層。TCP將包TCP將它的信息送到更的應(yīng)用程序,例如net的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動(dòng)程序和物理介質(zhì),最后到接收與 3-2-3全局系統(tǒng)與本地系統(tǒng)的通信過(guò)程圖形界面的軟件設(shè)計(jì)全局主系統(tǒng)以及本系統(tǒng)PC端部分的用戶界面都使用C++語(yǔ)言進(jìn)行開(kāi)發(fā),界面則使 象,有許多成框架和class可以使用,比如CString,CWindow。利用其派生性,可以減少開(kāi)發(fā)全局主系統(tǒng)和本系統(tǒng)使用了用個(gè)用戶控制程序,用戶界面相,但是二者通方式的實(shí)現(xiàn)不同。全局系統(tǒng)使用WIFI,本地系統(tǒng)則同時(shí)使用WIF(與全局通信)和串口方式(與子系統(tǒng)通信)GUI層只有抽象出的虛擬接口,WindowsocketTCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱(chēng)為套接字(Socket)的接口【3】。ServDemoDlg.h,語(yǔ)句“#pragmaonce”后加入如下語(yǔ)句#include"CServSocketh"#include"CRecvSocketCServSocket*ServSocket;CServSocketh中,語(yǔ)句“#pragmaonce”后加入如下語(yǔ)句classCServDemoDlg;CServSocket(CServDemoDlg*Dlg);CServDemoDlg*m_Dlg;#include"ServDemoDlgh"{}ServSocket=newCServSocket(this); #include"CRecvSocketCRecvSockettempSock=newCRecvSocket(this->m_Dlg {}
CStringinti,j=1000;i=Receive(ctemp,j,0); //i接收到數(shù)據(jù)的長(zhǎng)ctemp接收數(shù)據(jù)的數(shù)j每次接收的最大長(zhǎng)度,可重載CRecvSocket類(lèi)的OnClose函數(shù),判斷客戶端連接的斷開(kāi)CStringstr;ServDemoDlg.h,語(yǔ)句“#pragmaonce”后加入如下語(yǔ)句#include"CServSocketh"CServSocketCServSocket.h中,語(yǔ)句“#pragmaonce”后加入如下語(yǔ)句classCServDemoDlg;CServSocket(CServDemoDlg*Dlg);CServDemoDlg*m_Dlg;#include"ServDemoDlgh"{}ServSocket=newCServSocket(this); SevvSocket->Connect("127.0.0.1",10000) inti,j=1000;i=Receive(ctemp,j,0); //i接收到數(shù)據(jù)的長(zhǎng)ctemp接收數(shù)據(jù)的數(shù)j每次接收的最大長(zhǎng)度,可重載CServSocket類(lèi)的OnClose函數(shù),判斷客戶端連接的斷開(kāi)CStringstr;mand檢查VER檢驗(yàn)判斷CMD1、CMD2的和有效性本函數(shù)通過(guò)檢測(cè)輸入信息幀的長(zhǎng)度、起止位等信息判斷指令的。c_length為輸入指令的長(zhǎng)度。指令的有效長(zhǎng)度為14、16、18,不符合有效長(zhǎng)度的指令將直接返回錯(cuò)誤。然后通過(guò)獲取指VER、ADDR、CMD1、CMD2、LENGTH、INFO、CHECKSUM的數(shù)據(jù),_engh為信息幀NH字節(jié)數(shù)據(jù),同過(guò)ENTH字節(jié)數(shù)據(jù)信息幀長(zhǎng)度。當(dāng)ENTHx004,當(dāng)ENH為001ENH為x02NO、HEUMVEDDD1、2256要求,則返回錯(cuò)誤。另外,信息幀應(yīng)以’~’為起始,’r’為終止,不滿足條件的信息幀也將判bool mand(CString 查指{intc_length=command.GetLength(); CStringm_verm_adrm_cmd1,m_cmd2,m_length,m_info,m_chksum,m_info2;intver,adr,cmd1,cmd2,length,info,chksum,info2=0;if(c_length18&&c_length16&&c_length14)return0;//長(zhǎng)度非有效長(zhǎng)度,返回錯(cuò)誤m_ver+=command[1];m_ver+=command[2];m_adr+=command[3];m_adr+=command[4];m_cmd1+=command[5];m_cmd1+=command[6];m_cmd2+=command[7];m_cmd2+=command[8];m_length+=command[9];m_length+=ver=strtol(m_ver,NULL,16);adr=strtol(m_adr,NULL,16);cmd1=strtol(m_cmd1,NULL,16);cmd2=strtol(m_cmd2,NULL,if{if(c_length!=16)return0; m_info+=command[11];m_info+=infostrtol(m_info,NULL,16);//對(duì)有效信息幀計(jì)INFO據(jù)m_chksum+=command[13];m_chksum+=,}elseif(length=={if(c_length14)return info=m_chksum+=command[11];m_chksum+=,}elseif(length=={if(c_length18)return m_infom_info+=m_info2+=command[13];m_info2+=infostrtol(m_info,NULL, info2=strtol(m_info2,NULL,16);m_chksum+=command[15];m_chksum+=chksumstrtol(m_chksum,NULL16);CHECKSUM據(jù)}if(command[0]~||command[c_length-1]r'return0;//起始位數(shù)據(jù)不符合要求intsum=ver+adr+cmd1+cmd2+length+info+info2+chksum;if(sum!=256)returnelsereturn} mand函數(shù)判斷指令是否有效,對(duì)無(wú)效的指令直接返回。分別獲取從機(jī)返回指令的VER、ADR、RSPD、RTN、LENGTH、INFO、CHECKSUM字段數(shù)據(jù),對(duì)于RSPD數(shù)據(jù)段,若RSPD=0x02,表明系統(tǒng)處于電機(jī)轉(zhuǎn)速的狀態(tài),通過(guò)INFO數(shù)據(jù)段相應(yīng)數(shù)據(jù)并在終端輸出相應(yīng)結(jié)果。若RSPD=0x05,表明系統(tǒng)處于水溫控制模式溫度階段,通過(guò)INFO數(shù)據(jù)段獲取響應(yīng)溫度數(shù)據(jù)并輸出。若RSPD=0x08,表明系統(tǒng)處于超聲波測(cè)距的狀態(tài),通過(guò)INFO返回相應(yīng)的塊數(shù)或厚度值來(lái)計(jì)算出相應(yīng)距離。其代碼如boolCCOMTOOLDlg::Decode(CString { mand(command))return0;//指令不合法intc_lengthcommand.GetLengthCStringm_ver,m_adr,m_cmd1,m_cmd2,m_length,m_info,m_chksum,m_info2;intver,adr,cmd1,cmd2,length,info,chksum,info2=0;m_ver+=command[1];m_ver+=command[2];m_adr+=command[3];m_adr+=command[4];m_cmd1+=command[5];m_cmd1+=command[6];m_cmd2+=command[7];m_cmd2+=command[8];m_length+=command[9];m_lengthcommand[10];ver=strtol(m_ver,NULL,16);adr=strtol(m_adr,NULL,16);cmd1=strtol(m_cmd1,NULL,16);cmd2=strtol(m_cmd2,NULL,length=strtol(m_length,NULL,if{m_info+=command[11];m_info+=info=strtol(m_info,NULL,16);m_chksum+=command[13];m_chksum+=command[14];chksum=strtol(m_chksum,NULL,}elseif(length=={info=m_chksum+=command[11];m_chksum+=chksum=strtol(m_chksum,NULL,}elseif(length=={if(c_length!=18)return0;m_info+=command[11];m_info+=command[12];m_info2+=command[13];m_info2+=command[14];info=strtol(m_info,NULL,16);info2=strtol(m_info2,NULL,16);m_chksum+=command[15];m_chksum+=chksum=strtol(m_chksum,NULL,}switch{case //水溫模式數(shù)據(jù)CStringtext;text.Format("%d",info);text+="℃";m_log+="獲得當(dāng)前水溫\r\n";case
//超聲波模式數(shù)據(jù)if(info=={}}{} o m_info.Format("%d", m_info+=" m_info2.Format("%d", m_logm);m+...case}
//電機(jī)模式數(shù)據(jù)m_log+="獲得當(dāng)前轉(zhuǎn)速\r\n";CStringtext;text.Format("%d",info);}return}圖4-3-1本系統(tǒng)界本系統(tǒng)涉及了串口的設(shè)置,通訊狀態(tài)、debug命令、發(fā)送接收信息已經(jīng)通信、運(yùn)
4-3-2全局主系統(tǒng)由通信部分、debug命令部分、運(yùn)行日志以及三個(gè)子系統(tǒng)的信息回饋模debug命令窗口,用戶輸入命令后,程序調(diào)用mand函數(shù)對(duì)命令進(jìn)行檢查,如果發(fā)現(xiàn)參數(shù)輸入不正確,會(huì)有提示錯(cuò)誤的窗口彈出。點(diǎn)擊“生成指令”按鈕后,系統(tǒng)自動(dòng)生成chksum參數(shù),并將命令顯示在旁邊的textbox控件目標(biāo)水溫,或者點(diǎn)擊當(dāng)前水溫的button空間來(lái)獲得當(dāng)前水溫。同時(shí)水溫控制模塊還可以停止4-3-4 致科技創(chuàng)新4A通過(guò)這次科創(chuàng)實(shí)驗(yàn)的經(jīng)歷,更讓我們團(tuán)隊(duì)合作的重要性。這樣的課程,這樣的任務(wù)量,完全交給一個(gè)人來(lái)完成幾乎是不可能做到的事情。不僅僅是時(shí)間上不夠,遇到時(shí)一個(gè)人相處的辦法總是有限的,只有群策群力,在團(tuán)隊(duì)的幫助下,才能更有效地完成任務(wù)。團(tuán)隊(duì)中各有在實(shí)驗(yàn)完成的整個(gè)過(guò)程中,要感謝的人有很多。首先要感謝本次課程的指導(dǎo)老師,每當(dāng)我們遇到百思不得其解時(shí)總會(huì)得到老師耐心而專(zhuān)業(yè)的解答,他們認(rèn)真詳細(xì)的分析,解答,敬業(yè)的精神和和藹可親的態(tài)度令人感動(dòng)。老師的現(xiàn)場(chǎng)指導(dǎo)也為我們解決了不少難題,他們的諄諄教導(dǎo)和其次,要感謝我們的大組長(zhǎng),沒(méi)有他良好的組織與安排,整個(gè)系統(tǒng)的調(diào)試工作將會(huì)陷入一片。整個(gè)過(guò)程中,他監(jiān)督著各組進(jìn)度,為我們聯(lián)系實(shí)驗(yàn)器材,統(tǒng)籌聯(lián)絡(luò)各方時(shí)間,為整個(gè)實(shí)驗(yàn)然后,還要感謝我們?nèi)种飨到y(tǒng)小組組長(zhǎng)。我們所負(fù)責(zé)的全局主系統(tǒng)模塊應(yīng)該說(shuō)是整個(gè)系統(tǒng)的關(guān)鍵部分,它的實(shí)現(xiàn)建立在幾個(gè)子系統(tǒng)正常工作的基礎(chǔ)上。我們小組雖然起步不算早但憑借高效率的工作最終的完成了任務(wù),這其中小組長(zhǎng)功不可沒(méi)。從界面程序的編寫(xiě)與調(diào)試到系統(tǒng)的作為本科階段最后一次科創(chuàng)實(shí)驗(yàn),這次的經(jīng)歷為我們留下了很深的印象。這次實(shí)驗(yàn)不僅提高了分析解決問(wèn)題的能力,掌握了在電子設(shè)計(jì)過(guò)程中一些資料的獲取與學(xué)習(xí)方式,大家在一起群策。參考文[1]附錄軟件程序//COMTOOLDlg.cpp:implementation#include"stdafx.h"#include"COMTOOL.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=FILE;#defineEditBoxWidth50intCStringParity[]={_T("None"),_T("Odd"),_T("Even"),_T("Mark"),_T("Space")};intDataBits[]={5,6,7,8};int//CAboutDlgdialogusedforAppclassCAboutDlg:public{//Dialogenum{IDD=IDD_ABOUTBOX//ClassWizardgeneratedvirtualfunctionvirtualvoidDoDataExchange(CDataExchange* //DDX/DDVCAboutDlg::CAboutDlg():{}voidCAboutDlg::DoDataExchange(CDataExchange*{}BEGIN_MESSAGE_MAP(CAboutDlg,//Nomessage//CCOMTOOLDlgTOOLDlg(CWnd*pParent :CDialog(CCOMTOOLDlg::IDD,,,,,,,,,,,{m_EditTemp=_T("");m_EditSpeed=_T("");m_strSend=_T("");m_strReceive=_T("");//m_bHexR=//m_bHexS=true;m_strStatus=_T("關(guān)閉");m_strSendBytes=_T("0");m_strReceiveBytes_T("0");m_strPortNO=_T("");m_strBaudRate=_T("");m_strDataBits=_T("");m_strStopBits=_T("");m_strParity=_T("");SocketState=false;//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCCOMTOOLDlg::DoDataExchange(CDataExchange*{DDX_Control(pDX,IDC_Description,m_DescriptionCtrl);DDX_Control(pDX,IDC_Send,m_SendCtrl);DDX_Control(pDX,IDC_OpenClose,m_OpenCloseCtrl);DDX_Control(pDX,IDC_StopBits,m_StopBits);DDX_Control(pDX,IDC_ParityBits,m_Parity); ,m_PortNO);DDX_Control(pDX,IDC_Baudrate,m_BaudRate);DDX_Control(pDX,IDC_DataBits,m_DataBits);DDX_Text(pDX,IDC_SendEdit,m_strSend);DDX_Text(pDX,IDC_ReceiveEdit,m_strReceive);DDX_Check(pDX,IDC_BHexR,m_bHexR);DDX_Check(pDX,IDC_BHexS,m_bHexS);DDX_Text(pDX,IDC_Status,m_strStatus);DDX_Text(pDX,IDC_SendBytes,m_strSendBytes);DDX_Text(pDX,IDC_ReceiveBytes,m_strReceiveBytes); ,m_strPortNO);DDX_CBString(pDX,IDC_Baudrate,m_strBaudRate);DDX_CBString(pDX,IDC_DataBits,m_strDataBits);DDX_CBString(pDX,IDC_StopBits,m_strStopBits);DDX_CBString(pDX,IDC_ParityBits,m_strParity);DDX_Text(pDX,IDC_EditTemp,m_EditTemp);DDX_Text(pDX,IDC_EditSpeed,m_EditSpeed);DDX_Text(pDX,IDC_VER,m_ver);DDX_Text(pDX,IDC_ADR,m_adr);DDX_Text(pDX,IDC_CMD1,m_cmd1);DDX_Text(pDX,IDC_CMD2,m_cmd2);DDX_Text(pDX,IDC_LENGTH,m_length);DDX_Text(pDX,IDC_INFO,m_info);DDX_Text(pDX,IDC_CHKSUM,m_chksum);DDX_Control(pDX,IDC_Forward,m_forward);DDX_Control(pDX,IDC_Backward,m_backward);DDX_Control(pDX,IDC_DispTargetTemp,m_DispTargetTemp);DDX_Control(pDX,IDC_DispCurrentTemp,m_DispCurrentTemp);DDX_Text(pDX,IDC_Log,m_log);DDX_Control(pDX,IDC_Recv,m_Recv);DDX_Text(pDX,IDC_SocketEdit,m_SocketEdit);DDX_Control(pDX,IDC_Socked,m_Socked); DDX_Text(pDX,IDC_ReadNum,m_ReadNum);DDX_Control(pDX,IDC_T1,m_T1);DDX_Control(pDX,IDC_T2,m_T2);DDX_Control(pDX,IDC_DispTargetSpeed,m_DispTargetSpeed);DDX_Control(pDX,IDC_DispCurrentSpeed,m_DispCurrentSpeed);DDX_Control(pDX,IDC_IPADDRESS1,m_IP);}BEGIN_MESSAGE_MAP(CCOMTOOLDlg,ON_BN_CLICKED(IDC_ClearS,OnClearSendEdit)ON_BN_CLICKED(IDC_ClearR,OnClearReceiveEdit)ON_BN_CLICKED(IDC_OpenClose, ON_BN_CLICKED(IDC_Send,OnSend)ON_BN_CLICKED(IDC_BHexR, //CCOMTOOLDlgmessageBOOL {
//Add itemto //IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);C*pSys=GetSystem(FALSE);if(pSys!=NULL){CStringstrAbout;if(!strAbout.IsEmpty()){pSys->Append(MF_STRING,IDM_ABOUTBOX,strAbout}}//Settheiconforthisdialog.Theframeworkdoesthis//whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE); //SetbigiconSetIcon(m_hIcon, //Setsmall//TODO:AddextrainitializationhereCString//inti=for(int{}for(int{m_Parity.AddString((LPCTSTR)}for(int{}for(int{}for(inti=1;i<=MaxSerialPortNum-{{}}{}returnTRUE;//returnTRUEunlessyousetthefocustoa}void mand(UINTnID,LPARAM{if((nID&0xFFF0)=={}{}}
CAboutDlgdlgAbout;mand(nID,//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecode//todrawtheicon.ForMFCapplicationsusingthe/view//thisisautomaticallydoneforyoubythevoid{if{CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(RAM)dc.GetSafeHdc(),0);//CentericoninclientintcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/{}/x,y,m);}}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuser//theminimizedHCURSOR{return(HCURSOR)}void{//TODO:AddyourcontrolnotificationhandlercodehereCAboutDlgdlg;}void{//TODO:Addyourcontrolnotificationhandlercodehere}void{//TODO:Addyourcontrolnotificationhandlercodehere}void{//TODO:Addyourcontrolnotificationhandlercodehere}void{//TODO:AddyourcontrolnotificationhandlercodehereCStringtemp;{}elseif({intSelPortNO,SelBaudRate,SelDataBits,SelStopBits;charSelParity;}}
}
temp=m_strPortNO+",波特率:"+m_strBaudRate+"bps,校驗(yàn)位:"+m_strParity+",數(shù)據(jù)為:"+m_strDataBits+",停止位:"+m_strStopBits;","void{//TODO:Addyourcontrolnotificationhandlercodehere}void{//TODO:AddyourcontrolnotificationhandlercodehereCStringtemp;{MessageBox(誤MB_OK);}}voidCCOMTOOLDlg::OnTimer(UINT{//TODO:Addyourmessagehandlercodehereand/orcalldefaultCStringtemp;}LRESULTCCOMTOOLDlg::OnReceiveChar(UINTch,LONG 應(yīng){CStringtemp;m_strReceive+=DevideHexChar(ch)+_T("m_strReceive+=if(ch=='\r')CStringintc_length=m_strReceive.GetLength();for(inti=c_length-1;;i--){command+=m_strReceive[i];} {}}{m_log+="收到正確//m_log反饋信return}CStringCCOMTOOLDlg::ChangeCharstr2Hexstr(CString{CStringHexstr=_T("");for(inti=0;i<Length/2;i++){}return}void{//TODO:Addyourcontrolnotificationhandlercodehere}
void{//TODO:Addyourcontrolnotificationhandlercodehere}
voidCCOMTOOLDlg::HexStringFilter(CString{BOOLfor(int{
else}} bineHexChar(charCharH,char{charCString elseif(CharH>='a'&&CharH<='f') else elseif(CharL>='a'&&CharL<='f') else return}CStringCCOMTOOLDlg::DevideHexChar(char{CStringreturn}void{TODO添加控件通知處理程序代intver,adr,cmd1,cmd2,length,info,chksum,info2=0;CStringi1,i2;CStringtemp;temp+="~";temp+=m_ver;temp+=m_adr;temp+=m_cmd1;temp+=m_cmd2;temp+=m_length;temp+=m_info;ver=strtol(m_ver,NULL,16);adr=strtol(m_adr,NULL,16);cmd1=strtol(m_cmd1,NULL,16);cmd2=strtol(m_cmd2,NULL,length=strtol(m_length,NULL,16);{info=strtol(i1,NULL,16);info2=strtol(i2,NULL,}elseinfo=strtol(m_info,NULL,chksum=256-ver-adr-cmd1-cmd2-length-info-info2;m_chksum.Format("%.2X",chksum);temp+='\r';if {}{}}
m_SocketEdit="";m_SocketEdit+=temp;m_chksum="";void{TODO添加控件通知處理程序代CProgressCtrl*TargetTemp=(CProgressCtrl*)GetDlgItem(IDC_TargetTemp);intEditTemp=strtol(m_EditTemp,NULL,0);if(EditTemp>99||EditTemp<30){}{
MessageBox("不在范圍內(nèi)(30~99CStringtext;text.Format("%d",EditTemp);text+="℃"; CStringintchksum=256-21-EditTemp;temp.Format("%.2X",EditTemp);m_strSend="~ m_strSend+=temp;temp.Format("%.2X",chksum);m+=;
if(SocketState)ServSocket->Send(LPCTSTR(m_strSend),m_strSend.GetLengthm_logm_log+=text;m_log+=}}void{TODO添加控件通知處理程序代CProgressCtrl*TargetSpeed=(CProgressCtrl*)GetDlgItem(IDC_TargetSpeed);intEditSpeed=strtol(m_EditSpeed,NULL,0);if(EditSpeed<5||EditSpeed>70){}{
MessageBox("不在范圍內(nèi)(5~70),請(qǐng)重新輸入CStringtemp;intchksum;{}{}
m_strSend="~ chksum=256-23-EditSpeed;m_strSend="~ chksum=256-24-EditSpeed;temp.Format("%.2X",EditSpeed);m_strSend+=temp;m_strSend+=temp;m_strSend+='\r';if(SocketState)ServSocket->Send(LPCTSTR(m_strSend),m_strSend.GetLength(),0);m_log+="系統(tǒng)設(shè)定目標(biāo)轉(zhuǎn)速為";m_log+=m_EditSpeed;if(m_forward.GetCheckm_log轉(zhuǎn)";elsem_log+=",反轉(zhuǎn)";m_log+="\r\n";}}bool mand(CString 查指{intc_length=CStringm_ver,m_adr,m_cmd1,m_cmd2,m_length,m_info,m_chksum,m_info2;intver,adr,cmd1,cmd2,length,info,chksum,info2=0;if(c_length!=18&&c_length!=16&&c_length!=14)return0;m_ver+=command[1];m_ver+=command[2];m_adr+=command[3];m_adr+=command[4];m_cmd1+=command[5];m_cmd1+=command[6];m_cmd2+=command[7];m_cmd2+=command[8];m_length+=command[9];m_length+=ver=strtol(m_ver,NULL,16);adr=strtol(m_adr,NULL,16);cmd1=strtol(m_cmd1,NULL,16);cmd2=strtol(m_cmd2,NULL,length=strtol(m_length,NULL,16);if(length==1){if(c_length!=16)return0;m_info+=command[11];m_info+=command[12];info=strtol(m_info,NULL,16);m_chksum+=command[13];m_chksum+=command[14];chksum=strtol(m_chksum,NULL,}elseif(length=={if(c_length!=14)returninfo=m_chksum+=command[11];m_chksum+=chksum=strtol(m_chksum,NULL,}elseif(length=={if(c_length!=18)return0;m_info+=command[11];m_info+=command[12];m_info2+=command[13];m_info2+=command[14];info=strtol(m_info,NULL,16);info2=strtol(m_info2,NULL,16);m_chksum+=command[15];m_chksum+=chksum=strtol(m_chksum,NULL,}if(command[0]!='~'||command[c_length-1]!='\r')return0;intsum=ver+adr+cmd1+cmd2+length+info+info2+chksum;if(sum!=256)returnelsereturn}boolCCOMTOOLDlg::Decode(CStringcommand) veryimportant{ mand(command))return0;intc_length=command.GetLength();CStringm_ver,m_adr,m_cmd1,m_cmd2,m_length,m_info,m_chksum,m_info2;intver,adr,cmd1,cmd2,length,info,chksum,info2=0;m_ver+=command[1];m_ver+=command[2];m_adr+=command[3];m_adr+=command[4];m_cmd1+=command[5];m_cmd1+=command[6];m_cmd2+=command[7];m_cmd2+=command[8];m_length+=command[9];m_length+=ver=strtol(m_ver,NULL,16);adr=strtol(m_adr,NULL,16);cmd1=strtol(m_cmd1,NULL,16);cmd2=strtol(m_cmd2,NULL,length=strtol(m_length,NULL,16);if(length==1){m_info+=command[11];m_info+=info=strtol(m_info,NULL,16);m_chksum+=command[13];m_chksum+=command[14];chksum=strtol(m_chksum,NULL,}elseif(length=={info=m_chksum+=command[11];m_chksum+=chksum=strtol(m_chksum,NULL,}elseif(length=={if(c_length!=18)return0;m_info+=command[11];m_info+=command[12];m_info2+=command[13];m_info2+=command[14];info=strtol(m_info,NULL,16);info2=strtol(m_info2,NULL,16);m_chksum+=command[15];m_chksum+=chksum=strtol(m_chksum,NULL,}switch{case
//水溫CStringtext;text.Format("%d",info);text+="℃";m_log+="獲得當(dāng)前水溫\r\n";case
if(info=={
}case{
}{}
m_log取得當(dāng)前物塊層數(shù)m_info.Format("%d",info);m_info+=".";m_info2.Format("%d",info2);m_log取得當(dāng)前層數(shù)厚度}
m_log+="獲得當(dāng)前轉(zhuǎn)速\r\n";CStringtext;text.Format("%d",info);return}void{TODO添加控件通知處理程序代}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log電機(jī)系統(tǒng)重新\r\n";}void{m_strSend="~ m_strSend+='\r';CStringtemp="~ temp+='\r';if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log系統(tǒng)命令止加熱!\r\n";}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log水溫系統(tǒng)重新\r\n";}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log+="系統(tǒng)要求當(dāng)前水溫...\r\n";}void{TODO代 {m_log+="連接中...\r\n";{}{}}
m_log+="成功連接到本地系統(tǒng),可以開(kāi)始通信\r\n";SocketState=deleteServSocket;SocketState=}{}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log要求超聲波模塊返回物r\n";}void{if(m_ReadNum!={m_strSend="~110302";intn=atol(m_ReadNum);intchksum=256-22-n;num.Format("%.2X",n);m_strSend+=num;m_strSend+="00";m_strSend+=temp;m_strSend+='\r';if(SocketState)ServSocket->Send(LPCTSTR(m_strSend),m_strSend.GetLength(),0);m_log+="第";m_logm_log層的}}void{CStringtemp;{temp= m_log系統(tǒng)停轉(zhuǎn)}{}
temp= m_log系統(tǒng)轉(zhuǎn)停轉(zhuǎn)temp+='\r';m_strSend=temp;if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log+="當(dāng)前轉(zhuǎn)速...\r\n";}void{CStringtemp;{temp="~ m_log轉(zhuǎn)開(kāi)轉(zhuǎn)r\n";}{}
temp="~ m_log反轉(zhuǎn)r\n";temp+='\r';m_strSend=temp;if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);}void{m_log="";}//COMTOOL.h:mainheaderfilefortheCOMTOOL#ifTOOL_HDFTOOL_HDF#if_MSC_VER>#pragma#endif//_MSC_VER> #errorinclude'stdafx.h'beforeincludingthisfilefor#include //main////SeeCOMTOOL.cppfortheimplementationofthisclassCCOMTOOLApp:public{////ClassWizardgeneratedvirtualfunctionvirtualBOOL////NOTE-theClassWizardwilladdandremovememberfunctions DONOTEDITwhatyouseeintheseblocksofgeneratedcode//VisualC++willinsertadditionaldeclarationsimmediaybeforethepreviousline.#endif//!defined( TOOL_H6AD8468
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)OTTTV行業(yè)市場(chǎng)深度分析及投資戰(zhàn)略研究報(bào)告
- 2025農(nóng)村荒地租賃合同協(xié)議書(shū)
- 2025銀行借款的合同范本
- 2025企業(yè)內(nèi)部承包合同范本
- qc小組活動(dòng)總結(jié)中進(jìn)行自我評(píng)價(jià)的內(nèi)容
- 2024年粵教新版九年級(jí)物理上冊(cè)階段測(cè)試試卷含答案
- 2到8的乘法口訣
- 造紙廠電力安裝合同模板
- 廣州二手房贈(zèng)送家電合同范本
- 水庫(kù)大壩伸縮縫施工合同
- 高考英語(yǔ)一輪復(fù)習(xí)知識(shí)清單(全國(guó)版)專(zhuān)題06 語(yǔ)法填空倒裝句100題(精練) 含答案及解析
- 侵入性器械(操作)相關(guān)感染防控制度的落實(shí)
- 土方開(kāi)挖及周邊環(huán)境保護(hù)方案
- 2024年安徽省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 2024年度危廢培訓(xùn)完整課件
- 福建師范大學(xué)《教育學(xué)(含教師職業(yè)道德)》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘋(píng)果三星專(zhuān)利之爭(zhēng)
- 人教版2024-2025學(xué)年六年級(jí)數(shù)學(xué)上冊(cè)5.4 扇形的面積 同步練習(xí)(附答案解析)
- 《Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)》全套教學(xué)課件
- 學(xué)校食堂菜譜及定價(jià)方案
- 高考英語(yǔ)一輪復(fù)習(xí)英語(yǔ)語(yǔ)法專(zhuān)題復(fù)習(xí):時(shí)態(tài)和語(yǔ)態(tài)課件(共45張)
評(píng)論
0/150
提交評(píng)論