摘 要
随着计算机技术的发展和推广,利用串口进行数据通讯在通讯领域中占有着重要的地位。为了方便和快速的通过Internet网络访问串口服务器的串口,本课题把串口通信集成到Windows服务,由Windows服务完成串口通信的基本操作。文中详细描述了串口通信服务的原理和工作流程,还列举出了相关的核心代码。用流程图的方式来描述了各个模块的逻辑实现。串口通信服务中采用安全队列的机制来控制多线程访问多串口。在开发中按照软件工程的流程,从需求分析到概要设计,从详细设计到编码,以及最后的测试,利用软件工程的工具管理开发代码和文档。此外,还开发出了客户端来测试该服务工作是否正常。经过测试服务工作正常,能通过网络连接到服务器完成串口的通信。最后总结了开发和设计的不足之处,程序还有待进一步完善。
关键词:串口通信;Windows服务;安全队列;多线程
The Development of Serial Communication Service
Based on VC++
Abstract
With the development and spread of computer technology, serial communication is an important part in the field of computer network communication. In order to access server''s serial port more convenient and faster through the Internet, this topic put serial communication services integrated into Windows service, which completed the basic operation of serial communication services. The serial communications services and the workflow are in detail described. The core code of the services is also given. Flow chart is used to describe the handling process of the serial communications services. The services using safe queue mechanism to control multithreading visit serials. During the entire development, according to the software engineering flow, from requirements analysis to summary design, from detail design to coding, and the final test, uses the software engineering tools to management the code and documentation. In addition, I developed a client to test the service. Test results of the experiment indicate the services can work normally. In the end, summarizes the disadvantages of the design and development, and further perfection of studies is surely in need.
Key words: Serial Communication; Windows Service; Safe Queue; Multithread
课题背景
计算机与外界的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。串行通信是指一条信息额各位数据被逐位按顺序传送的通信方式。串行通信的特点是:数据位传送,按位顺序进行,最少只需要一根传输线即可完成,成本低但传送速度慢。串行通信的距离可以从几米到几千米。
研究现状
串口通讯目前流行的方法大概有三种:一是利用Microsoft提供的CMSCOMM控件进行通讯,不过现在很多程序员都觉应该放弃这种方式。二是利用WINAPI函数进行编程,这种编程的难度高,要求掌握很多的API函数。三是利用现在网络上面提供的一些串口通讯控件进行编写。这三种方法都没有同Windows服务联系起来。
研究的意义
利用串口进行数据通讯在通讯领域中占有着重要的地位,串口通讯在通讯软件中有着十分广泛的应用。如电话、传真、视频和各种控制等。通过本文的研究和开发能更加方便的通过网络通信来实现串口通信,提高串口的利用率。为进一步的研究提供参考。
需求分析及设计方案
功能需求
1 服务器端
串口服务器上的串口通信服务打开一个固定的端口,监听客户端的Socket连接。若检测到客户端的连接则为客户端分配一个串口,供客户端发送数据。客户端同服务器协商好串口的配置信息,则客户端发送的数据服务器直接发送到串口,通过串口发送除去。若服务器检测到串口接受到数据,者直接把接收到的数据发送到客户端。即服务器中转串口和客户端的数据。这样一来客户端就好像直接链接到串口服务器上的串口,与服务器串口相连接的外设进行通信。串口服务器具有很多个串口形成一个串口池。串口池中的串口连接着不通或相同的外设,客户通过Internet联网的方式链接到服务器,同服务器的外设通信。
2 串口通信
串口通信服务管理整个串口池。服务程序对串口池进行合理管理和分配,服务器端接收到客户端的连接请求,服务器会从串口池中选取一个串口供客户端使用。当客户端通信完毕,断开同服务器的链接时,服务器端回收这个串口,以供其他客户端使用。在分配串口的时候不能让不同用户使用同一串口,让每一个客户端独立的使用某一个串口。当客户端链接上服务器后,服务器为客户端分配一个串口供客户端使用。这时候串口通信需要被实现。包括串口的打开,串口参数设置,读写数据到串口以及关闭串口。
3 客户端
客户端的需求相对简单。连接服务器的客户端通过指定服务器地址和端口号连接到服务器,设置串口的通信参数,同服务器通信。可以发送数据到服务器和接受服务器发送回来的数据,并显示接收到的数据。通信完毕时断开通服务器的连接。
设计方案
1 服务器端
服务器端使用Windows NT服务来提供服务,此服务监听某一端口,等待客户端的链接。为客户端提供服务。使用Windows API自己定义服务的行为。服务管理串口池,服务启动初始化时,检测服务器的串口,串口统一进入一个全局安全队列。当客户端发起连接请求时,服务器开启一个线程来处理该客户的请求,直到客户端断开连接,线程退出执行。在线程中,从安全队列的队头出队列一个串口,该串口分配给该客户使用,客户端首先设置该串口的通信参数,否则按照默认串口通信参数进行通信。如果有多个客户同时连接服务器则服务器同时开启多个线程来处理多个用户的连接请求。分配给客户端使用的串口接收外设发来数据时,服务器通过连接的Socket发送到客户端,客户端处理接收到的数据。服务器端接收到客户端发来的数据时,把接收到的数据发送到分配给这个客户端的串口,通过串口发送到外设,外设处理接收到的数据从而做出反应,完成通信。
2 串口通信
使用Windows API的串口操作函数,封装成串口类,来处理串口通信。此串口类统一操作串口池里的串口,根据不同的串口号来操作这些串口。从而达到每一个客户的使用一个串口,每个串口都是相同的操作。可以根据不同的通信设备为不同的串口设置不同的通信参数。串口通信负责处理串口的参数设置,串口的打开和关闭,数据的读和写,即写数据到串口和从串口读数据。打开串口时,服务处理此客户的线程开启另一线程监听串口是否有数据接收,当发现有数据来的时候,串口读出该数据通过Socket发送到客户端。
3 客户端
客户端使用MFC编程创建基于对话框的应用程序。该程序使用Windows Socket建立同指定服务器的数据连接。当建立好HTTP链接后,可设置串口的通信参数,如:波特率,数据位,奇偶校验,停止位等。设置好串口的通信参数后就可以同服务器分配给的串口链接的外设通信了。发送数据到服务器的串口,和接收服务器发送回来的数据。
4 开发工具
Microsoft Visual C++ 6.0是微软公司推出的开发Win32应用程序(Windows 95/98/2000/XP/NT)的、面向对象的可视化集成工具。它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C++类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。
目 录
1 引言 1
1.1 课题背景 1
1.2 研究现状 1
1.3 研究的意义 1
2 相关理论基础 1
2.1 WINDOWS NT 服务 1
2.2 串口通信 2
(毕业设计 )
2.3 多线程及线程间通信 3
2.4 安全队列 4
2.5 WINDOWS套接字规范 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
参考文献
[1] 乔林,杨志刚.Visual C++ 6.0高级编程技术——MFC与多线程篇[M].北京:中国铁道出版社,2000。
雷斌,杨建华,黄超,何斌.Visual C++ 6.0网络编程技术[M].北京:人民邮电出版社,2000。
汪翔,袁辉.Visual C++实践与提高——网络编程篇[M].北京:中国铁道出版社,2001。
龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2004。
谭思亮,邹超群.Visual C++串口通信工程开发实例导航[M].北京:人民邮电出版社,2003。
郭晓鹏,李存斌.Visual C++高级编程及其项目应用开发[M].北京:中国水利水电出版社,2004。
王险峰,刘宝宏.Windows环境下的多线程编程原理与应用[M].北京:清华大学出版社,2002。
张锦,张俊.深入学习:Win32系统服务开发与实例[M].北京:电子工业出版社,2001。
李凌.Winsock 2网络编程实用教程[M].北京:清华大学出版社,2003。
VC(8)
< class="886