电脑与串口外接模块自动匹配通信的方法
技术领域 本发明涉及通信技术,特别是涉及电脑与串口外接模块的RS232通信技术。
背景技术 电脑与串口外接模块的RS232通信技术,常用于家用电子产品、工业控制、安全识别等领域。由于电脑有多个串口,外接模块可以被连接在任意一个串口上,传统的RS232通信技术中,没有提供自动匹配通信方案,需要用户辨别电脑串口的端口号,手工配置端口号、波特率,对用户要求较高,用户使用不方便。
发明内容 本发明要解决的技术问题在于避免上述现有技术的不足之处而提出一种电脑与串口外接模块自动匹配通信的方法,无需用户辨别串口的端口号,无需手工配置端口号和波特率,使用方便。
本发明解决所述技术问题可以通过采用以下技术方案来实现:
提出一种电脑与串口外接模块自动匹配通信的方法,包括有电脑、电脑串口通信软件、串口外接模块,包括以下步骤:
A.串口外接模块初始化I/O口,循环侦听电脑串口发送的数据;
B.电脑串口通信软件依次初始化所有电脑串口,启动接收线程,向每个串口发送握手包;
C.串口外接模块接收到握手包,回复握手响应包;
D.电脑串口通信软件接收到某个串口返回的握手响应包后,判断此串口上有外接模块,记录此串口的端口号,使用此串口进行通信。
当电脑与串口外接模块采用预先约定的波特率通信时,所述步骤A中,所述串口外接模块初始化I/O口后按约定的波特率侦听电脑串口发送的数据;所述步骤B中,电脑串口通信软件按约定的波特率依次初始化所有电脑串口。
本发明中,电脑串口通信软件通过检测串口接收电脑串口通信软件发送的握手包的方式,自动识别串口外接模块连接电脑的RS232串口的端口号。也可以由串口外接模块主动发送握手包,由电脑串口通信软件通过检测某个串口接收到握手包来判断串口外接模块连接的串口端口号。之所以采用由电脑串口通信软件主动发送握手包、检测握手响应包的方案,是考虑到可以与串口外接模块通过检测波形自动计算电脑RS232串口的波特率的技术方案统一起来。
在电脑与串口外接模块没有约定波特率的情况下,本发明电脑与串口外接模块自动匹配通信的方法包括如下步骤:
A.串口外接模块初始化I/O口,循环侦听电脑串口是否发送数据;
B.电脑串口通信软件按缺省的波特率依次初始化所有电脑串口,启动接收线程,向每个串口发送握手包;
B1.串口外接模块在检测到电脑串口发送数据时,用计数器测量低电平保持时间,计算每位时间宽度,确定电脑发送数据的波特率;
C.串口外接模块根据步骤B1中确定的波特率向电脑回复握手响应包;
D.电脑串口通信软件接收到某个串口返回的握手响应包后,判断此串口上有外接模块,记录此串口的端口号,使用此串口进行通信;
同现有技术相比较,本发明电脑与串口外接模块自动匹配通信的方法的技术效果在于:自动识别串口外接模块所连接的电脑串口的端口号,串口外接模块自动检测匹配波特率,无需用户辨别电脑端口号,无需手工配置,使用方便。本发明的技术方案实现成本低,接口清晰,可以方便地嵌入到家用电子产品、工业控制、安全识别等方案中。
附图说明
图1是本发明电脑与串口外接模块自动匹配通信的方法的总体架构示意图;
图2是串口外接模块2的电路原理图;
图3是电脑1与串口外接模块2以约定波特率通信的软件流程图;
图4是电脑1与串口外接模块2预先没有约定波特率,自动匹配波特率的软件流程图;包括:图4-1是电脑1与串口外接模块2软件主流程图,图4-2是串口外接模块2根据握手包检测波特率的电平波形示意图,图4-3是串口外接模块2检测波特率软件流程图。
具体实施方式 以下结合附图所示之最佳实施例作进一步详述。
如图1所示,电脑1有四个串口,包括COM1、COM2、COM3和COM4;电脑串口通信软件12负责管理所有串口的初始化、数据发送/接收,并判断串口外接模块2与哪个串口相连;串口外接模块2连接在电脑1的任意一个串口。电脑串口通信软件12对应用软件11提供了统一的通信接口供其调用,并屏蔽了端口号、波特率等串口通信细节;优选的,电脑串口通信软件12作为一个动态链接库供应用软件11调用,也可以封装成一个类嵌入到应用软件11中。
通过专用的多串口卡设备,电脑1可以提供四个以上的串口,电脑串口通信软件12对所有串口采用同样的管理流程。
图2是串口外接模块2的电路原理图。串口外接模块2连接到电脑1的任意一个串口,通过窃电电路从电脑1串口获取5V电源;电路以8位单片机EM78P156为中心控制模块,以软件方式实现串口通信,单片机I/O管脚P61负责向电脑1串口发送数据,单片机I/O管脚P62负责接收来自电脑1的串行数据。
所述串口外接模块电路是低成本的优选方案,市场上也有其它采用专用芯片实现RS232通信电路的方案,这里不再详述。
图3是电脑1与串口外接模块2以约定波特率通信的软件流程图,其流程详述如下:
串口外接模块2初始化I/O口,按约定的波特率侦听电脑串口发送的数据;
电脑串口通信软件12按约定的波特率依次初始化串口COM1、COM2、COM3和COM4,启动接收线程,向每个串口发送握手包;
串口外接模块2接收到握手包,按约定的波特率回复握手响应包;
电脑串口通信软件12接收到某个串口返回的握手响应包后,判断此串口上连接有串口外接模块2,记录此串口的端口号,使用此串口进行通信;其它串口在指定时间内没有收到握手回复包,电脑电脑串口通信软件12判断其它串口上没有串口外接模块,关闭其它端口。
图4是电脑1与串口外接模块2预先没有约定波特率,自动匹配波特率的软件流程图;图4-1是电脑1与串口外接模块2软件主流程图,图4-2是串口外接模块2根据握手包检测波特率的电平波形示意图,图4-3是串口外接模块2检测波特率软件流程图;
如图4-1所示,电脑1与串口外接模块2软件主流程详述如下:
串口外接模块2初始化I/O口,侦听电脑串口是否发送数据,即循环检测单片机输入管脚是否为低电平(RS232发送数据的起始位是低电平);
电脑串口通信软件12按电脑缺省的波特率依次初始化串口COM1、COM2、COM3和COM4,启动接收线程,向每个串口发送握手包;
串口外接模块2在单片机输入管脚检测到电脑串口发送数据到达时,根据握手包的波形计算并匹配波特率;并按照此波特率向电脑1回复握手响应包;
电脑串口通信软件12接收到某个串口返回的握手响应包后,则判断此串口上连接有串口外接模块2,记录此串口的端口号,使用此串口进行通信;其它串口在指定时间内没有收到握手回复包,电脑电脑串口通信软件12判断其它串口上没有串口外接模块,关闭其它端口。
图4-2所示为单片机输入脚接收到的波形。电脑1向串口外接模块2发送的握手包为一个字节,为0x00;数据格式为1位起始位、8位数据位、没有奇偶校验位、2位停止位、1位空闲位。在单片机输入脚,握手包的1位起始位和8位数据位组成一个持续的低电平;串口外接模块2在起始位开始的下降沿开始计时,到第8位数据位末尾的上升沿结束计时,低电平时间宽度T为9位时间宽度,每位时间宽度为T/9,计算波特率为9/T。
在串口外接模块2实际电路中,由于元器件参数的影响,下降沿和上升沿有一定的时间,波特率9/T不是精确的波特率,但比较接近实际波特率,串口接收模块(2)根据元器件参数进行调整补偿,适配为标准的波特率,如300bps、600bps、1200bps、2400bps、4800bps、9600bps、19200bps、38400bps等。
采用0x00作为握手包的原因,主要是考虑元器件参数对下降沿和上升沿的影响。0x00可以构成9位低电平的时间宽度,每位时间宽度为平均值T/9,可以把元器件参数的影响降到最小。按同样的波特率计算方法,也可以采用其它字节值作为握手包,只需要根据字节值形成的低电平时间宽度计算并调整补偿波特率。
图4-3所示,串口外接模块2检测握手包低电平时间宽度的软件流程如下所述:
串口外接模块2软件初始化I/O口,把计数器清零;循环查询单片机输入管脚是否变为低电平,即是否收到电脑1串口发送数据的起始位;如果检测到单片机输入管脚变为低电平,则延时10us,计数器加1,并查询单片机输入管脚是否变为高电平;如果没有变为高电平,则继续延时,累加计数器;在单片机输入管脚变为高电平后,根据计数器值和循环中的指令时间计算时间宽度T=计数器值×(10us+循环中的其它指令时间),计算波特率为9/T。由于下降沿和上升沿有一定的时间,波特率9/T不是精确的波特率,串口外接模块2软件根据元器件参数调整补偿为标准波特率,之后采用确定的波特率与电脑1进行通信。