工程實踐與科技創新4a-第12大組全局主系統小組設計報告_第1頁
工程實踐與科技創新4a-第12大組全局主系統小組設計報告_第2頁
工程實踐與科技創新4a-第12大組全局主系統小組設計報告_第3頁
工程實踐與科技創新4a-第12大組全局主系統小組設計報告_第4頁
工程實踐與科技創新4a-第12大組全局主系統小組設計報告_第5頁
已閱讀5頁,還剩67頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

完成時間2012.6.15科科技創新[4A]全局主系統設計報告項目名稱:主從式信息測控系統設計小組編號:12設計小組名單:(組長)郭曉希、梁津垚交通大學電子信息與電氣FF垚F摘要:全局主系統是利用計算機圖形界面控制計算機串口發送與接收數據,經過無線局域網與本系統實現無線通信,并通過本系統對各個子系統進行無線。闡述并分析了全局主系全局主機的主要功能包括:實時顯示各從系統當前狀態、對各各從系統控制、以及和本系統的通信。其中,前兩者將在本文中詳細討論,與本系統的通信部分可參見本項目的本系:Thegeneralcontrolsystemcommunicateswiththelocalcontrolsystemandcontrolstheworkingofthesubsystems.WeusetheGUIpanelandtheserialportonPCtosendandreceivedata,whichisalsoworkingthroughWIFIandenablethewirelesscontrolfunction.Thisreportpresentstheprocessofthedesignanddevelopmentofthegeneralcontrolsystem,includingthemainfunction,softwaredesign,debuggingandtheusageofthesystem.Themainfunctionsofthislocalcontrolcenterincludes:real-timedisplayofstatusofslave-systems,controlanyoftheslave-systems,andcommunicatewiththelocalmainsystem.Amongthesefunctions,thefirsttwowillbeelaborateinthisreportandthelatterwillbediscussedindetailwithinthereportoflocalmainsystem.GeneralControlSystem,GUIPanel, 概 編寫說 名詞定 縮略 系統總 系統組 系統的主要功 通信協議設 信息幀部 無線局域網部 WIFI網 TCP/IP協 與 系統通 圖形界面的軟件設 圖形界面概 軟件設 MFC環境下使用套接 幾個重要的函數介 界面設 系統界 全局主系統模 水溫系統界 電機系統界 超聲波系統界 致 參考文 附錄軟件程序............................................................................................概是交通大學電子信息與電氣大三下科技創新(4A)課程全局主系統小組12小組的具體設計過程與完成情況而編寫。報告闡述了全局主系統的設計與本文為本系統的使用者提供了技術上的支持及操作上的說明,同時可供廣大電子設計者子系統(su-sye)為了實現系統的功能所分割出的系統小模塊,包括硬件和軟件部 :GraphicalUserInterface,圖形用戶接口。 系統總PC本系統的PC部分也向用戶提供與全局主系統類似的控制功能,并通過串口向本系系統工作時,人操作PC機上的GUI圖形用戶界面,GUI程序向本系統的電路部分輸入信號。本系統對收到令數據進行處理,并發送給相應的子系統。操作得到子系統的響應后,本地主系統對全局主系統進行反饋。PCGUI程序檢測到正確的反饋信息后,顯示出操作完成的情況。GUI界面操作來控制各子系統的工作情況,并顯示各子系統的工作狀態。本系統是利用MFCC++語言編寫的程序作為本實驗的人機界面。通信協議設計通信協議的主要功能是進行全局主系統與本系統之間信息的傳輸,進而實現全局主系統信息幀部分【2通信主機和從機間信息傳輸,以信息幀(數據包)方式進行,信息幀在傳輸時采用全發往某特定從機令幀,稱為單播命令幀;由通信主機發往所有從機令幀,稱為廣播命令幀。響應幀是對確定的單播命令幀的回復,兩者有一一對應關系;從機收到廣播命令傳輸時字符(12[2[2[2[2[2[1]2[1序通信對功能描命令1水溫控檢測狀~無程序自動計設定溫~0x01:開始加溫0x00:停止加無溫~無重啟系~無2電機轉檢測狀~無寫工~0x00:正轉停無0x01:正轉開轉0x02:反轉停無0x03:反轉開轉狀~無重啟系~無3超聲檢測狀~無~0x00:查詢物塊層無0x011、2層厚0x023、4層厚0x035、6層厚0x047、8層厚重啟系~無圖3-1-2 響應II1~0x00:無錯錯0x03:命0x01:~0x00:設定成0x01:設定失~0x00:正向停不穩轉0x01:正向停穩0x02:正向運不穩0x03:正向運穩0x04:反向停不穩0x05:反向停穩0x08:反向運穩2~0x01:~0x01:設定成0x00:設定失~0x00:溫3~0x01:~塊數值或厚度WIFI是一種短程無線傳輸技術,能夠在數百英尺范圍內支持互聯網接入的無線電信號。幫助用戶電子郵件、Web和流式的互聯網技術,它為用戶提供了無線的寬帶互聯網。無線通信使用WIFI主要基于如下考慮:第一,WIFI是經過廣泛驗證的可靠的無線解決方WIFI的操作簡便,兩臺終端之間建立鏈路的方式比較簡單。第三,WIFI基于TCP/IP協議,而操作系統和開發環境都對TCP/IP環境下的SOCKET開發TCP/IPInternetInternetIP協議和傳輸TCP協議組成。TCP/IP定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給因特網的每一臺電腦規定一個地址。【1】TCP數據信息:TCP頭部+實際數據(TCP頭包括源和目標主機端、順序號、確認號、校IP層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,并把該數據包發送到更---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP并沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。TCP是面向連接的通信協議,通過三次握手建立連接,通訊完成時要拆除連接,由于TCP是TCP提供的是一種可靠的數據流服務,采用“帶重傳的肯定確認”技術來實現傳輸的可靠性。TCP還采用一種稱為“滑動窗口”的方式進行流量控制,所謂窗口實際表示接收能力,用以限制發送如果IP數據包中有已經封好TCP數據包,那么IP將把它們向?上?傳送TCP層。TCP將包TCP將它的信息送到更的應用程序,例如net的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最后到接收與 3-2-3全局系統與本地系統的通信過程圖形界面的軟件設計全局主系統以及本系統PC端部分的用戶界面都使用C++語言進行開發,界面則使 象,有許多成框架和class可以使用,比如CString,CWindow。利用其派生性,可以減少開發全局主系統和本系統使用了用個用戶控制程序,用戶界面相,但是二者通方式的實現不同。全局系統使用WIFI,本地系統則同時使用WIF(與全局通信)和串口方式(與子系統通信)GUI層只有抽象出的虛擬接口,WindowsocketTCP連接或多個應用程序進程可能需要通過同一個TCP協議端口傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了稱為套接字(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接收到數據的長ctemp接收數據的數j每次接收的最大長度,可重載CRecvSocket類的OnClose函數,判斷客戶端連接的斷開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接收到數據的長ctemp接收數據的數j每次接收的最大長度,可重載CServSocket類的OnClose函數,判斷客戶端連接的斷開CStringstr;mand檢查VER檢驗判斷CMD1、CMD2的和有效性本函數通過檢測輸入信息幀的長度、起止位等信息判斷指令的。c_length為輸入指令的長度。指令的有效長度為14、16、18,不符合有效長度的指令將直接返回錯誤。然后通過獲取指VER、ADDR、CMD1、CMD2、LENGTH、INFO、CHECKSUM的數據,_engh為信息幀NH字節數據,同過ENTH字節數據信息幀長度。當ENTHx004,當ENH為001ENH為x02NO、HEUMVEDDD1、2256要求,則返回錯誤。另外,信息幀應以’~’為起始,’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據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據}if(command[0]~||command[c_length-1]r'return0;//起始位數據不符合要求intsum=ver+adr+cmd1+cmd2+length+info+info2+chksum;if(sum!=256)returnelsereturn} mand函數判斷指令是否有效,對無效的指令直接返回。分別獲取從機返回指令的VER、ADR、RSPD、RTN、LENGTH、INFO、CHECKSUM字段數據,對于RSPD數據段,若RSPD=0x02,表明系統處于電機轉速的狀態,通過INFO數據段相應數據并在終端輸出相應結果。若RSPD=0x05,表明系統處于水溫控制模式溫度階段,通過INFO數據段獲取響應溫度數據并輸出。若RSPD=0x08,表明系統處于超聲波測距的狀態,通過INFO返回相應的塊數或厚度值來計算出相應距離。其代碼如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 //水溫模式數據CStringtext;text.Format("%d",info);text+="℃";m_log+="獲得當前水溫\r\n";case

//超聲波模式數據if(info=={}}{} o m_info.Format("%d", m_info+=" m_info2.Format("%d", m_logm);m+...case}

//電機模式數據m_log+="獲得當前轉速\r\n";CStringtext;text.Format("%d",info);}return}圖4-3-1本系統界本系統涉及了串口的設置,通訊狀態、debug命令、發送接收信息已經通信、運

4-3-2全局主系統由通信部分、debug命令部分、運行日志以及三個子系統的信息回饋模debug命令窗口,用戶輸入命令后,程序調用mand函數對命令進行檢查,如果發現參數輸入不正確,會有提示錯誤的窗口彈出。點擊“生成指令”按鈕后,系統自動生成chksum參數,并將命令顯示在旁邊的textbox控件目標水溫,或者點擊當前水溫的button空間來獲得當前水溫。同時水溫控制模塊還可以停止4-3-4 致科技創新4A通過這次科創實驗的經歷,更讓我們團隊合作的重要性。這樣的課程,這樣的任務量,完全交給一個人來完成幾乎是不可能做到的事情。不僅僅是時間上不夠,遇到時一個人相處的辦法總是有限的,只有群策群力,在團隊的幫助下,才能更有效地完成任務。團隊中各有在實驗完成的整個過程中,要感謝的人有很多。首先要感謝本次課程的指導老師,每當我們遇到百思不得其解時總會得到老師耐心而專業的解答,他們認真詳細的分析,解答,敬業的精神和和藹可親的態度令人感動。老師的現場指導也為我們解決了不少難題,他們的諄諄教導和其次,要感謝我們的大組長,沒有他良好的組織與安排,整個系統的調試工作將會陷入一片。整個過程中,他監督著各組進度,為我們聯系實驗器材,統籌聯絡各方時間,為整個實驗然后,還要感謝我們全局主系統小組組長。我們所負責的全局主系統模塊應該說是整個系統的關鍵部分,它的實現建立在幾個子系統正常工作的基礎上。我們小組雖然起步不算早但憑借高效率的工作最終的完成了任務,這其中小組長功不可沒。從界面程序的編寫與調試到系統的作為本科階段最后一次科創實驗,這次的經歷為我們留下了很深的印象。這次實驗不僅提高了分析解決問題的能力,掌握了在電子設計過程中一些資料的獲取與學習方式,大家在一起群策。參考文[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("關閉");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+",數據為:"+m_strDataBits+",停止位:"+m_strStopBits;","void{//TODO:Addyourcontrolnotificationhandlercodehere}void{//TODO:AddyourcontrolnotificationhandlercodehereCStringtemp;{MessageBox(誤MB_OK);}}voidCCOMTOOLDlg::OnTimer(UINT{//TODO:Addyourmessagehandlercodehereand/orcalldefaultCStringtemp;}LRESULTCCOMTOOLDlg::OnReceiveChar(UINTch,LONG 應{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("不在范圍內(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("不在范圍內(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+="系統設定目標轉速為";m_log+=m_EditSpeed;if(m_forward.GetCheckm_log轉";elsem_log+=",反轉";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取得當前物塊層數m_info.Format("%d",info);m_info+=".";m_info2.Format("%d",info2);m_log取得當前層數厚度}

m_log+="獲得當前轉速\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電機系統重新\r\n";}void{m_strSend="~ m_strSend+='\r';CStringtemp="~ temp+='\r';if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log系統命令止加熱!\r\n";}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log水溫系統重新\r\n";}void{CStringtemp="~ temp+='\r';m_strSend=if(SocketState)ServSocket->Send(LPCTSTR(temp),temp.GetLength(),0);m_log+="系統要求當前水溫...\r\n";}void{TODO代 {m_log+="連接中...\r\n";{}{}}

m_log+="成功連接到本地系統,可以開始通信\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系統停轉}{}

temp= m_log系統轉停轉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+="當前轉速...\r\n";}void{CStringtemp;{temp="~ m_log轉開轉r\n";}{}

temp="~ m_log反轉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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論