基于VC++的串口通信服务的开发.docx

上传人:b****4 文档编号:24161299 上传时间:2023-05-24 格式:DOCX 页数:27 大小:335.03KB
下载 相关 举报
基于VC++的串口通信服务的开发.docx_第1页
第1页 / 共27页
基于VC++的串口通信服务的开发.docx_第2页
第2页 / 共27页
基于VC++的串口通信服务的开发.docx_第3页
第3页 / 共27页
基于VC++的串口通信服务的开发.docx_第4页
第4页 / 共27页
基于VC++的串口通信服务的开发.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基于VC++的串口通信服务的开发.docx

《基于VC++的串口通信服务的开发.docx》由会员分享,可在线阅读,更多相关《基于VC++的串口通信服务的开发.docx(27页珍藏版)》请在冰豆网上搜索。

基于VC++的串口通信服务的开发.docx

基于VC++的串口通信服务的开发

基于VC++的串口通信服务的开发

摘要

随着计算机技术的发展和推广,利用串口进行数据通讯在通讯领域中占有着重要的地位。

为了方便和快速的通过Internet网络访问串口服务器的串口,本课题把串口通信集成到Windows服务,由Windows服务完成串口通信的基本操作。

文中详细描述了串口通信服务的原理和工作流程,还列举出了相关的核心代码。

用流程图的方式来描述了各个模块的逻辑实现。

串口通信服务中采用安全队列的机制来控制多线程访问多串口。

在开发中按照软件工程的流程,从需求分析到概要设计,从详细设计到编码,以及最后的测试,利用软件工程的工具管理开发代码和文档。

此外,还开发出了客户端来测试该服务工作是否正常。

经过测试服务工作正常,能通过网络连接到服务器完成串口的通信。

最后总结了开发和设计的不足之处,程序还有待进一步完善。

关键词:

串口通信;Windows服务;安全队列;多线程

TheDevelopmentofSerialCommunicationService

BasedonVC++

Abstract

Withthedevelopmentandspreadofcomputertechnology,serialcommunicationisanimportantpartinthefieldofcomputernetworkcommunication.Inordertoaccessserver'sserialportmoreconvenientandfasterthroughtheInternet,thistopicputserialcommunicationservicesintegratedintoWindowsservice,whichcompletedthebasicoperationofserialcommunicationservices.Theserialcommunicationsservicesandtheworkflowareindetaildescribed.Thecorecodeoftheservicesisalsogiven.Flowchartisusedtodescribethehandlingprocessoftheserialcommunicationsservices.Theservicesusingsafequeuemechanismtocontrolmultithreadingvisitserials.Duringtheentiredevelopment,accordingtothesoftwareengineeringflow,fromrequirementsanalysistosummarydesign,fromdetaildesigntocoding,andthefinaltest,usesthesoftwareengineeringtoolstomanagementthecodeanddocumentation.Inaddition,Idevelopedaclienttotesttheservice.Testresultsoftheexperimentindicatetheservicescanworknormally.Intheend,summarizesthedisadvantagesofthedesignanddevelopment,andfurtherperfectionofstudiesissurelyinneed.

Keywords:

SerialCommunication;WindowsService;SafeQueue;Multithread

目录

论文总页数:

22页

1引言1

1.1课题背景1

1.2研究现状1

1.3研究的意义1

2相关理论基础1

2.1WindowsNT服务1

2.2串口通信2

2.3多线程及线程间通信3

2.4安全队列4

2.5Windows套接字规范4

2.6客户机服务器系统5

3需求分析及设计方案6

3.1功能需求6

3.2设计方案7

4具体设计流程与实现8

4.1安全队列8

4.2服务应用程序10

4.3串口通信16

4.4客户端18

4.5类图19

5调试与分析19

结论20

参考文献20

致谢21

声明22

商业源代码,全套计算机毕业设计免费下载

更多全套设计联系QQ:

1042897696

最新设计大全

1引言

1.1课题背景

计算机与外界的信息交换称为通信。

基本的通信方式有并行通信和串行通信两种。

串行通信是指一条信息额各位数据被逐位按顺序传送的通信方式。

串行通信的特点是:

数据位传送,按位顺序进行,最少只需要一根传输线即可完成,成本低但传送速度慢。

串行通信的距离可以从几米到几千米。

1.2研究现状

串口通讯目前流行的方法大概有三种:

一是利用Microsoft提供的CMSCOMM控件进行通讯,不过现在很多程序员都觉应该放弃这种方式。

二是利用WINAPI函数进行编程,这种编程的难度高,要求掌握很多的API函数。

三是利用现在网络上面提供的一些串口通讯控件进行编写。

这三种方法都没有同Windows服务联系起来。

1.3研究的意义

利用串口进行数据通讯在通讯领域中占有着重要的地位,串口通讯在通讯软件中有着十分广泛的应用。

如电话、传真、视频和各种控制等。

通过本文的研究和开发能更加方便的通过网络通信来实现串口通信,提高串口的利用率。

为进一步的研究提供参考。

2相关理论基础

2.1WindowsNT服务

有那么一类应用程序,是能够为各种用户(包括本地用户和远程用户)所用的,拥有用户授权级进行管理的能力,并且不论用户是否物理的与正在运行该应用程序的计算机相连都能正常执行,这就是所谓的服务了。

每个操作系统都需要有在后台执行任务的方法,无论是谁正在使用这部机器,这些任务都可以继续运行,后台任务可以处理各种重要的服务,包括系统的或者用户的。

在WindowsNT中,后台的任务被称为服务。

服务可在每次NT启动的时候运行,并且不管是谁登陆,都会一直运行下去。

服务是一类受到操作系统优待的程序。

一个服务首先是一个Win32可执行程序,通常以控制台程序的形式被编写,进入点函数是Main()而不是WinMain()。

一个WindowsNT服务由三部分组成,第一部分是ServiceControlManager(SCM)。

每个WindowsNT/2000系统都有一个SCM,SCM存在于Service.exe中,在Windows启动的时候会自动运行,伴随着操作系统的启动和关闭而产生和终止。

这个进程以系统特权运行,并且提供一个统一的、安全的手段去控制服务。

它其实是一个RPCServer,因此我们可以远程安装和管理服务,不过这不在本文讨论的范围之内。

SCM包含一个储存着已安装的服务和驱动程序的信息的数据库,通过SCM可以统一的、安全的管理这些信息,因此一个服务程序的安装过程就是将自身的信息写入这个数据库。

第二部分就是服务本身。

一个服务拥有能从SCM收到信号和命令所必需的特殊代码,并且能够在处理后将它的状态回传给SCM。

第三部分也就是最后一部分,是一个服务控制管理器(ServiceControlDispatcher,SCP)。

它是一个拥有用户界面,允许用户开始、停止、暂停、继续,并且控制一个或多个安装在计算机上服务的Win32应用程序。

SCP的作用是与SCM通讯,Windows2000管理工具中的“服务”就是一个典型的SCP。

2.2串口通信

串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。

常用的串口是RS-232-C接口(又称EIARS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。

它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。

传输距离在码元畸变小于4%的情况下,传输电缆长度应为50英尺。

典型地,串口用于ASCII码字符的传输。

通信使用3根线完成:

地线,发送线,接收线。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。

其它线则用于硬件握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通行的端口,这些参数必须匹配:

波特率:

这是一个衡量通信速度的参数。

它表示每秒钟传送的bit的个数。

例如300波特表示每秒钟发送300个bit。

当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。

这意味着串口通信在数据线上的采样率为4800Hz。

通常电话线的波特率为14400,28800和36600。

波特率可以远远大于这些值,但是波特率和距离成反比。

高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

数据位:

这是衡量通信中实际数据位的参数。

当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。

如何设置取决于你想传送的信息。

比如,标准的ASCII码是0~127(7位)。

扩展的ASCII码是0~255(8位)。

如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。

每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。

由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

停止位:

用于表示单个包的最后一位。

典型的值为1,1.5和2位。

由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。

因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

奇偶校验位:

在串口通信中一种简单的检错方式。

有四种检错方式:

偶、奇、高和低。

当然没有校验位也是可以的。

2.3多线程及线程间通信

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。

程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。

进程则不同,它是程序在某个数据集上的执行,是一个动态实体。

它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。

线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。

线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程和进程的关系是:

线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。

线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

线程带来的主要好处是:

在进程内创建、终止线程比创建、终止进程要快;同一进程内线程间的切换要比进程间的切换要快,尤其是用户级线程间的切换。

另外,线程的出现还因为以下几个原因:

并发程序的并发执行,在多处理环境下更为有效。

一个并发程序可以建立一个进程,而这个并发程序中的若干并发程序段就可以分别建立若干线程,使这些线程在不同的处理机上执行。

每个进程具有独立的地址空间,而该进程内的所有线程共享该地址空间。

这样可以解决父子进程模型中,子进程必须复制父进程地址空间的问题。

线程对解决客户/服务器模型非常有效。

线程之间通信的两个基本问题是互斥和同步。

线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。

线程互斥是指对于共享的操作系统资源(指的是广义的“资源”,而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。

当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。

线程互斥是一种特殊的线程同步。

实际上,互斥和同步对应着线程间通信发生的两种情况:

当有多个线程访问共享资源而不使资源被破坏时;当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。

在WIN32中,同步机制主要有以下几种:

事件(Event);信号量(semaphore);互斥量(mutex);临界区(Criticalsection)。

2.4安全队列

队列(Queue)在计算机科学中,是一种先进先出的线性表。

和栈相反,它只允许在表的一端进行插入,而在表的另一端删除元素。

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

进行插入操作的端为队尾,进行删除操作的端为队头。

队列中没有元素时,称为空队列。

在用链式存储结构表示队列时,需要设置队列头指针和队列尾指针,以便指示队列头结点和队列尾结点。

安全队列是指高级队列的代理明确指出一个或多个数据库用户可以对队列进行操作。

安全队列的拥有者可以执行所有的队列操作,而其他用户除非被配置为这个安全队列的安全队列用户,否则不能对这个安全队列执行操作。

安全队列在队列的入队和出队操作时的各线程同步。

在某一时刻只能有一个线程操作该队列,这样的队列就是安全的队列。

把队列的队头视为临界区,要对队列进行操作需进入临界区,从而实现现成的同步,队列的安全。

2.5Windows套接字规范

随着个人计算机的日益普及,Windows操作系统的用户与日俱增。

Microsoft以BerkeleySocket规范为范例定义了一套MicrosoftWindows下的网络编程接口,它不仅包含了人们很熟悉的BerkeleySocket风格的库函数,也包含了一组针对Windows的扩展库函数,一是程序员能充分利用Windows消息驱动机制进行编程。

WindowsSocket规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。

此外,在一个特定版本Windows的基础上,WindowsSocket规范也定义了一个二进制接口(ABI),并通过此二进制接口来保证其兼容性。

因此这份规范定义了应用程序开发者能够使用,而且网络软件供应商也能够实现的一套函数调用和相关语义。

遵守这套WindowsSocket规范的网络软件,称之为WindowsSocket兼容,而WindowsSocket兼容实现的提供者,称之为WindowsSocket提供者。

一个网络软件供应商必须百分之百地实现WindowsSocket规范才能做到WindowsSocket兼容。

WindowsSocket规范定义并记录了如何使用API与Internet协议相连接,尤其要指出的是,所有的WindowsSocket实现都支持流式套接字和数据报套接字。

应用程序调用Windows套接字的API实现相互之间的通信。

Windows套接字有利用下层的网络通信协议功能和操作系统调用实现实际的通信工作。

在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Servermodel)。

该模式的建立基于以下两点:

非对等作用和异步通信。

客户机/服务器模式在操作过程中采取的是主动请示方式。

首先服务器方要先启动,并根据请示提供相应服务:

打开一个通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求;等待客户请求到达该端口;接收到重复服务请求,处理该请求并发送应答信号;返回第二步,等待另一客户请求;关闭服务器。

客户方:

打开一个通信通道,并连接到服务器所在主机的特定端口;向服务器发送服务请求报文,等待并接收应答;继续提出请求;请求结束后关闭通信通道并终止。

WindowsSocket2.0是WindowsSocket1.1发展的一个比较重大的变革,为了能与WindowsSocket1.1实现很好的兼容性,它在这基础上做了向后兼容:

源码和二进制代码。

这就实现了WindowsSocket应用程序和任何版本的WindowsSocket实现之间的最大的互操作性,同时也减少了WindowsSocket应用程序使用者、网络协议栈提供者和服务提供者的许多痛苦。

2.6客户机服务器系统

客户机服务器系统(Client/ServerSystem)是计算机网络(尤其是Internet)中最重要的应用技术之一,其系统结构是指把一个大型的计算机应用系统变为多个能互为独立的子系统,而服务器便是整个应用系统资源的存储与管理中心,多台客户机则各自处理相应的功能,共同实现完整的应用。

用户使用应用程序时,首先启动客户机通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请示提供相应的服务。

这是网络软件运行的一种形式。

通常,采用客户机/服务器结构的系统,有一台或多台服务器以及大量的客户机。

服务器配备大容量存储器并安装数据库系统,用于数据的存放和数据检索;客户端则安装专用的软件,负责数据的输入、运算和输出。

客户机和服务器都是独立的计算机。

当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。

而那些用于访问服务器资料的计算机则被叫做客户机。

严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。

采用这种结构的系统目前应用非常广泛。

如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。

计算机网络的主要用途之一是允许共享资源。

这种共享是通过相呼应的两个独立程序来完成的。

每个程序在相应的计算机上运行。

一个程序在服务器中,提供特定资源;另一个程序在客户机中,它使客户机能够使用服务器上的资源。

例如,你正在计算机上用一个文字处理程序(如Word)进行工作,你告诉程序,你要编辑一个存贮在网络的另一台计算机中的特定的文件。

你的程序将给那台计算机发送一个信号,请求它把这个文件传输过来。

在这种情况下,你的文字处理程序是客户机,此时接受这种请求并发出这个文件的程序叫服务器,更确切地说它是一个文件服务器。

这种系统的绝妙之处,就是客户机和服务器程序不在同一台计算机上运行,这些客户机和服务器程序通常归属不同的计算机。

例如,你可能坐在中国北京的一台PC机前,通过WWW来阅读万里之外的美国国家安全局的“今日新闻”,看一看美国总统选举的闹剧。

在这种情况下,WWW客户机就是你的PC机,它运行着一个程序,此时WWW服务器是在美国另一端的一台超级计算机,它运行着另一个程序。

大部分计算机网络(包括所有的Internet服务)都使用这种客户机/服务器关系。

要懂得怎样使用计算机网络(尤其是Internet),事实上就意味着要懂得怎样使用每个客户机程序。

你的任务是启动客户机,并叫它执行程序。

客户机的任务是连接上相对应的服务器,并确保你的指令正确执行。

客户机服务器工作时通常由一个公共的规制需要遵守,通信双方需要共同遵守这个规则才能保证通信的有效性,如需要传输大量语音数据时,需采用一种无须建立连接的传输方式,在这种方式下,数据可以以较快的熟读传输,而当需要确保数据准确无误地到达时,则应采用另外一种面向连接的传输方式。

3需求分析及设计方案

3.1功能需求

3.1.1服务器端

串口服务器上的串口通信服务打开一个固定的端口,监听客户端的Socket连接。

若检测到客户端的连接则为客户端分配一个串口,供客户端发送数据。

客户端同服务器协商好串口的配置信息,则客户端发送的数据服务器直接发送到串口,通过串口发送除去。

若服务器检测到串口接受到数据,者直接把接收到的数据发送到客户端。

即服务器中转串口和客户端的数据。

这样一来客户端就好像直接链接到串口服务器上的串口,与服务器串口相连接的外设进行通信。

串口服务器具有很多个串口形成一个串口池。

串口池中的串口连接着不通或相同的外设,客户通过Internet联网的方式链接到服务器,同服务器的外设通信。

3.1.2串口通信

串口通信服务管理整个串口池。

服务程序对串口池进行合理管理和分配,服务器端接收到客户端的连接请求,服务器会从串口池中选取一个串口供客户端使用。

当客户端通信完毕,断开同服务器的链接时,服务器端回收这个串口,以供其他客户端使用。

在分配串口的时候不能让不同用户使用同一串口,让每一个客户端独立的使用某一个串口。

当客户端链接上服务器后,服务器为客户端分配一个串口供客户端使用。

这时候串口通信需要被实现。

包括串口的打开,串口参数设置,读写数据到串口以及关闭串口。

3.1.3客户端

客户端的需求相对简单。

连接服务器的客户端通过指定服务器地址和端口号连接到服务器,设置串口的通信参数,同服务器通信。

可以发送数据到服务器和接受服务器发送回来的数据,并显示接收到的数据。

通信完毕时断开通服务器的连接。

3.2设计方案

3.2.1服务器端

服务器端使用WindowsNT服务来提供服务,此服务监听某一端口,等待客户端的链接。

为客户端提供服务。

使用WindowsAPI自己定义服务的行为。

服务管理串口池,服务启动初始化时,检测服务器的串口,串口统一进入一个全局安全队列。

当客户端发起连接请求时,服务器开启一个线程来处理该客户的请求,直到客户端断开连接,线程退出执行。

在线程中,从安全队列的队头出队列一个串口,该串口分配给该客户使用,客户端首先设置该串口的通信参数,否则按照默认串口通信参数进行通信。

如果有多个客户同时连接服务器则服务器同时开启多个线程来处理多个用户的连接请求。

分配给客户端使用的串口接收外设发来数据时,服务器通过连接的Socket发送到客户端,客户端处理接收到的数据。

服务器端接收到客户端发来的数据时,把接收到的数据发送到分配给这个客户端的串口,通过串口发送到外设,外设处理接收到的数据从而做出反应,完成通信。

3.2.2串口通信

使用WindowsAPI的串口操作函数,封装成串口类,来处理串口通信。

此串口类统一操作串口池里的串口,根据不同的串口号来操作这些串口。

从而达到每一个客户的使用一个串口,每个串口都是相同的操作。

可以根据不同的通信设备为不同的串口设置不同的通信参数。

串口通信负责处理串口的参数设置,串口的打开和关闭,数据的读和写,即写数据到串口和从串口读数据。

打开串口时,服务处理此客户的线程开启另一线程监听串口是否有数据接收,当发现有数据来的时候,串口读出该数据通过Socket发送到客户端。

3.2.3客户端

客户端使用MFC编程创建基于对话框的应用程序。

该程序使用WindowsSocket建立同指定服务器的数据连接。

当建立好HTTP链接后,可设置串口的通信参数,如:

波特率,数据位,奇偶校验,停止位等。

设置好串口的通信参数后就可以同服务器分配给的串口链接的外

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1