版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
完成時間2012.6.15科科技創(chuàng)新[4A]全局主系統(tǒng)設(shè)計報告項目名稱:主從式信息測控系統(tǒng)設(shè)計小組編號:12設(shè)計小組名單:(組長)郭曉希、梁津垚交通大學(xué)電子信息與電氣FF垚F摘要:全局主系統(tǒng)是利用計算機圖形界面控制計算機串口發(fā)送與接收數(shù)據(jù),經(jīng)過無線局域網(wǎng)與本系統(tǒng)實現(xiàn)無線通信,并通過本系統(tǒng)對各個子系統(tǒng)進行無線。闡述并分析了全局主系全局主機的主要功能包括:實時顯示各從系統(tǒng)當前狀態(tài)、對各各從系統(tǒng)控制、以及和本系統(tǒng)的通信。其中,前兩者將在本文中詳細討論,與本系統(tǒng)的通信部分可參見本項目的本系:Thegeneralcontrolsystemcommunicateswiththelocalcontrolsystemandcontrolstheworkingofthesubsystems.WeusetheGUIpanelandtheserialportonPCtosendandreceivedata,whichisalsoworkingthroughWIFIandenablethewirelesscontrolfunction.Thisreportpresentstheprocessofthedesignanddevelopmentofthegeneralcontrolsystem,includingthemainfunction,softwaredesign,debuggingandtheusageofthesystem.Themainfunctionsofthislocalcontrolcenterincludes:real-timedisplayofstatusofslave-systems,controlanyoftheslave-systems,andcommunicatewiththelocalmainsystem.Amongthesefunctions,thefirsttwowillbeelaborateinthisreportandthelatterwillbediscussedindetailwithinthereportoflocalmainsystem.GeneralControlSystem,GUIPanel, 概 編寫說 名詞定 縮略 系統(tǒng)總 系統(tǒng)組 系統(tǒng)的主要功 通信協(xié)議設(shè) 信息幀部 無線局域網(wǎng)部 WIFI網(wǎng) TCP/IP協(xié) 與 系統(tǒng)通 圖形界面的軟件設(shè) 圖形界面概 軟件設(shè) MFC環(huán)境下使用套接 幾個重要的函數(shù)介 界面設(shè) 系統(tǒng)界 全局主系統(tǒng)模 水溫系統(tǒng)界 電機系統(tǒng)界 超聲波系統(tǒng)界 致 參考文 附錄軟件程序............................................................................................概是交通大學(xué)電子信息與電氣大三下科技創(chuàng)新(4A)課程全局主系統(tǒng)小組12小組的具體設(shè)計過程與完成情況而編寫。報告闡述了全局主系統(tǒng)的設(shè)計與本文為本系統(tǒng)的使用者提供了技術(shù)上的支持及操作上的說明,同時可供廣大電子設(shè)計者子系統(tǒng)(su-sye)為了實現(xiàn)系統(tǒng)的功能所分割出的系統(tǒng)小模塊,包括硬件和軟件部 :GraphicalUserInterface,圖形用戶接口。 系統(tǒng)總PC本系統(tǒng)的PC部分也向用戶提供與全局主系統(tǒng)類似的控制功能,并通過串口向本系系統(tǒng)工作時,人操作PC機上的GUI圖形用戶界面,GUI程序向本系統(tǒng)的電路部分輸入信號。本系統(tǒng)對收到令數(shù)據(jù)進行處理,并發(fā)送給相應(yīng)的子系統(tǒng)。操作得到子系統(tǒng)的響應(yīng)后,本地主系統(tǒng)對全局主系統(tǒng)進行反饋。PCGUI程序檢測到正確的反饋信息后,顯示出操作完成的情況。GUI界面操作來控制各子系統(tǒng)的工作情況,并顯示各子系統(tǒng)的工作狀態(tài)。本系統(tǒng)是利用MFCC++語言編寫的程序作為本實驗的人機界面。通信協(xié)議設(shè)計通信協(xié)議的主要功能是進行全局主系統(tǒng)與本系統(tǒng)之間信息的傳輸,進而實現(xiàn)全局主系統(tǒng)信息幀部分【2通信主機和從機間信息傳輸,以信息幀(數(shù)據(jù)包)方式進行,信息幀在傳輸時采用全發(fā)往某特定從機令幀,稱為單播命令幀;由通信主機發(fā)往所有從機令幀,稱為廣播命令幀。響應(yīng)幀是對確定的單播命令幀的回復(fù),兩者有一一對應(yīng)關(guān)系;從機收到廣播命令傳輸時字符(12[2[2[2[2[2[1]2[1序通信對功能描命令1水溫控檢測狀~無程序自動計設(shè)定溫~0x01:開始加溫0x00:停止加無溫~無重啟系~無2電機轉(zhuǎn)檢測狀~無寫工~0x00:正轉(zhuǎn)停無0x01:正轉(zhuǎn)開轉(zhuǎn)0x02:反轉(zhuǎn)停無0x03:反轉(zhuǎn)開轉(zhuǎn)狀~無重啟系~無3超聲檢測狀~無~0x00:查詢物塊層無0x011、2層厚0x023、4層厚0x035、6層厚0x047、8層厚重啟系~無圖3-1-2 響應(yīng)II1~0x00:無錯錯0x03:命0x01:~0x00:設(shè)定成0x01:設(shè)定失~0x00:正向停不穩(wěn)轉(zhuǎn)0x01:正向停穩(wěn)0x02:正向運不穩(wěn)0x03:正向運穩(wěn)0x04:反向停不穩(wěn)0x05:反向停穩(wěn)0x08:反向運穩(wěn)2~0x01:~0x01:設(shè)定成0x00:設(shè)定失~0x00:溫3~0x01:~塊數(shù)值或厚度WIFI是一種短程無線傳輸技術(shù),能夠在數(shù)百英尺范圍內(nèi)支持互聯(lián)網(wǎng)接入的無線電信號。幫助用戶電子郵件、Web和流式的互聯(lián)網(wǎng)技術(shù),它為用戶提供了無線的寬帶互聯(lián)網(wǎng)。無線通信使用WIFI主要基于如下考慮:第一,WIFI是經(jīng)過廣泛驗證的可靠的無線解決方WIFI的操作簡便,兩臺終端之間建立鏈路的方式比較簡單。第三,WIFI基于TCP/IP協(xié)議,而操作系統(tǒng)和開發(fā)環(huán)境都對TCP/IP環(huán)境下的SOCKET開發(fā)TCP/IPInternetInternetIP協(xié)議和傳輸TCP協(xié)議組成。TCP/IP定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉藴?。通俗而言:TCP負責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺電腦規(guī)定一個地址。【1】TCP數(shù)據(jù)信息:TCP頭部+實際數(shù)據(jù)(TCP頭包括源和目標主機端、順序號、確認號、校IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時要拆除連接,由于TCP是TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用“帶重傳的肯定確認”技術(shù)來實現(xiàn)傳輸?shù)目煽啃?。TCP還采用一種稱為“滑動窗口”的方式進行流量控制,所謂窗口實際表示接收能力,用以限制發(fā)送如果IP數(shù)據(jù)包中有已經(jīng)封好TCP數(shù)據(jù)包,那么IP將把它們向?上?傳送TCP層。TCP將包TCP將它的信息送到更的應(yīng)用程序,例如net的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動程序和物理介質(zhì),最后到接收與 3-2-3全局系統(tǒng)與本地系統(tǒng)的通信過程圖形界面的軟件設(shè)計全局主系統(tǒng)以及本系統(tǒng)PC端部分的用戶界面都使用C++語言進行開發(fā),界面則使 象,有許多成框架和class可以使用,比如CString,CWindow。利用其派生性,可以減少開發(fā)全局主系統(tǒng)和本系統(tǒng)使用了用個用戶控制程序,用戶界面相,但是二者通方式的實現(xiàn)不同。全局系統(tǒng)使用WIFI,本地系統(tǒng)則同時使用WIF(與全局通信)和串口方式(與子系統(tǒng)通信)GUI層只有抽象出的虛擬接口,WindowsocketTCP連接或多個應(yīng)用程序進程可能需要通過同一個TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進程和連接,許多計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口【3】。ServDemoDlg.h,語句“#pragmaonce”后加入如下語句#include"CServSocketh"#include"CRecvSocketCServSocket*ServSocket;CServSocketh中,語句“#pragmaonce”后加入如下語句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ù)的長ctemp接收數(shù)據(jù)的數(shù)j每次接收的最大長度,可重載CRecvSocket類的OnClose函數(shù),判斷客戶端連接的斷開CStringstr;ServDemoDlg.h,語句“#pragmaonce”后加入如下語句#include"CServSocketh"CServSocketCServSocket.h中,語句“#pragmaonce”后加入如下語句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ù)的長ctemp接收數(shù)據(jù)的數(shù)j每次接收的最大長度,可重載CServSocket類的OnClose函數(shù),判斷客戶端連接的斷開CStringstr;mand檢查VER檢驗判斷CMD1、CMD2的和有效性本函數(shù)通過檢測輸入信息幀的長度、起止位等信息判斷指令的。c_length為輸入指令的長度。指令的有效長度為14、16、18,不符合有效長度的指令將直接返回錯誤。然后通過獲取指VER、ADDR、CMD1、CMD2、LENGTH、INFO、CHECKSUM的數(shù)據(jù),_engh為信息幀NH字節(jié)數(shù)據(jù),同過ENTH字節(jié)數(shù)據(jù)信息幀長度。當ENTHx004,當ENH為001ENH為x02NO、HEUMVEDDD1、2256要求,則返回錯誤。另外,信息幀應(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;//長度非有效長度,返回錯誤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);//對有效信息幀計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ù)判斷指令是否有效,對無效的指令直接返回。分別獲取從機返回指令的VER、ADR、RSPD、RTN、LENGTH、INFO、CHECKSUM字段數(shù)據(jù),對于RSPD數(shù)據(jù)段,若RSPD=0x02,表明系統(tǒng)處于電機轉(zhuǎn)速的狀態(tài),通過INFO數(shù)據(jù)段相應(yīng)數(shù)據(jù)并在終端輸出相應(yīng)結(jié)果。若RSPD=0x05,表明系統(tǒng)處于水溫控制模式溫度階段,通過INFO數(shù)據(jù)段獲取響應(yīng)溫度數(shù)據(jù)并輸出。若RSPD=0x08,表明系統(tǒng)處于超聲波測距的狀態(tài),通過INFO返回相應(yīng)的塊數(shù)或厚度值來計算出相應(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+="獲得當前水溫\r\n";case
//超聲波模式數(shù)據(jù)if(info=={}}{} o m_info.Format("%d", m_info+=" m_info2.Format("%d", m_logm);m+...case}
//電機模式數(shù)據(jù)m_log+="獲得當前轉(zhuǎn)速\r\n";CStringtext;text.Format("%d",info);}return}圖4-3-1本系統(tǒng)界本系統(tǒng)涉及了串口的設(shè)置,通訊狀態(tài)、debug命令、發(fā)送接收信息已經(jīng)通信、運
4-3-2全局主系統(tǒng)由通信部分、debug命令部分、運行日志以及三個子系統(tǒng)的信息回饋模debug命令窗口,用戶輸入命令后,程序調(diào)用mand函數(shù)對命令進行檢查,如果發(fā)現(xiàn)參數(shù)輸入不正確,會有提示錯誤的窗口彈出。點擊“生成指令”按鈕后,系統(tǒng)自動生成chksum參數(shù),并將命令顯示在旁邊的textbox控件目標水溫,或者點擊當前水溫的button空間來獲得當前水溫。同時水溫控制模塊還可以停止4-3-4 致科技創(chuàng)新4A通過這次科創(chuàng)實驗的經(jīng)歷,更讓我們團隊合作的重要性。這樣的課程,這樣的任務(wù)量,完全交給一個人來完成幾乎是不可能做到的事情。不僅僅是時間上不夠,遇到時一個人相處的辦法總是有限的,只有群策群力,在團隊的幫助下,才能更有效地完成任務(wù)。團隊中各有在實驗完成的整個過程中,要感謝的人有很多。首先要感謝本次課程的指導(dǎo)老師,每當我們遇到百思不得其解時總會得到老師耐心而專業(yè)的解答,他們認真詳細的分析,解答,敬業(yè)的精神和和藹可親的態(tài)度令人感動。老師的現(xiàn)場指導(dǎo)也為我們解決了不少難題,他們的諄諄教導(dǎo)和其次,要感謝我們的大組長,沒有他良好的組織與安排,整個系統(tǒng)的調(diào)試工作將會陷入一片。整個過程中,他監(jiān)督著各組進度,為我們聯(lián)系實驗器材,統(tǒng)籌聯(lián)絡(luò)各方時間,為整個實驗然后,還要感謝我們?nèi)种飨到y(tǒng)小組組長。我們所負責(zé)的全局主系統(tǒng)模塊應(yīng)該說是整個系統(tǒng)的關(guān)鍵部分,它的實現(xiàn)建立在幾個子系統(tǒng)正常工作的基礎(chǔ)上。我們小組雖然起步不算早但憑借高效率的工作最終的完成了任務(wù),這其中小組長功不可沒。從界面程序的編寫與調(diào)試到系統(tǒng)的作為本科階段最后一次科創(chuàng)實驗,這次的經(jīng)歷為我們留下了很深的印象。這次實驗不僅提高了分析解決問題的能力,掌握了在電子設(shè)計過程中一些資料的獲取與學(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,校驗位:"+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),請重新輸入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è)定目標轉(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+="獲得當前水溫\r\n";case
if(info=={
}case{
}{}
m_log取得當前物塊層數(shù)m_info.Format("%d",info);m_info+=".";m_info2.Format("%d",info2);m_log取得當前層數(shù)厚度}
m_log+="獲得當前轉(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電機系統(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)要求當前水溫...\r\n";}void{TODO代 {m_log+="連接中...\r\n";{}{}}
m_log+="成功連接到本地系統(tǒng),可以開始通信\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+="當前轉(zhuǎn)速...\r\n";}void{CStringtemp;{temp="~ m_log轉(zhuǎn)開轉(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高考語文復(fù)習(xí)知識清單第2章文學(xué)類文本閱讀(一)小說專題01賞析小說故事情節(jié)(學(xué)生版+解析)
- 臍橙樹打藥安全責(zé)任書承包合同(2篇)
- 南京工業(yè)大學(xué)浦江學(xué)院《專業(yè)綜合實訓(xùn)(通信工程)》2022-2023學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)浦江學(xué)院《審計學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 多變的紙條說課稿
- 小石城7#樓 施工組織設(shè)計
- 南京工業(yè)大學(xué)浦江學(xué)院《建筑給水排水工程》2023-2024學(xué)年第一學(xué)期期末試卷
- 《小石潭記》說課稿
- 小學(xué)音樂面試《哦十分鐘》說課稿
- 南京工業(yè)大學(xué)《中日比較文學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 當代社會政策分析 課件 第五章 健康社會政策
- 建設(shè)項目使用草原可行性報告編寫規(guī)范
- 2024年安全月全員消防安全知識培訓(xùn)
- 交換機維護方案
- 2024防火窗技術(shù)規(guī)范
- 世界生態(tài)環(huán)境狀況簡介
- 2022年中國鐵路招聘考試試題及答案
- 安全標準化建設(shè)事件事故管理事故事件統(tǒng)計分析臺賬
- 中國風(fēng)書法練字字帖
- GB/T 43802-2024綠色產(chǎn)品評價物流周轉(zhuǎn)箱
- 扣好人生第一粒扣子爭做新時代好少年班會課件
評論
0/150
提交評論