多虚拟串口系统及其通信方法

文档序号:6606299阅读:249来源:国知局
专利名称:多虚拟串口系统及其通信方法
技术领域
本发明涉及通信领域,具体而言,涉及一种多虚拟串口系统及其通信方法。
背景技术
通常,普通电脑上物理的串口资源有限,大多为1到2个(如coml、com2等),当 实际业务应用需求多于系统实际硬件配置时,传统的方法是扩展物理串口数量,由专业公 司提供串口物理芯片电路板卡和驱动程序,这样就实现了多个物理串口的配置和使用,这 在传统的工业场合经常使用,但带来的最直接问题是增加了投资成本。如图1所示,示出了 传统的串口组网的架构。在相关技术中出现了一种方法,S卩,虚拟串口与网络通信相结合的技术,从而实现 传统串口设备切换到IP网络,以及实现串口数据在网络中的透明传输。考虑到兼容已有的 串口应用软件,使得底层通信方式的变化对串口应用完全屏蔽,因而,虚拟串口驱动可以不 通过硬件扩展串口,实现软件扩展,从而降低了成本。同时,虚拟串口可以在不更改原有串 口应用软件的前提下实现串口接入IP网络的功能,即串口接入服务器。发明人发现上述的相关技术中,由于串口线程往往设置在操作系统层,因而,导致 虚拟串口网络架构不够清晰,且不利于用户进行开发设计维护监控。

发明内容
本发明的主要目的在于提供一种多虚拟串口系统及其实现方法,以至少解决上述 的虚拟串口网络传输架构不够清晰,且不利于用户进行监控开发设计维护问题。根据本发明的一个方面,提供了一种多虚拟串口系统,该多虚拟串口系统包括多 个串口管理模块,位于多虚拟串口系统的应用层中,用于调用对应串口设备的串口资源进 行串口通信,其中,串口资源位于多虚拟串口系统的操作系统层中。根据本发明的另一方面,提供了一种多虚拟串口系统的通信方法,该方法包括多 虚拟串口系统的应用层中的串口管理模块接收来自应用程序的串口通信请求;串口管理模 块调用多虚拟串口系统的操作系统中的对应串口设备的串口资源,以进行串口通信请求所 请求的串口通信。通过本发明,采用包括以下结构的多虚拟串口系统多个串口管理模块,位于所述 多虚拟串口系统的应用层中,用于调用对应串口设备的串口资源进行串口通讯,其中,所述 串口资源位于所述多虚拟串口系统的操作系统层中,解决了虚拟串口网络传输架构不够清 晰,且不利于用户进行监控的问题,进而达到了使代码实现简洁、虚拟串口数量多,数据流 量大效果。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中
图1是根据相关技术的串口组网的示意图;图2是根据本发明实施例的多虚拟串口系统的示意图;图3是根据本发明实施例的多虚拟串口系统的实现方法的流程图;图4是根据本发明实施例的多虚拟串口系统的通信方法的流程图。
具体实施例方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的 情况下,本申请中的实施例及实施例中的特征可以相互组合。根据本发明实施例,提供了一种多虚拟串口系统及其实现方法。图2是根据本发明实施例的多虚拟串口系统的示意图。如图2所示,根据本发明实施例的多虚拟串口系统包括多个串口管理模块,该多 个串口管理模块位于所述多虚拟串口系统的应用层中,用于调用对应串口设备的串口资源 进行串口通信,其中,所述串口资源位于所述多虚拟串口系统的操作系统层中。该多个串口 管理模块可以位于所述多虚拟串口系统的应用层通信链路管理程序中,某个串口管理模块 与位于操作系统层虚拟串口驱动程序中相应的串口资源进行数据交互通信。如图2所示,在多虚拟串口系统中包括应用程序层,操作系统层以及设备数据层, 通信链路管理程序位于应用程序层之中。在该实施例中,由于多个串口线程设置于通信链 路管理程序中,因而,串口线程设置于应用程序层,使代码实现简洁开发维护更加方便、便 于用户监控。在下行方向,串口 η应用打开串口行为、关闭串口行为、写入数据,读取数据与多 虚拟串口系统的虚拟串口驱动程序中的对应串口设备资源产生交互操作。操作系统中的对应虚拟串口驱动程序通知多虚拟串口系统的应用层中的串口管 理模块以接收来自应用程序串口 η应用的串口通信请求。在上行方向,串口管理模块一旦接收到的网络设备的数据,调用多虚拟串口系统 的操作系统中的对应串口设备的串口资源以产生网络侧的数据通信,从而由应用程序串口 η应用读取网络侧的数据,这样就完成网络设备TCP/UDP通信到串口应用的上行数据交互。应用程序串口 η应用与多虚拟串口系统的操作系统中的对应串口设备的串口资 源进行交互包括应用程序串口 η应用打开,关闭,读取,写入等操作与多虚拟串口系统的 操作系统中的串口驱动实例号一一对应,同时,的串口驱动设置事件通知通信链路管理程 序的串口管理模块,因而,应用程序串口 η应用、串口驱动资源和串口管理模块一一对应。 这样实现了的应用程序串口 η应用到的操作系统中的串口驱动,通信链路管理程序的串口 管理模块,网络设备的下行数据流动。通信链路管理程序串口管理模块一旦接收到的网络设备侧的数据,就会调用多虚 拟串口系统的操作系统中的对应串口设备的串口资源,接着到达的应用程序串口 η应用, 以进行网络设备通信请求的TCP/UDP通信的上行数据流动。虚拟串口驱动的资源写数据区事件标志多次自动置位,通知通信链路管理程序的 串口管理模块多次读取数据直至数据读完。每当通信链路管理程序第一次读操作行为发生 后,自动检测驱动的写数据环形缓存区是否存在有效数据,如果存在,则对写数据区事件标 志再次置位,自动重复置位直至数据读出完毕。
4
位于多虚拟串口系统的应用层中的通信链路管理程序的多个串口管理模块,其线 程处于通信链路管理程序的监控,一旦线程退出,监控狗自动重启动该线程的串口管理模 块。虚拟串口驱动程序实现由windows操作系统自身维护虚拟串口实例表,采用IRP 消息实现串口实例数量很多,数据流量很大的服务器工作方式。上述的串口资源可以为多个,其中,多个串口资源和多个串口管理模块一一对应, 多个串口资源和多个串口应用程序一一对应。串口资源和多个串口管理模块之间可以采用I/O Request Package (IRP,输入/输 出请求包)消息进行通信。各个串口资源包括以下至少之一读数据缓存区、写数据缓存区、定时器资源、事 件资源、锁资源。上述的多虚拟串口系统还包括多个读数据缓存区和多个写数据缓存区,位于多 虚拟串口系统的操作系统层中,每个读数据缓存区和每个写数据缓存区分别用于被一个串 口管理模块访问。本发明能够实现windows操作系统虚拟串口驱动和网络通信技术相结合。因而适 用于windows操作系统虚拟串口驱动,网络通信的开发应用场合。本发明能够实现TCP/IP网络通信系统替换串口通信系统,保持应用软件串口方 式依然正常工作。如图1所示,本发明采用以下技术方案。应用程序层是串口应用,主要是创建串 口,打开串口,读取串口,写入串口,包括同步和异步方式操作,如串口调试助手,超级终端 等。操作系统层是操作系统自带的串口驱动或者专业厂家提供的串口驱动程序。硬件物理 层是物理串口或者扩展物理串口,提供一定数量的实际物理串口的电路芯片板。设备数据 层是指带有串口的各种终端设备,基于物理串口而形成的RS232/RS422/RS485的网络。本发明中虚拟串口驱动是一个可在Windows平台计算机下操作的程序,此驱动程 序可以创造数个“虚拟”的串行端口。在串口应用程序看来,这些虚拟的串行端口跟物理的 串行端口相同。在应用程序编码中,与传统的普通物理串口的操作如打开串口,读取数据, 写入数据,以及同步与异步方式操作都是一样。对串口设备的各种参数读取或者设置,可 以通过windows的相关API读取或者设置。然后保存到通信链路管理程序中,并与设备数 据层的网络/串口转换设备的物理串口产生交互,这里有两种应用场景串口 _网络和串 口-网络-串口。对前者处理比较简单,串口数据封装成IP即可,对后者则需要经过网络 的传输后还原成串口的过程。进一步地,串口应用程序对虚拟串口的操作,如设置属性等, 最终会通过网络传输作用到对应的设备物理串口上,通过网络的传输相当于把串口线拉长 了,对串口应用而言看到的仍然是串口 _串口的点对点通信。对比图1和图2可以看出,原有的串口应用程序可以不做任何修改就可以使用。 虚拟串口驱动与传统的物理串口驱动差异在于底层数据的传输。在应用程序层,串口应用 的各种软件,通过相关API对不同串口进行打开,读取,写入数据等操作。这些数据交互信 息行为与驱动程序产生交互。传统串口驱动程序会因为这些不同操作行为去操作实际的物 理串口芯片。而虚拟串口驱动程序对这些操作行为,却是直接与应用程序层的通信链路管 理程序产生信息交互,并由通信链路管理程序进一步与设备数据层的各类通信设备交互工作,这包括一般的网络设备,网络/串口转换设备。这些数据交互是双向的。通信链路管理 程序采用不同的通信传输协议与各类通信设备通信,包括TCP server,TCP client,UDP等, 具体的协议类型软件可配置,这样,网路的远距离传输等优势可以充分地体现出来。所以不 论串行设备或计算机串口应用程序都无法辨别真实串行与虚拟串行传输的差异,实现了透 明传输。对于虚拟串口驱动程序,与现有技术相比较,实现目的原理各个厂家差异不大,但 设计方法多种多样,也各有优缺点。有的厂家是在内核驱动程序中就实现了多线程,同时对 通信链路管理程序也提供了 windows相关API的支持,串口应用程序和通信链路管理程序 都可以通过标准的API接口操作,此方案的优点是程序架构清晰,因使用标准API接口访问 从而方便第三方软件开发使用。在本发明的虚拟串口驱动设计中,对每一个虚拟串口对应开辟一个串口资源,内 核没有实现多线程,但在通信链路管理程序采用多线程技术,每个虚拟串口对应一个线程, 该线程仅负责对此虚拟串口资源的各种操作行为消息交互,同时与设备数据层的相关通信 设备数据通信。驱动程序采用IRP消息驱动,通过windows操作系统自身对消息队列维护, 无论读和写环形数据区都采用事件通知方式,多级环形缓存设计,相对驱动多线程和共享 内存等方式的驱动程序,结构合理,逻辑高效,代码简洁,可维护性好。此外,由windows操 作系统自身维护虚拟串口实例表,采用IRP消息可以实现串口实例数量很多,数据流量很 大的服务器工作方式。图3是根据本发明实施例的多虚拟串口系统的实现方法的流程图。如图3所示,DriverEntry是驱动程序的入口,虚拟串口方案主要实现步骤如下步骤Sl =AddDevice,增加虚拟串口设备,在该步骤中,在内核驱动程序中为该虚 拟串口开辟一定大小的读数据缓存区和一定大小的写数据缓存区,以及其他相应的定时器 KTIMER, KEVENT, KSPIN_L0CK等系统资源,把这些资源添加到虚拟串口设计结构体而生成 的新实例(IoCreateDevice)维护指针中,同时把该串口实例挂载到设备栈资源管理链表 (IoAttachDeviceToDeviceStack),这个链表是系统运行维护的重要依据。步骤S2 :IRP_MJ_WRITE 消息设计方法,VSerialWrite,串 口应用 程序使用WriteFile时,就产生该写入数据消息。在该消息方法中,通过 IoGetCurrentlrpStackLocation获取当前IRP消息的有关参数,并拷贝该IRP消息的相应 数据到写缓存数据区中,写数据缓存数据区采用环形管理,具有相应字节数量的缓存功能。 在VSerialWrite方法中,每次写数据,通过KeSetEvent设置写数据区的事件标志,用于表 明写数据环形缓存区已经有了数据到来。步骤S3 与此相应,通信链路管理程序,对该串口实例存在一个管理线程。该 线程存在while循环,每当写数据缓存区有数据,相应事件标志在驱动程序中会被置位, WaitForSingleObject 返回,由 DeviceIoControl 设置 WDM_I0CTL_GET_DATA 读取虚拟串 口 驱动写缓存区的数据。对应虚拟驱动的写环形数据缓存区,通信链路管理程序中同时开辟 了读数据环形缓存区,DeviceIoControl的IpOutBuffer为读缓存区指针,nOutBufferSize 的数据长度最大为该读数据区长度,在此上限条件下可以自由设置,如果虚拟驱动实例的 写数据区数据很多,超过每次读取的长度,写数据区事件标志多次置位,则通信链路管理程 序会多次读取数据直至数据读完。这里涉及写数据区事件标志如何自动重复置位问题,
6每当通信链路管理程序第一次读操作行为发生后,自动检测驱动的写数据区是否存在有 效数据,如果存在,则对写数据区事件标志置位,自动重复置位直至数据读出完毕。其中, DeviceIoControl 是 windows 操作系统自身的标准函数,WDM_IOCTL_GET_DATA 同 windows 自身的驱动消息定义使用类似。有效数据是指在读写缓存数据中,一次没有被读取过的数 据,一旦被读取过了,就是无效数据。步骤S4:通信链路管理程序根据与网络设备的配置对应关系,因为是多线程设 计,不需要维护查询较大的媒体转发表,把驱动读出的数据发送到下层相关网络设备,这样 实现了从串口应用程序,串口虚拟驱动,通信链路管理程序,网络/串口设备的下行方向的 数据流动。步骤S5 相对应IRP_MJ_READ消息方法设计,通信链路管理程序,对应该串口实例 维护一个线程。该线程while循环,每当网络/串口设备上传数据时,检测网络端口信息标 志有数据到来,就读取这些网络设备的数据到相应缓存数据区中。步骤S6 通信链路管理程序中,一旦某线程读取到网络设备的数据,该线程则 会通过DeviceloComrol,虚拟串口描述符,WDM_I0CTL_SET_DATA等参数把数据写入到 虚拟串口的读环形缓存数据区。同时,虚拟串口驱动程序会检测该串口实例如果存在 WaitOnMaskIrp消息和WaitMask的标志位,结束WaitOnMaskIrp消息,设置接收数据标志, 表明已有数据到驱动的读环形缓存区。I0CTL_SERIAL_GET_C0MMSTATUS消息中设置相关参 数,以提供应用查询状态参数。步骤S7 :IRP_MJ_READ消息设计方法,VSerialRead,串口应用程序使用ReadFile 时,就产生该读取数据消息。如果该虚拟串口实例的读环形数据缓存区中存在数据,就把这 些数据拷贝到该IRP的相应数据区,如果该IRP消息产生时,读数据区不存在有效的数据, 则把该IRP消息设置为挂起状态,同时启动该虚拟串口的定时器,为串口应用程序实现异 步读取数据做准备。步骤S8 当定时器超时到达时,检查读取环形数据区是否存在有效的数据,如果 存在,把数据拷贝到上次挂起的IRP消息的相应数据区。同时,把上次挂起的IRP消息清 除。如果没有数据,也会清楚上次的IRP消息。该步骤是串口应用异步读取数据的重要保 证。这样就可以实现同步或异步读取数据。通过上述相关步骤,同时实现了网络/串口设备,通信链路管理程序,串口虚拟驱 动串口应用程序的上行方向的数据流动。此外,通信链路管理程序每个串口实例CreateFile的dwShareMode标志位需要设 置为FILE_SHARE_READ FILE_SHARE_WRITE,只有这样,才可以同时操作该串口实例的句柄, 读写数据等多种操作。同时在该部分程序中,分别开辟读取和写入环形缓存数据区。配置 一个串口实例可以对应多个通信设备数据等,实现信息交互。图4是根据本发明实施例的多虚拟串口系统的通信方法的流程图。如图4所示,根据本发明实施例的多虚拟串口系统的通信方法包括步骤S402,多虚拟串口系统的应用层中的串口管理模块接收来自应用程序的串口 通信请求。步骤S404,串口管理模块调用多虚拟串口系统的操作系统中的对应串口设备的串 口资源,以进行串口通信请求所请求的串口通信。
串口管理模块调用多虚拟串口系统的操作系统中的对应串口设备的串口资源包 括串口管理模块调用多虚拟串口系统的操作系统中与串口管理模块一一对应的串口资 源,其中,多个串口资源和多个串口设备一一对应。优选地,串口管理模块调用多虚拟串口系统的操作系统中的对应串口设备的串口 资源,以进行串口通信请求所请求的串口通信包括应用程序利用串口通信,与串口设备交 换数据。上述方法还可以包括串口管理模块访问多虚拟串口系统中与其一一对应的读数 据缓存区和写数据缓存区。串口资源和多个串口管理模块之间可以采用IRP消息进行通信。从以上的描述中,可以看出,本发明的技术方案具有如下优点1)可以不用维护媒体转发表,即虚拟串口设备和网络通信协议端口号的对应表, 每个线程负责守护对应的套接字端口,而线程与虚拟串口之间是唯一绑定的,较单线程查 询媒体转发表方式效率要高。2)多线程虽然耗费更多的系统资源,但由于分布式处理,可靠性较单线程集中式 处理要高,单线程异常退出只会影响对应的虚拟串口业务流处理,从而保证故障不扩散到全局。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示 出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或 步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种多虚拟串口系统,其特征在于,包括多个串口管理模块,位于所述多虚拟串口系统的应用层中,用于调用对应串口设备的串口资源进行串口通信,其中,所述串口资源位于所述多虚拟串口系统的操作系统层中。
2.根据权利要求1所述的多虚拟串口系统,其特征在于,所述串口资源为多个,其中, 所述多个串口资源和所述多个串口管理模块一一对应,所述多个串口资源和多个串口应用程序一一对应。
3.根据权利要求2所述的多虚拟串口系统,其特征在于,所述串口资源和所述多个串 口管理模块之间采用IRP消息进行通信。
4.根据权利要求2所述的多虚拟串口系统,其特征在于,各个所述串口资源包括以下 至少之一读数据缓存区、写数据缓存区、定时器资源、事件资源、锁资源。
5.根据权利要求1所述的多虚拟串口系统,其特征在于,还包括多个读数据缓存区和多个写数据缓存区,位于所述多虚拟串口系统的操作系统层中, 每个所述读数据缓存区和每个所述写数据缓存区分别用于被一个所述串口管理模块访问。
6.一种多虚拟串口系统的通信方法,其特征在于,包括所述多虚拟串口系统的应用层中的串口管理模块接收来自应用程序的串口通信请求;所述串口管理模块调用所述多虚拟串口系统的操作系统中的对应串口设备的串口资 源,以进行所述串口通信请求所请求的串口通信。
7.根据权利要求6所述的方法,其特征在于,所述串口管理模块调用所述多虚拟串口 系统的操作系统中的对应串口设备的串口资源包括所述串口管理模块调用所述多虚拟串口系统的操作系统中与所述串口管理模块一一 对应的串口资源,其中,所述多个串口资源和多个串口应用程序一一对应。
8.根据权利要求7所述的方法,其特征在于,所述串口管理模块调用所述多虚拟串口 系统的操作系统中的对应串口设备的串口资源,以进行所述串口通信请求所请求的串口通 信包括所述应用程序利用所述串口通信,与所述串口设备交换数据。
9.根据权利要求7所述的方法,其特征在于,还包括所述串口管理模块访问所述多虚拟串口系统中与其一一对应的读数据缓存区和写数 据缓存区。
10.根据权利要求9所述的方法,其特征在于,所述串口资源包括事件资源,所述串 口管理模块访问所述多虚拟串口系统中与其一一对应的读数据缓存区和写数据缓存区包 括对所述事件资源进行多次自动置位直到所述写数据缓存区中的数据被访问完。
全文摘要
本发明公开了一种多虚拟串口系统及其通信方法。其中,该多虚拟串口系统包括多个串口管理模块,该串口管理模块位于所述多虚拟串口系统的应用层中,用于调用对应串口设备的串口资源进行串口通讯,其中,所述串口资源位于所述多虚拟串口系统的操作系统层中。通过本发明,能够使代码实现简洁,以及使虚拟串口数据的流量更大。
文档编号G06F9/455GK101894041SQ201010232240
公开日2010年11月24日 申请日期2010年7月15日 优先权日2010年7月15日
发明者刘俊峰, 陈明恩 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1