工程实践与科技创新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

提交评论