多串口通信方法及装置与流程

文档序号:11177094阅读:1272来源:国知局
多串口通信方法及装置与流程

本发明涉及串口通信技术领域,具体而言,涉及一种多串口通信方法及装置。



背景技术:

串口通信是单片机、数字信号处理器等嵌入式系统之间,以及嵌入式系统与个人电脑或无线模块之间一种普遍使用的点到点的通信方法。工控机、嵌入式电脑和pac通常连接多个rs232、rs485/422、can等串口通信设备,现有技术采用一个或两个线程(或进程)管理一个串口,多个串口需要由多个线程(或进程)进行管理。

每个线程(或进程)都需要占用一些操作系统的资源,在不同线程(或进程)之间进行切换也要消耗cpu的运行时间。在多个线程(或进程)中接收到的数据不能保持原来的顺序,对控制系统的性能会有不良影响。



技术实现要素:

有鉴于此,本发明的目的在于提供一种多串口通信方法及装置,以解决上述问题。

本发明较佳实施例提供一种多串口通信方法,应用于能够与多个从设备通信连接的主控设备,所述主控设备包括多个串口,所述主控设备通过各所述串口分别与各所述从设备通信连接,所述方法包括:

进入通信线程,初始化各所述串口的工作状态变量及各所述串口的时间记录;

检测各所述串口的通信状态,查找出未实现通信收发的串口;

调用串口扫描函数,根据未实现通信收发的串口的当前通信指令及数据收发状态信息修改该串口的工作状态变量,使用查询方式实现该串口的通信收发;

调用指定函数交出该通信线程的当前时间片;

检测是否完成所有串口通信,若是,则发出通信已完成事件。

进一步地,所述发出通信已完成事件的步骤之后,所述方法还包括:

判断是否到达预先分配给所述通信线程的指定运行时间,若未到达,则调用指定函数交出该通信线程的剩余时间片,以将该剩余时间片进行再分配。

进一步地,所述调用串口扫描函数,根据未实现通信收发的串口的当前通信指令及数据收发状态信息修改该串口的工作状态变量,使用查询方式实现该串口的通信收发的步骤,包括:

检测系统总线是否处于空闲状态,若处于空闲状态,则初始化发送参数,将系统总线设置为发送状态,发送通信指令;

判断通信指令是否发送完成,若发送完成,则初始化接收参数,将系统总线设置为等待接收状态;

判断是否接收到数据,若接收到数据,则将系统总线设置为接收状态;

判断是否接收完一帧数据,若接收完一帧数据,则对接收到的数据进行处理,并将系统总线设置为空闲状态。

进一步地,所述判断通信指令是否发送完成的步骤之后,所述方法还包括:

判断通信指令发送是否超过预设时长,若超过预设时长,则为系统总线设置超时故障标志。

进一步地,所述判断是否接收到数据的步骤之后,所述方法还包括:

判断等待接收状态是否超过预设时长,若超过预设时长,则为系统总线设置超时故障标志。

进一步地,所述检测是否完成所有串口通信,若是,则发出通信已完成事件的步骤,包括:

检测所有串口是否已实现通信指令发送及数据接收和处理过程,若已完成,则清除通信指令计数器,并为系统总线设置通信完成标志。

本发明另一较佳实施例提供一种多串口通信装置,应用于能够与多个从设备通信连接的主控设备,所述主控设备包括多个串口,所述主控设备通过各所述串口分别与各所述从设备通信连接,所述多串口通信装置包括:

初始化模块,用于进入通信线程,初始化各所述串口的工作状态变量及各所述串口的时间记录;

查找模块,用于检测各所述串口的通信状态,查找出未实现通信收发的串口;

修改模块,用于调用串口扫描函数,根据未实现通信收发的串口的当前通信指令及数据收发状态信息修改该串口的工作状态变量,使用查询方式实现该串口的通信收发;

第一调用模块,用于调用指定函数交出该通信线程的当前时间片;

检测模块,用于检测是否完成所有串口通信,若是,则发出通信已完成事件。

进一步地,所述多串口通信装置还包括判断模块及第二调用模块;

所述判断模块用于判断是否到达预先分配给所述通信线程的指定运行时间;

所述第二调用模块用于在所述判断模块判断结果为否时,调用指定函数交出该通信线程的剩余时间片,以将该剩余时间片进行再分配。

进一步地,所述修改模块包括检测单元、发送参数初始化单元、第一判断单元、接收参数初始化单元、第二判断单元、设置单元、第三判断单元以及处理单元;

所述检测单元用于检测系统总线是否处于空闲状态;

所述发送参数初始化单元用于在系统总线处于空闲状态时,初始化发送参数,将系统总线设置为发送状态,发送通信指令;

所述第一判断单元用于判断通信指令是否发送完成;

所述接收参数初始化单元用于在通信指令发送完成时,初始化接收参数,将系统总线设置为等待接收状态;

所述第二判断单元用于判断是否接收到数据;

所述设置单元用于在接收到数据时,将系统总线设置为接收状态;

所述第三判断单元用于判断是否接收完一帧数据;

所述处理单元用于在接收完一帧数据时,对接收到的数据进行处理,并将系统总线设置为空闲状态。

进一步地,所述修改模块还包括第四判断单元及故障标志设置单元;

所述第四判断单元用于判断通信指令发送是否超过预设时长;

所述故障标志设置单元用于在超过预设时长时,为系统总线设置超时故障标志。

本发明实施例提供的多串口通信方法及装置,通过函数调用及循环查询方式来实现多串口的通信收发,减少了系统资源的占用并减少了cpu的运行时间。并且,在完成扫描实现串口通信收发后即发出通信已完成事件,有利于其它线程统一处理通信数据。本发明提供的多串口通信方案,能够在单线程中实现多串口的通信收发,减少了cpu消耗并提高了系统性能。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明较佳实施例提供的一种多串口通信方法的应用场景示意图。

图2为本发明较佳实施例提供的主控设备的示意性结构框图。

图3为本发明较佳实施例提供的多串口通信方法的流程图。

图4为图3中步骤s105的子步骤的流程图。

图5为本发明较佳实施例提供的多串口通信装置的功能模块框图。

图6为本发明较佳实施例提供的修改模块的功能模块框图。

图7为本发明较佳实施例提供的修改模块的另一功能模块框图。

图标:100-主控设备;110-多串口通信装置;111-初始化模块;112-查找模块;113-修改模块;1131-检测单元;1132-发送参数初始化单元;1133-第一判断单元;1134-接收参数初始化单元;1135-第二判断单元;1136-设置单元;1137-第三判断单元;1138-处理单元;1139-第四判断单元;11310-故障标志设置单元;114-第一调用模块;115-检测模块;116-判断模块;117-第二调用模块;120-处理器;130-存储器;200-从设备。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,除非另有明确的规定和限定,术语“安装”、“设置”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

请参阅图1,为本发明实施例提供的多串口通信方法的应用场景示意图。该场景中包括主控设备100和从设备200。所述主控设备100通过网络与所述从设备200通信连接,以进行数据通信或交互。在本实施例中,所述从设备200可以包括多个,多个所述从设备200与所述主控设备100通信连接。其中,所述主控设备100包括多个串口,所述主控设备100通过各串口分别与各从设备200通信连接。所述主控设备100可以是但不限于工控机、嵌入式电脑及pac等。

请参阅图2,为本发明实施例提供的主控设备100的示意性结构框图。在本实施例中,所述主控设备100包括多串口通信装置110、处理器120及存储器130。其中,所述存储器130与所述处理器120之间直接或间接的电性连接,以实现数据的传输或交互。所述多串口通信装置110包括至少一个可以软件或固件的形式存储于所述存储器130中或固化在所述主控设备100的操作系统中的软件功能模块。所述处理器120用于执行所述存储器130中存储的可执行模块,例如所述多串口通信装置110包括的软件功能模块或计算机程序。

请参阅图3,是本发明实施例提供的一种应用于上述主控设备100的多串口通信方法的流程图。所应说明的是,本发明提供的方法不以图3及以下所述的具体顺序为限制。下面将对图3中示出的各步骤进行详细说明。

步骤s101,进入通信线程,初始化各所述串口的工作状态变量及各所述串口的时间记录。

步骤s103,检测各所述串口的通信状态,查找出未实现通信收发的串口。

在本实施例中,在进入通信线程的入口之后,则首先对主控设备100的多个串口的工作状态进行初始化。可以调用初始化函数对各串口进行初始化,包括对各串口的工作状态变量进行初始化以及对各串口的时间记录进行初始化。

检测当前系统通信是否已经终止,若已终止,则关闭所有串口,并退出该通信线程。若通信还未终止,则检测各所述串口的通信状态,查找出未实现通信收发的串口。例如,若串口的总数量为n,设定查找的初始变量为i,其中i=1,2……n。首先将i取值为1,检测是否完成第1个串口的通信收发,若已完成第1个串口的通信收发,则增大i值,将i取值为2,再检测是否完成第2个串口的通信收发。若检测到第1个串口未实现通信收发,则进行后续的串口扫描过程。按此逻辑,直到检测出所有串口中未实现通信收发的串口为止。

步骤s105,调用串口扫描函数,根据未实现通信收发的串口的当前通信指令及数据收发状态信息修改该串口的工作状态变量,使用查询方式实现该串口的通信收发。

请参阅图4,在本实施例中,步骤s105可以包括步骤s1051、步骤s1053、步骤s1055以及步骤s1057四个子步骤。

步骤s1051,检测系统总线是否处于空闲状态,若处于空闲状态,则初始化发送参数,将系统总线设置为发送状态,发送通信指令。

步骤s1053,判断通信指令是否发送完成,若发送完成,则初始化接收参数,将系统总线设置为等待接收状态。

步骤s1055,判断是否接收到数据,若接收到数据,则将系统总线设置为接收状态。

步骤s1057,判断是否接收完一帧数据,若接收完一帧数据,则对接收到的数据进行处理,并将系统总线设置为空闲状态。

在本实施例中,对于查找出的未实现通信收发的串口可调用串口扫描函数进行串口扫描以实现串口通信收发。可选地,在本实施例中,各串口都包含有工作状态变量、时间记录、通信指令、串口扫描函数和初始化串口工作状态的函数。

在进入串口扫描函数后,首先检测系统总线是否处于空闲状态,若当前系统总线不是处于空闲状态,则检测系统总线是否处于发送状态,类似地,若当前系统总线不处于发送状态,则检测当前系统总线是否处于等待接收状态,若当前系统总线也不为等待接收状态,再检测当前系统是否处于接收状态。按此逻辑,以确认出当前系统总线的工作状态。

若检测到当前系统总线处于空闲状态,则进行发送参数的初始化并将系统总线设置为发送状态。通过查找出的串口的某一串口向一从设备200发送通信指令。

可选地,在本实施例中,可预先对通信指令的发送时长进行设定。所述多串口通信方法还包括判断通信指令发送是否超过预设时长,若超过预设时长,则为系统总线设置超时故障标志的步骤。

在进入通信指令发送状态后,对通信指令发送状态进行检测。在检测到通信指令发送完成后,则对接收参数进行初始化,并将系统总线设置为等待接收状态。若检测到通信指令发送时长超过了预设时长,则为系统总线设置超时故障标志。

在进入等待接收状态后,对系统总线的等待接收状态进行检测以判断该串口是否接收到从设备200所发送的数据,一旦接收到从设备200发送的数据,则将系统总线设置为接收状态。

可选地,在本实施例中,可预先对系统等待接收时长进行设定。本实施例提供的多串口通信方法还包括判断等待接收状态是否超过预设时长,若超过预设时长,则为系统总线设置超时故障标志的步骤。

在系统总线进入接收状态后,即检测该串口是否接收完一帧数据,在接收完一帧数据后,则对接收到的数据进行处理,并将系统总线设置为空闲状态。至此,完成上述过程之后,则表明该串口实现了一次通信收发。

步骤s107,调用指定函数交出该通信线程的当前时间片。

步骤s109,检测是否完成所有串口通信,若是,则发出通信已完成事件。

在本实施例中,当串口实现通信收发后,系统将调用指定函数,交出该通信线程的当前时间片,以便cpu切换至其他串口的扫描。可选地,系统设置有通信指令计数器。可选地,检测是否完成所有串口通信可通过检测所有串口是否已实现通信指令发送及数据接收和处理过程来执行,若已完成,则清除通信指令计数器,并为系统总线设置通信完成标志,发出通信已完成事件。若并非所有串口都已完成通信指令发送及数据接收和处理过程,则将通信指令计数器的计数值加1,并返回扫描函数入口,循环进行串口扫描。

步骤s1011,判断是否到达预先分配给所述通信线程的指定运行时间,若未到达,则调用指定函数交出该通信线程的剩余时间片,以将该剩余时间片进行再分配。

可选地,在本实施例中,为了提高操作系统效率,可以预先给该线程分配一指定运行时间。在完成所有串口通信收发之后,则检测是否到达系统预先分配给该通信线程的指定运行时间,若还未到达,则表明时间还有剩余,则调用指定函数来释放该通信线程的剩余时间片。如此可以让操作系统切换至其他线程来执行,提升效率。

本实施例提供的多串口通信方法,使用函数调用和循环查询的方式替代了现有技术中线程切换来对多串口进行管理,占用的系统资源更少,且减少了cpu运行时间。并且,在单线程中进行多个串口的扫描,使串口实现通信收发,如此,在正常通信条件下,多个串口收发的数据不会与其他扫描周期的数据混淆。此外,在完成扫描实现所有串口通信后,即产生一通信已完成事件,有利于其它线程统一处理通信数据。

请参阅图5,为本发明实施例提供的一种多串口通信装置110的功能模块框图。所述多串口通信装置110包括初始化模块111、查找模块112、修改模块113、第一调用模块114、检测模块115、判断模块116以及第二调用模块117。

所述初始化模块111用于进入通信线程,初始化各所述串口的工作状态变量及各所述串口的时间记录。具体地,该初始化模块111可用于执行图3中所示的步骤s101,具体的操作方法可参考步骤s101的详细描述。

所述查找模块112用于检测各所述串口的通信状态,查找出未实现通信收发的串口。具体地,该查找模块112可用于执行图3中所示的步骤s103,具体的操作方法可参考步骤s103的详细描述。

所述修改模块113用于调用串口扫描函数,根据未实现通信收发的串口的当前通信指令及数据收发状态信息修改该串口的工作状态变量,使用查询方式实现该串口的通信收发。具体地,该修改模块113可用于执行图3中所示的步骤s105,具体的操作方法可参考步骤s105的详细描述。

所述第一调用模块114用于调用指定函数交出该通信线程的当前时间片。具体地,该第一调用模块114可用于执行图3中所示的步骤s107,具体的操作方法可参考步骤s107的详细描述。

所述检测模块115用于检测是否完成所有串口通信,若是,则发出通信已完成事件。具体地,该检测模块115可用于执行图3中所示的步骤s109,具体的操作方法可参考步骤s109的详细描述。

所述判断模块116用于判断是否到达预先分配给所述通信线程的指定运行时间。所述第二调用模块117用于在所述判断模块116判断结果为否时,调用指定函数交出该通信线程的剩余时间片,以将该剩余时间片进行再分配。具体地,该判断模块116和第二调用模块117可共同用于执行图3中所示的步骤s1011,具体的操作方法可参考步骤s1011的详细描述。

请参阅图6,在本实施例中,所述修改模块113包括检测单元1131、发送参数初始化单元1132、第一判断单元1133、接收参数初始化单元1134、第二判断单元1135、设置单元1136、第三判断单元1137以及处理单元1138。

所述检测单元1131用于检测系统总线是否处于空闲状态。所述发送参数初始化单元1132用于在系统总线处于空闲状态时,初始化发送参数,将系统总线设置为发送状态,发送通信指令。具体地,该检测单元1131和发送参数初始化单元1132可共同用于执行图4中所示的步骤s1051,具体的操作方法可参考步骤s1051的详细描述。

所述第一判断单元1133用于判断通信指令是否发送完成。所述接收参数初始化单元1134用于在通信指令发送完成时,初始化接收参数,将系统总线设置为等待接收状态。具体地,该第一判断单元1133和接收参数初始化单元1134可共同用于执行图4中所示的步骤s1053,具体的操作方法可参考步骤s1053的详细描述。

所述第二判断单元1135用于判断是否接收到数据。所述设置单元1136用于在接收到数据时,将系统总线设置为接收状态。具体地,该第二判断单元1135和设置单元1136可共同用于执行图4中所示的步骤s1055,具体的操作方法可参考步骤s1055的详细描述。

所述第三判断单元1137用于判断是否接收完一帧数据。所述处理单元1138用于在接收完一帧数据时,对接收到的数据进行处理,并将系统总线设置为空闲状态。具体地,该第三判断单元1137和处理单元1138可共同用于执行图4中所示的步骤s1057,具体的操作方法可参考步骤s1057的详细描述。

请参阅图7,在本实施例中,所述修改模块113还包括第四判断单元1139及故障标志设置单元11310。

所述第四判断单元1139用于判断通信指令发送是否超过预设时长。

所述故障标志设置单元11310用于在超过预设时长时,为系统总线设置超时故障标志。

综上所述,本发明提供的多串口通信方法及装置,应用于包括多个串口的主控设备100,通过函数调用及循环查询方式来实现多串口的通信收发,减少了系统资源的占用并减少了cpu的运行时间。并且,在完成扫描实现串口通信收发后即发出通信已完成事件,有利于其它线程统一处理通信数据。本发明提供的多串口通信方案,能够在单线程中实现多串口的通信收发,减少了cpu消耗并提高了系统性能。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1