




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
串口设备远程监控软件设计与实现毕业论文目录第一章 绪论11.1引言11.2物联网、串口通讯及远程监控的概述11.2.1发展历史11.2.2研究现状31.3本文的主要工作51.3.1硬件结构设计61.3.2监控软件设计7第二章 串口联网服务器概述及VC+(MFC)工具介绍72.1串口联网服务器概述72.1.1串口联网服务器原理82.1.2串口联网服务器工作模式82.1.3硬件网络架构92.2 VC+ (MFC)工具介绍102.2.1 VC+102.2.2.MFC112.3本章小结12第三章 串口联网服务器通讯底层133.1 通信底层设计133.2 MFC中TCP socket编程143.2.1 TCP socket基本原理143.2.2 基本Windows Socket API153.2.3 MFC下的 Socket编程类203.2.4 MFC下Socket编程基本步骤213.3 TCP Client端Socket的编程实现233.3.1 Client接收数据处理233.3.2 Client Socket套接字创建253.4本章小结29第四章 GPS设备协议解析294.1 接收数据的验证294.2 接收数据的解析314.3本章小结32第五章 人机交互设计325.1 Visual C+ 6.0编译器简介325.2 MFC框架345.2.1 MFC框架简介345.2.2 MFC类层次结构图345.2.3 初始化流程及消息循环机制375.3 MFC开发应用程序实现385.3.1 Visual C+6.0新建MFC应用程序385.3.2 消息响应函数添加与实现425.4 课题的人机界面设计445.5本章小结45第六章 结论456.1 成果展示456.2 课题工作总结和结论476.3 需进一步研究的问题48致谢49参考文献5053第一章绪论1.1引言随着互联网的发展,人们对通讯的认识进入到一个新的时期,通讯变得更加快速和方便。这种网络的发展不仅提升了人与人(Man to Man)的通讯,更加逐步发展出了人与物(Man to Thing)甚至物与物(Thing to Thing)的通讯需要。这个阶段的互联网,我们称之为物联网(Internet of Things)。物联网的基础网络仍然是互联网,只是在终端接入上则是各式各样的物体。因此其最后100米的通讯实现方法变得非常多样化,也是业界研究的热点。这其中就包括串口通讯。串口通讯是一种简单的、低速率通讯手段。但其因为实现简单、成本低廉、稳定可靠而广泛的应用于工业、通信等许多专业领域的设备中,用以进行本地的短距离、低容量通讯。因此串口通讯拥有极其庞大的设备数量基础。作为物体通讯手段,在物联网时代,其与互联网相结合实现多节点、远程化的串口通讯网成为物联网应用的一个重要方向。1.2物联网、串口通讯及远程监控的概述1.2.1发展历史物联网(Internet of Things,缩写IOT)是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。广义上说,当下涉及到信息技术的应用,都可以纳入物联网的范畴。物联网是新一代信息技术的重要组成部分。顾名思义,物联网就是物物相连的互联网。其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。物联网就是“物物相连的互联网”。物联网通过智能感知、识别技术与普适计算、广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。物联网是互联网的应用拓展,相对于网络这样一个概念,不如说物联网是业务和应用。串口通信(Serial Communication), 是指外设间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式,主要用于串行式逐位数据传输。串行接口按电气标准及协议来分,常见的有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工RS-422。目前,串口也广泛的应用各类专业设备上,用作设备对外的通讯接口使用。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。串口是一种常见且有较长应用历史的设备间的通讯办法。物联网是随着网络技术发展而发展起来的一种通讯网络。因此,由于历史原因,串口通讯必将是物联网的一种常见物联通讯方式。上文中也提到串口是实现物联网最后100米通讯连接的一种极为重要的方式。尤其在工业、通讯等领域内,串口在设备通讯方面有着极为广泛的应用。虽然现在以以太网形式的接口也非常之多并在逐步成为主流,但串口仍然因其历史应用广泛、连接简单、通讯可靠而大量存在。远程监控从字面上理解可以分为“监”和“控”两部分,其中“监”是指通过网络获得信息为主:而“控”是指通过网络对远程计算机进行操作的方法,对远程计算机进行重新启动、关机等操作,还包括对远端计算机进行日常设置的工作。远程监控这个词有两重意思。计算机领域和视频监控领域都有远程监控的说法,但意义完全不一样。本篇论文中所涉及的到的远程监控为计算机领域的远程监控。1.2.2研究现状物联网在实际应用上的开展需要各行各业的参与,并且需要国家政府的主导以及相关法规政策上的扶助,物联网的开展具有规模性、广泛参与性、管理性、技术性、物的属性等等特征,其中,技术上的问题是物联网最为关键的问题。物联网技术是一项综合性的技术,是一项系统,其理论上的研究已经在各行各业展开,而实际应用还仅局限于行业内部。关于物联网的规划和设计以及研发关键在于RFID、传感器、嵌入式软件以及传输数据计算等领域的研究。物联网将是下一个推动世界高速发展的“重要生产力”,是继通信网之后的另一个万亿级市场。业内专家认为,物联网一方面可以提高经济效益,大大节约成本;另一方面可以为全球经济的复苏提供技术动力。其普及以后,用于动物、植物和机器、物品的传感器与电子标签及配套的接口装置的数量将大大超过手机的数量。按照对物联网的需求,需要按亿计的传感器和电子标签,这将大大推进信息技术元件的生产,同时增加大量的就业机会。且物联拥有业界最完整的专业物联产品系列,覆盖从传感器、控制器到云计算的各种应用。产品服务智能家居、交通物流、环境保护、公共安全、智能消防、工业监测、个人健康等各种领域。构建了“质量好、技术优、专业性强,成本低,满足客户需求”的综合优势,持续为客户提供有竞争力的产品和服务。物联网产业是当今世界经济和科技发展的战略制高点之一。随着计算机系统的应用和微机网络的发展,通信功能越来越显得重要。这里所说的通信是指计算机与外界的信息交换。因此,通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换。由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各 CPU 之间的通信一般都是串行方式。所以串行接口是微机应用系统常用的接口。许多外设和计算机按串行方式进行通信,这里所说的串行方式,是指外设与接口电路之间的信息传送方式,实际上,CPU 与接口之间仍按并行方式工作。需要特别说明的是串口的电平规范。一般在设备内部CPU或单片机使用的是TTL电平,而设备外部一般是使用EIA规定的电气接口,两者间需要进行电平转换。我们通常所说的设备的串口都是按照EIA规定的电气特性而设计的。研究物联网,对串口设备的联网、组网的研究也就是势在必行的。物联网的发展将串口通讯从原来简单针对本地低速率通讯应用的模式发展为其最后100米的通讯连接办法之一。这也就要求在物联网应用中,需要将串口通讯与互联网相结合,完成通讯距离更远、终端数量更多的复杂通讯功能。串口联网服务器正是顺应上述要求而产生的一种硬件设备,以实现串口通讯与互联网的结合。远程监控系统有两种类型,一种是生产现场没有现场监控系统,而是将数据采集后直接送到远程计算机进行处理,这种远程监控与一般的现场监控没有多大的区别,只是数据传输距离比现场监控系统要远,其它部分则和现场监控系统相同;另一种是现场监控与远程监控并存。一般是采用现场总线技术将分布于各个设备的传感器、监控设备等连接起来,这样就从分立单元阶段进入了集成单元阶段,然后各个管理站点的服务再用局域网连接起来,这样就形成了企业内部网(Intranet)。由于建立了基本的网络信息基础结构,设备监测、维护技术进入了集成系统阶段,在一个单位的内部基本上实现了资源和信息共享。随着网络技术的不断发展,远程监控将更多地应用在企业生产过程的管理中,专业技术人员可以通过互联网来管理和维护生产过程,优化生产工艺,提高设备的可用率,最终降低生产成本,提高效益。1.3本文的主要工作本文即研究了串口联网的原理,采用串口联网服务器实现串口通讯与互联网的结合,完成一台串口设备的远程通讯。全文大致分为以下几部分内容。首先,介绍物联网的概念和发展,介绍串口通讯的概念和发展,并阐述串口通讯与物联网以及远程监控的应用关系。论文第二章将介绍串口联网服务器的概念和原理。论文的第三至第七章将分析本课题的工作并详细描述基于串口联网服务器的串口远程联网连接的实现。第八章将展示文章的相关成果,供大家参考使用。本课题设计实现PC机对串口设备的远程通讯管理。课题工作主要分为:1) 硬件结构设计;2) 监控软件设计。1.3.1硬件结构设计图 01:课题硬件结构设计课题设计如图3-1所示硬件结构。课题以一台GPS时钟设备作为目标通讯设备,通过串口服务器实现该GPS设备串口通讯的网络化连接,并最终通过以太网连接到远程计算机。该结构用以实现一台计算机远程的连接一台或多台GPS时钟设备,完成对这些GPS时钟设备的远程监控功能。这种结构可用于批量的设备拷机测试或者远程站点设备监控,是各种复杂应用的原型基础。如果计算机至串口服务器的连接是经由互联网(Internet)的,则还需掌握相关路由配置,有可能需增加一定网络设备以打通路由连接。1.3.2监控软件设计监控软件是指运行于计算机上,用以连接远端串口服务器并进而连接GPS时钟设备的服务软件。该软件需要完成如下功能:1) TCP Socket通讯2) GPS时钟设备协议解析3) 人机交互界面其中最核心的部分为前两项。在这两项的基础上,可以扩展开发出功能更为复杂、应用更具针对性的应用软件。本课题的目标也是实现这一基础功能,为后续应用设计提供底层服务。第二章 串口联网服务器概述及VC+(MFC)工具介绍2.1串口联网服务器概述2.1.1串口联网服务器原理串口联网服务器是为RS-232/485串口到TCP/IP网络之间完成数据转换的通讯接口转换器。提供RS-232/485终端串口与TCP/IP网络的数据双向透明传输。它能将多个串口设备连接并能将串口数据流进行选择和处理,把现有的串口的数据转化成IP 端口的数据,然后进行IP 化的管理,IP化的数据存取,这样就能将传统的串行数据送上流行的IP 通道。2.1.2串口联网服务器工作模式由于串口协议不具有网络层和传输层,所以串口转网口的通信,实际是将串口数据作为TCP/IP的应用层数据,用TCP封装传输的方式。由于TCP/IP协议的传输层包含了TCP协议和UDP协议,而TCP协议具有客户端和服务端两种工作模式,所以串口转网口通信的工作模式可以分为:TCP服务器端模式(TCP Server)、TCP客户端模式(TCP Client)和UDP模式三种。TCP模式:TCP模式采用数据可靠传输机制,所以可以保证数据基本不误码、不丢失。在TCP通信中,必须由通信两端构成,即一方为TCP客户端,另一方为TCP服务端。此种模式类似于打电话机制,打电话的人是TCP客户端,而接电话的是TCP服务端。UDP模式:UDP模式是基于非连接的模式,只要有数据发送即可立即发送,不需要事先连接,但是它无法保证数据不丢失,容易产生误码。在网口设备虚拟串口设备通信中,可以选择基于三种工作模式的通信机制,即在虚拟串口PC端作为Server端的TCP通信模式、作为Client端的TCP通信模式和UDP通信模式。2.1.3硬件网络架构串口联网通讯,主要通过串口服务器,把串口设备连接到互联网中,从而达到通过网络来控制串口设备的目的。其基本的硬件架构如图2-1所示:图 02:串口联网服务器应用网络架构整个控制网络中,串口设备通过RS232/RS485连接到串口服务器上,串口服务器通过路由器/交换器接入以太网。针对串口设备的通信协议,设计相应的监控软件。运行在PC机终端上的远程监控软件则可以通过以太网实现对串口设备的远程监控。2.2 VC+ (MFC)工具介绍2.2.1 VC+Microsoft Visual C+,(简称Visual C+、MSVC、VC+或VC)微软公司的C+开发工具,具有集成开发环境,可提供编辑C语言,C+以及C+/CLI等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual C+ 2013。Microsoft Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。 Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office插件。Visual Studio是目前最流行的Windows平台应用程序开发环境。 Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 .NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web应用程序。 开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP NET应用程序服务和 Microsoft 平台。2.2.2.MFCMFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c+类库,主要封装了大部分的windows API函数,vc+是微软公司开发的c/c+的集成开发环境,所谓集成开发环境,就是说利用它你可以编辑,编译,调试,而不是使用多种工具轮换操作,灵活性较大。有时人们说vc呢也指它的内部编译器,集成开发环境必须有一个编译器内核,要不有什么用,例如DevC+其中一个编译器内核就是gcc。 MFC除了是一个类库以外,还是一个框架,你应该试过,在vc+里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但是由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率但是MFC的封装很浅,所以效率上损失不大,灵活性还可以,虽然也有很多缺陷,但还是一个比较好的东西。 MFC中最重要的封装是对Win32 API的封装,因此,理解Windows Object和MFC Object (C+对象,一个C+类的实例)之间的关系是理解MFC的关键之一。所谓Windows Object(Windows对象)是Win32下用句柄表示的Windows操作系统对象;所谓MFC Object (MFC对象)是C+对象,是一个C+类的实例,这里(本书范围内)MFC Object是有特定含义的,指封装Windows Object的C+ Object,并非指任意的C+ Object。MFC Object 和Windows Object是不一样的,但两者紧密联系。2.3本章小结 本章主要讲述了本课题在软硬件设计方面需要的基础知识,包括硬件方面串口联网服务器的原理及工作模式,以及硬件架构。软件方面,介绍了编写程序时所需要的VC+软件,及MFC框架。能够为后面知识的学习提供基础的帮助。第三章串口联网服务器通讯底层3.1 通信底层设计串口联网软件底层以其硬件架构为基础。控制网络的架构采用C/S 模式架构。其中串口服务器运行TCP Server端,PC监控终端则设计为TCP Client端。每一台连接到串口服务器上的串口设备,都具有固定的IP及端口号。运行在PC的Client监控终端,通过Socket与运行在串口服务器的Server端建立通信连接,进而控制串口设备。如下图5-1所示:图 01:底层通信原理连接到网络中的串口服务器,需要把串口服务器设置成TCP Server模式。以康海时代NC600系列串口服务器为例,其设置步骤如下:1) 用IE内核的浏览器登录串口服务器的IP地址,进入设置主界面2) 在串口配置项里面配置好响应设备串口的波特率灯参数。3) 在工作模式中把对应的工作模式设置成TCP Server工作模式4) 保存提交。3.2 MFC中TCP socket编程串口联网网络中,串口设备与PC端监控软件的通信,主要通过TCP socket套接字实现。TCP为面向连接的一种网络连接方式,能够保证数据通信的安全性。MFC中对socket编程有很好的支持,这为物联网串口设备远程监控提供了便利。3.2.1 TCP socket基本原理TCP socket采用流式套接字进行网络连接。流式套接字提供没有记录边界的数据流,即字节流。字节流能确保以正确的顺序无重复地被送达。其主要的编程模型如下:图 02:流式套接字编程模型在该模型中,服务器端创建并初始化套接字,监听来自客户端的连接请求。客户端同样建立套接字, 用于向服务器端发起连接请求。当服务器接收到来自客户机的连接请求后,与客户机建立连接。连接成功后,则服务器和客户机可以进行数据收发通信。通信完成后,服务器和客户机关闭套接字。3.2.2 基本Windows Socket APIWindows 操作系统提供了很多用于Socket通信的API,可以很方便地开发Socket通信软件。主要的API函数如下:1) WSAStartup 调用 windows Socket DLL 函数原型 int WSAStartup(WORD wVersionRequested, / 应用程序要求的 sockets 版本LPWSADATA lpWSAData /指向数据结构 WSDATA 的指针,/得到 windows Socket 的具体信息) ;WSDATA 定义如下:typedef struct WSAData WORD wVersion;WORD wHighVersion;#ifdef _WIN64unsigned short iMaxSockets;unsigned short iMaxUdpDg;char FAR * lpVendorInfo;char szDescriptionWSADESCRIPTION_LEN+1;char szSystemStatusWSASYS_STATUS_LEN+1;#elsechar szDescriptionWSADESCRIPTION_LEN+1;char szSystemStatusWSASYS_STATUS_LEN+1;unsigned short iMaxSockets;unsigned short iMaxUdpDg;char FAR * lpVendorInfo;#endif WSADATA, FAR * LPWSADATA;2)WSACleanup 结束对 Windows Sockets DLL 的调用函数原型:int WSACleanup(void);3)socket 用于建立 Sockets。函数原型:SOCKET socket(int af, / 地址族,一般是 AF_INETint type , /socket 类型,SOCK_STREAM 或 SOCK_DGRAMint protocol /协议类型,通常取值 0);4)closesocket 关闭套接字函数原型:int closesocket(SOCKET s /要关闭的套接字);5)bind 将一个本地地址和一个 SOCKET 描述字连接起来函数原型:int bind(SOCKET s, / 要绑定的套接字const struct sockaddr FAR* name, / 指向 SOCKADDR 结构的地址int namelen / 地址结构的 sizeof)Tcp/ip SOCKADDR 的结构为struct sockaddrunsigned short sa_family;char sa_data4;struct sockaddr_inshort sin_family;unsigned short sin_port;struct in_addr sin_addr;char sin_zero8;6)listen 设定 socket 为监听状态函数原型:int listen(SOCKET s, / 进行监听的 socketint backlog / 客户端可以连接的请求个数);7) accept 接受一个 socket 的连接请求, 同时返回一个新的 socket ,新的 socket 用来在服务器与客户端之间传递和接收信息。函数原型:SOCKET accept(SOCKET s, / 处于监听状态的 socketstruct sockaddr FAR* addr, /将要接受地址的 sockaddr 指针int FAR* addrlen /地址的长度);8)connect 连接客户端的 socket 到指定的网络服务器。连接成功后,客户端用此 socket 与服务器通信。函数原型:int connect(SOCKET s, / 将要连接的 socketconst struct sockaddr FAR* name, / 目标 socket 地址int namelen / 地址结构 sizeof);9)recv 用于接收已经建立连接的 socket 数据信息函数原型:int recv(SOCKET s,char FAR* buf, /接收数据缓冲区int len ,/ 缓冲区长度int flags /有 MSG_PEEK 和 MSG_OOB);返回值:接收到的字节数10)send 对已经建立连接的 socket 发送数据信息函数原型:int send(SOCKET s,char FAR* buf, /发送数据缓冲区int len ,/ 缓冲区长度int flags /有 MSG_PEEK 和 MSG_OOB);返回值:发送的字节数11 )WSAAsyncSelect 要求 socket 在有事件发生时通知使用者,本函数将套接口设置成为非阻塞方式。函数原型:int WSAAsyncSelect(SOCKET s,HWND hWnd, /接收网络事件的窗口句柄unsigned int wMsg,/发送给窗口的网络事件消息long lEvent /网络消息);12)sendto 向目标地址发送数据信息函数原型:int sendto(SOCKET s,const char FAR * buf,int len,int flags,const struct sockaddr FAR * to,int tolen);13)recvfrom 接收目标地址传来的数据信息函数原型:int recvfrom(IN SOCKET s,OUT char FAR * buf,IN int len,IN int flags,OUT struct sockaddr FAR * from,IN OUT int FAR * fromlen);3.2.3 MFC下的 Socket编程类 MFC 提供了两个类用以支持套接字编程,它们是 CAsyncSocket 类和 CSocket 类。1) CAsyncSocket 类CAsyncSocket 类一对一地封装 Windows Socket API。CAsyncSocket 类适合哪些对网络通信细节很了解, 但希望利用回调的便利通知网络事件的程序员使用。 如果想利用 Windows Sockets 方便地处理 MFC 应用程序中的多个网络协议, 而又不想放弃灵活性, 可以考虑使用CAsyncSocket 。CAsyncSocket 类是 MFC 在方便性与灵活性中的一种折衷方案。 它提供了一个类用以保留网络编程的灵活性,而方便性则由CSocket 类来提供。2)CSocket 类CSocket 类是 CAsyncSocket 类的派生类,它致力于提供比 CAsyncSocket 类更高的抽象性,使得网络编程变得简单方便。CSocket 类支持流方式和数据报方式,但一般情况下用的更多的是流方式的数据通信。在流方式的通信模式下, CSocket 类通常会与 CArchive 类结合, 以串行化的方式发送和接收数据,这使得网络编程变得像读写文件一样简单了。CArchive 类扮演的是一个数据缓冲区的角色,它通过 CSocketFile 类与一个套接字相联系。只要建立了两者的联系,然后往“数据缓冲区”装入数据与取出数据就完成了。3.2.4 MFC下Socket编程基本步骤 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。流式套接字Socket编程是基于Client/Server模式,其编程主要包括客客户机和服务器端的编程,程序编写之前ws2_32.lib的库文件。基本的编程步骤如下:服务器端编程的步骤:1)加载套接字库,创建套接字(WSAStartup()/socket();2)绑定套接字到一个IP地址和一个端口上(bind();3)将套接字设置为监听模式等待连接请求(listen();4)请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept();5)用返回的套接字和客户端进行通信(send()/recv();6)返回,等待另一连接请求;7)关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。客户机端编程步骤:1)加载套接字库,创建套接字(WSAStartup()/socket();2)向服务器发出连接请求(connect();3)和服务器端进行通信(send()/recv();4)关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。客户机与服务器通信过程如图5-3所示:图 03:客户机服务器底层通信过程3.3 TCP Client端Socket的编程实现 串口联网实现串口设备的网络互联,其主要的编程在于实现Client端上位机的监控设计。以GPS频标时标同步信号源为例,介绍串口设备联网TCP Client端编程的具体实现。3.3.1 Client接收数据处理 串口设备数据的收发以字符形式进行。在串口设备实现网络互联模型中,Client端接收数据处理,主要方式有两种。一种是通过WSAAsyncSelect()函数注册Socket套接字消息响应来进行实现,这是最普遍的。当串口连接到网络的串口设备比较多时,则可以通过多线程的方式来进行接收数据的处理。1)Socket消息响应实现数据接收利用Socket消息响应实现数据收发,首先需要利用WSAAsyncSelect()注册消息响应类型。WSAAsyncSelect()函数如下:intPASCAL FAR WSAAsyncSelect (SOCKET s,HWND hWnd,unsigned int wMsg,long lEvent);s 标识一个需要事件通知的套接口的描述符.hWnd 标识一个在网络事件发生时需要接收消息的窗口句柄.wMsg 在网络事件发生时要接收的消息.lEvent位屏蔽码,用于指明应用程序感兴趣的网络事件集合.lEvent参数由下表中列出的值组成:FD_READ 欲接收读准备好的通知.FD_WRITE 欲接收写准备好的通知.FD_OOB 欲接收带边数据到达的通知.FD_ACCEPT 欲接收将要连接的通知.FD_CONNECT 欲接收已连接好的通知.FD_CLOSE 欲接收套接口关闭的通知.实际编程时,则根据需要注册响应的网络事件。注册号网络实际后,在程序中添加自定义OnSocket消息响应函数,则可以实现数据的收发。OnSocket消息响应函数添加步骤如下:定义Onsocket消息:#define WM_SOCKET (WM_USER+100)定义OnSocket()消息响应函数:afx_msg void OnSocket(WPARAM wParam,LPARAM lParam);添加OnSocket()函数消息映射:ON_MESSAGE(WM_SOCKET,OnSocket)最后实现OnSocket函数。2)多线程接收实现当串口设备较多时,则可以利用多线程处理各个设备数据的收发。多线程实现数据的收发,其主要的思想是建立一个TCP ClientBase的基类。当有新的设备需要监控时,则在主应用程序中新开辟一个线程,该线程用于专门处理新增加设备数据的收发。在新的线程中,新增加了一个TCP Client类,该类继承于 TCP ClientBase基类,从实现应用程序与新增加设备进行数据通信的目的。3.3.2 Client Socket套接字创建在终端监控软件,当用户需要对串口设备通过网络进行控制时,点击连接按钮,终端软件建立Client端套接字,实现与串口设备的通信。GPS频标时标同步信号源为例,其实现代码如下:1)调用windows Socket DLL初始化套接字:WSADATA data;/定义WSADATA结构体对象 WORD w=MAKEWORD(2,0);/定义版本号码:WSAStartup(w,&data);2)获取控件输入的端口号和IP地址:GetDlgItemText(IDC_EDIT_ADDR,strIP);GetDlgItemText(IDC_EDIT_PORT,strPort);int nPort = atoi(strPort);3)创建Socket套接字:m_socket=:socket(AF_INET,SOCK_STREAM,0);消息响应机制/多线程监听机制。4)设置套接字的阻塞模式::WSAAsyncSelect(m_socket,this-m_hWnd,WM_SOCKET,FD_READ|FD_CONNECT);5)套接字参数设置:addr.sin_family = AF_INET;addr.sin_addr.S_un.S_addr = inet_addr(strIP.GetBuffer(1);addr.sin_port = ntohs(nPort);6)连接服务器端connect(m_socket, (sockaddr*)&addr, sizeof(addr);7)数据接收Void CGPSctrlView:OnSocket(WPARAM wParam,LPARAM lParam) / 有socket数据发来时,调用此函数CStringstrText, str;strText.Empty();str.Empty();TRACE(OnSocketn);if(lParam=FD_READ)TRACE(CGPSctrlView:OnReceiven);char buffer128 = 0;BYTE buf128 = 0;int nRead;CStringArray strArray;strArray.RemoveAll();nRead = :recv(m_socket, buffer, 128, 0);memcpy(void*)buf, (void*)buffer, 128);TRACE(nRead: %d, nRead);switch(nRead)case 0:break;case SOCKET_ERROR:if(GetLastError() != WSAEWOULDBLOCK)AfxMessageBox(Error occurred);break;default:buffernRead = 0;int j = 0;for(int i=0; iEnableWindow(false);m_sendWay = SEND_BY_INTERNET;(CStatic*)GetDlgItem(IDC_LIGHT_CONNECT)-SetIcon(m_greenIcon);8)数据发送::send(m_socket, (char*)szBuffer, len, 0);9)关闭套接字::closesocket(m_socket);3.4本章小结 本章通过学习底层通信原理及流式套接字编程模型等相关知识,在VC+中运用调用socket API中的函数进行编程,来实现客户端与服务器的数据互通。第四章GPS设备协议解析Socket套接字实现接收数据后,还需要对接收的数据进行验证和解析处理。以GPS频标时标设备为例,详细介绍该过程。4.1 接收数据的验证接收数据的验证,主要是验证数据否否符合设备的数据协议,确定接收到的数据是否正确。若接收到的数据与设备协议相符合,则对数据进行解析处理。否则丢弃接收到的数据。数据的验证机制主要在实现定义好的OnCommunication()函数中实现。OnCommunication()函数的实现则以设备的发送协议为基础进行设计,采用状态机机制,用来验证数据。帧头(1)地址(1)控制字(1)数据长度(1)数据(N)CRC16校验(2) GPS串口设备中,其发送的数据帧格式为:根据协议,设计了6个状态的状态机,用于实现数据验证:Waiting:数据等待状态,当接受到数据时,则根据判断流转到下一个状态BYTE_HEAD:帧头验证状态BYTE_ADDR: 地址验证状态BYTE_CONTROL:控制字验证状态BYTE_LENGTH:数据长度验证状态BYTE_DATA:数据项验证状态BYTE_CRC:校验码验证状态整个状态机的流转过程如下图所示图 01:串口数据接收及验证机制OnSocket()函数接收到字符数据以后,把接收到的字符存入到事先定义好的Buffer缓存数组。软件终端调用OnCommunication()函数对存在Buffer中的数据进行状态机验证。若通过状态机的验证,则接收数据正确,对数据进行解析。4.2 接收数据的解析状态机验证接收数据后,接收的数据存储在一个m_RecvData128的数组中,数据的解析则是根据协议解析m_RecvData128数组中的内容。GPS设备中协议中,时间部分协议如下: 以GPS协议接收数据的时间帧为例,DisPlay()函数解析时间过程如下:1) 判断是否是时间帧:时间帧的控制字为0x81,而控制字存在m_RecvData128数组的第3个字节,即m_RecvData2中,所以第一步判断m_RecvData2的数据,若其为0x81,则对其按时间帧进行解析2) 时分秒的解析根据协议,数据项长度为3个字节,存储在m_RecvData128数组的第5-7个字节中。及m_RecvData4中为时, m_RecvData5中为分, m_RecvData6中为秒。对此三个字节的数据,利用函数解析后,显示到列表控件响应的位置,如下:strText.Format(%d, m_RecvData4); strText.Format(%d, m_RecvData5);strText.Format(%d, m_RecvData6);其他数据项的解析与时间的解析思路一致,只是具体项的具体解析算法不一致。4.3本章小结本章主要讲述了帧数据的结构,然后依据其结构,引出在接收帧数据时,所需要的各个步骤。一步一步来判断一个帧数据是如何接收到的。之后,学习了在接收到帧数据后是如何对其进行解析。整体掌握帧数据从接收到解析出来,能够进行使用的整个过程。第五章人机交互设计串口设备网络互联系统中,主要的一部分是上位机人机交互的设计。在人机交互的设计中,主要利用VC+编译器和MFC框架实现上层界面的设计。VC+编译器和MFC框架,为串口设备网络互联系统的界面开发提供了方便。5.1 Visual C+ 6.0编译器简介Visual C+ 6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。Visual C+6.0不仅是一个C+ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。VC+应用程序的开发主要有两种模式,一种是WINAPI方式,另一种则是MFC方式,传统的WINAPI开发方式比较繁琐,而MFC则是对WINAPI再次封装,所以MFC相对于WINAPI开发更具备效率优势。串口设备网络互联系统中,主要利用Visual C+ 6.0中MFC进行应用程序开发。MFC借助C+的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard使开发者摆脱离了每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。另外,MFC利用C+的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C+中的对象,这样一来使开发更接近开发语言而远离系统。利用C+的封装性开发者可以更容易理解和操作各种窗口对象;利用C+的派生性开发者可以减少开发自定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中家长会课件教学
- 员工薪酬福利管理准则
- 宪法九版习题及答案汇 第1-8章
- 2025-2026学年北师大版小学数学四年级上册(全册)教学设计(附目录P175)
- 离婚协议书起草及财产分割专项合同模板
- 髌骨骨折查房课件
- 私立医院与心理治疗师心理干预聘用协议
- 知识产权贯标认证辅导与专利申请合同
- 离婚后子女抚养费用监管与财产分割执行协议范本
- 特色学校教师进修与继续教育聘用合同模板
- 2025年人社局编外考试题库及答案
- 木制品厂安全生产培训课件
- 电工四级考试理论题库及答案
- 世纪英才教程课件
- 感恩教师节幼儿园教师节
- 小学科学新教科版三年级上册全册教案(2025秋新版)
- 病人出入院的护理课件
- 苏教版2025-2026秋三年级数学上册教学计划及课时安排
- 【里斯】年轻一代新能源汽车消费洞察与预测 -新物种 新理念 新趋势(2024-2025)
- 2025年综合基础知识题库(含答案)
- 6人小品《没有学习的人不伤心》台词完整版
评论
0/150
提交评论