CN117241231A - 基于优先级信息的消息调度方法和装置 - Google Patents

基于优先级信息的消息调度方法和装置 Download PDF

Info

Publication number
CN117241231A
CN117241231A CN202311127703.6A CN202311127703A CN117241231A CN 117241231 A CN117241231 A CN 117241231A CN 202311127703 A CN202311127703 A CN 202311127703A CN 117241231 A CN117241231 A CN 117241231A
Authority
CN
China
Prior art keywords
message
messages
class
loading
priority
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311127703.6A
Other languages
English (en)
Inventor
刘鹏
王凡
刘宝龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qingdao Yixiang Yichuang Technology Development Co ltd
Original Assignee
Qingdao Yixiang Yichuang Technology Development Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qingdao Yixiang Yichuang Technology Development Co ltd filed Critical Qingdao Yixiang Yichuang Technology Development Co ltd
Priority to CN202311127703.6A priority Critical patent/CN117241231A/zh
Publication of CN117241231A publication Critical patent/CN117241231A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请公开了基于优先级信息的消息调度方法,其包括基于从至少一个第二装置获得的消息构建基于消息结构体的消息链表,其中,对应每个所述消息,所述消息链表存储所述消息的优先级信息、消息内容以及消息设备地址;基于所述优先级信息、所述消息内容以及所述消息设备地址将消息链表中的消息装载进入消息队列,以及根据所述消息队列中的消息数量对所述消息队列进行动态轮询以将所述消息内容发送至所述第一装置,并将从第一装置获得的反馈发送至具有所述消息设备地址的第二装置。本申请的方法中的消息优先级确保紧急消息能够优先执行,二等消息和三等消息按照动态比例执行。本申请还公开了基于优先级信息的消息调度装置。

Description

基于优先级信息的消息调度方法和装置
技术领域
本申请涉及移动通信技术,尤其涉及一种消息操作调度的方法和装置。
背景技术
随着沉浸式互动领域的发展,对沉浸的方式不单满足于被动的接受,用户更希望的是“桃花源”这种身临其境的感触,在视觉、听觉、感觉、嗅觉方面对行业提出了更高的要求。物与物、人与物之间的互动也不断刷新对沉浸式的认知。
为了能让周围环境有更逼真的代入感,我们就需要更多的设备完成效果。随着设备数量的增加,设备与设备之间的通讯的及时性以及稳定性就显得尤为重要。
在传统的应用中,设备之间相互孤立,应用的也比较简单,仅需为一个效果或者一个功能来特别定制一款软件,满足自给自足即可。但是使用场景就比较局限,不适合多设备配合的,灵活性比较低。后期维护方面的成本也会增加很多,随着技术的进步,系统易用性和可维护性越来越多地被考虑到。
在软件方面急需搭建一套多设备消息管理机制来满足日益增长的需求。其主要用于保证与上位机交换数据,远端更新固件,更新配置,保证消息在固定的时间正确地对外部做出反应。
发明内容
本申请解决的问题之一是在多设备的情况下消息处理的及时性和稳定性。
为此,本申请的一些实施例提供了一种基于优先级信息的消息调度方法,用于第一装置与至少一个第二装置的交互,该方法包括步骤:基于从至少一个所述第二装置获得的消息构建基于消息结构体的消息链表,其中,对应每个所述消息,所述消息链表存储所述消息的优先级信息、消息内容以及消息设备地址;基于所述优先级信息、所述消息内容以及所述消息设备地址将消息链表中的消息装载进入消息队列,以及根据所述消息队列中的消息数量对所述消息队列进行动态轮询以将所述消息内容发送至所述第一装置,并将从所述第一装置获得的反馈发送至具有所述消息设备地址的第二装置。
在一些实施例中,所述消息结构体包括消息状态、消息实时时间、消息启动时间、消息结束时间、消息的长度、消息设备地址、消息内容,其中根据所述消息状态确定所述消息的优先级。
在一些实施例中,所述优先级信息包括指明最高优先级的紧急信息、指明中等优先级的二等信息,以及指明最低优先级的三等信息;构建针对紧急信息的紧急消息结构体、针对二等信息的二等消息结构体,和/或针对三等信息的三等消息结构体。
在一些实施例中,按照固定时间片向所述消息队列循环装载消息,其中,在第一个时间片采用第一装载规则装载消息,在与第一时间片时间连续的第二个时间片采用第二装载规则装载消息,在与第二时间片时间连续的第三时间片采用第三装载规则装载消息。
在一些实施例中,所述第一装载规则包括优先装载紧急消息,所述第二装载规则包括除优先装载紧急消息外,按优先二等消息的第一数量比例装载二等消息和三等消息,所述第三装载规则包括除优先装载紧急消息外,按优先二等消息的第二数量比例装载二等消息和三等消息,其中所述第一数量比例大于第二数量比例。
在一些实施例中,按照所述消息队列中的实际消息数量来动态地计算出所述轮询的等待时间和需要轮询的第二装置的数量。
在一些实施例中,包括由第一装置向第二装置反馈数据校验信息。
在一些实施例中,包括将由第二装置主动传送的消息作为二等消息装载进入所述消息队列。
本申请的另一些实施例提供了一种基于优先级信息的消息调度装置,其包括基于从至少一个所述第二装置获得的消息构建基于消息结构体的消息链表,其中,对应每个所述消息,所述消息链表存储所述消息的优先级信息、消息内容以及消息设备地址的程序模块;基于所述优先级信息、所述消息内容以及所述消息设备地址将消息链表中的消息装载进入消息队列的程序模块,以及根据所述消息队列中的消息数量对所述消息队列进行动态轮询以将所述消息内容发送至所述第一装置,并将从所述第一装置获得的反馈发送至具有所述消息设备地址的第二装置的程序模块。
本申请的又一些实施例包括至少一个处理器和包括计算机程序代码的至少一个存储器,其中,所述至少一个存储器和所述计算机程序代码被配置为与所述至少一个处理器一起使所述装置至少执行上述任意一项的基于优先级信息的消息调度方法。
本申请的实施例中的方法和装置可见的优点包括但不限于,1)消息管理层和消息执行层通过邮箱传送数据,做到消息接收层和消息发送层高并发低耦合。2)可保证在在一个处理周期内,例如一个时间片内,队列最大容量数量的设备都能接收到不同的控制消息。3)对于挂载的设备动态轮询,保证正在使用的设备轮询数据,未使用的设备静默,提高实时效率。4)消息优先级确保紧急消息能够优先执行,二等消息和三等消息按照动态比例执行。5)结合Real-Time-Thread操作系统线程的实时性双层保证消息的稳定和实时性。8)通过固定的时间片调度的方式,保证消息队列中高优先级的消息能够紧急处理,防止阻塞消息队列而处理不及时的问题。9)通过带有优先级的轮询机制,解决如果消息执行丢失,可及时报警的问题。
附图说明
图1为根据本申请的实施例的消息传送方法的串口2数据接收的流程图。
图2为根据本申请的实施例的方法的串口3数据接收的流程图。
图3为根据本申请的实施例的方法的串口2数据处理的流程图。
图4为根据本申请的实施例的方法的串口2数据处理的流程图。
图5为根据本申请的实施例的方法的时间片调度的流程图。
图6为根据本申请的实施例的方法的下位机设备消息反馈处理的流程图。
图7为根据本申请的实施例的方法的对消息队列进行轮询的流程图。
图8为根据本申请的实施例的方法的主函数流程图。
图9为根据本申请的实施例的方法的可应用环境的硬件结构示意图。
图10为根据本申请的实施例的传送装置的软件架构示意图。
图11为根据本申请的实施例的消息队列构建的示意图。
图12为根据本申请的实施例的对消息队列轮询的示意图。
实施方式
在处理消息的时候,传统方式采用先入先出的方式,这样会影响消息处理的及时性,会出现优先级高的消息被低优先级抢占位置的情况,所以设计了本申请中的基于优先级信息的消息调度方法和装置。
本申请的实施例中提出的方法和装置可以应用于但不限于以下硬件环境:
如图9所示的嵌入式控制系统,包括核心板100,核心板100上提供有处理器和存储器以提供处理功能和控制功能,负责全局统筹,底层逻辑处理。网络板200负责网络连接及数据转发,其通过网线连接互联网,网络板200可以通过排线实现串口连接通信核心板100。通信板300负责将由网络板200转发的来自核心板100的指令通过良好的算法轮询分发到各个机关点,在所述通信板中安装有嵌入式实时多线程操作系统,通过合理的分布各个模块的功能,能够极大的提高设备整体的稳定性及可扩展性。
在此处,通信板300自身可以是一个嵌入式通信系统,具有处理器、存储器以及通信模块,通信模块可以包括第一通信端口,例如第一串口,以及第二通信端口,例如第二串口,通信板300用于从网络板200接收网络板200转发的核心板100的指令,并与一个或更多的下位机设备400系统进行信息交互,例如通信板300可以通过一个RS-422全双工串行通信接口,简称串口2,连接两个以上的下位机设备,通信板300还通过另一个RS-422全双工串行通信接口,简称串口3连接网络板200,从而形成一个通信系统。尽管图中仅示出了三个下位机设备400,但应当理解,还可以适用于包括其他数量的下位机设备的系统,例如4、8、16、32、62个等等。
每个下位机设备都是一个独立的设备,可以具有处理器、存储器以及通信模块等,其既可以通过RS-422全双工通信接口与通信板相连,进行多设备的级联与互动,同时也能够在不进行外部干预的情况下,按照内部配置自行运行主要逻辑。很好的结合了集中控制与分散控制的优点。网络板可以采用消息队列遥测传输(MQTT)协议和/或超文本传输协议(HTTP)协议进行数据传输,核心板收到网络板发来的数据之后,经过数据处理,分发给通信板,控制通信板进行下位机的轮询控制。
在本申请的一些具体实施例中,本申请中的方法和装置可基于嵌入式实时多线程操作系统开发,消息传送中的数据传输可以采用轻量级的数据交换格式,例如JavaScript Object Notation,JSON来描述。可以使用标准C语言编写成计算机程序供使用。应当理解,本申请中的方法和装置的实施并不局限于上述数据格式、描述与编程语言。
图10为根据本申请的实施例的应用环境的软件架构。其中,软件包包括CJSON库、ITA库、U8G2库、FAL库;用户服务层包括消息管理服务、显示服务(例如LCD显示服务)、UART_DEAL服务、APP服务;底层为实时多线程与组件和服务层的组合。
根据本申请的一些实施例的主函数及各个线程的流程如下所示。
主函数初始化:
如图1所示,主函数初始化包括创建并启动线程1至线程7这七个线程,并且创建消息队列对应每个线程的邮箱,步骤S001;继而发送请求,例如JSON格式的数据,以请求一个或多个下位机设备地址,步骤S002;随后保存请求到的下位机设备地址,步骤S003。
本实施例中创建的七个线程包括:
线程1,第一串口数据接收线程,用于从串口2接收数据。
如图2所示,在线程1中进行以下处理,首先等待来自串口2的数据,步骤S101,当接收到第1个字节之后开始5毫秒计时,完成1个字节的接收则清空5毫秒并重新计时,直至5毫秒计时满,步骤S102;继而向线程3发送信号量通知以对串口2接收到的数据进行处理,步骤S103。
线程2,第二串口数据接收线程,用于从串口3接收数据
等待来自串口3的数据,步骤S201,判定是否接收到数据头帧,如果是则开始5毫秒计时,接收到一个字节后清空5毫秒并重新计时,直至5毫秒计时满,步骤S202;继而向线程4发送信号量通知以对串口3接收的数据进行处理,步骤S203。
线程3,第一串口数据处理线程,用于对从串口2接收的数据进行处理。
如图3所示,该线程包括首先等待来自线程1的信号量通知,步骤S301;如果有则开始接收数据,并对接收到的数据使用CJOSN解析,解析出CMD,LIST,等关键字的读取地址从而得到消息分类,根据该消息分类将解析到的数据装载到消息结构体形式的对应紧急消息、二等消息、三等消息的链表中,并根据消息结构体的定义置位链表中的状态位,步骤S302;此后清空接收到的数据,步骤S303。
线程4,第二串口数据处理线程,用于对从串口3接收的数据进行处理:
如图4所示,该线程包括步骤,等待线程2的信号量通知,步骤S401,如果有该信号量通知,则将来自串口3的HEX格式数据打包成JSON数据发送,并发送邮箱通知至线程7,步骤S402。
线程5,时间片调度线程:
参照图5,开始固定时间片调度步骤S500后,扫描所述消息链表中的紧急消息结构体、二等消息结构体或三等消息结构体的状态是否被置位,步骤S501,如果被置位则打开第一个100毫秒时间片调度,将相应的消息链表中的数据装载到轮询消息队列中步骤S502,如果没有被置位的则继续等待;上述将数据装载到轮询消息队列中包括采用第一装载规则,即优先装载消息链表中的紧急消息并判定队列是否被装满,即步骤S503,如果已经被装满则发送信号量通知消息轮询线程7,步骤S505,同时挂起当前线程,并等待100毫秒待轮询线程7执行完毕,步骤S504;100毫秒时间到则开启第二次时间片调度,然后再开启第三次时间片调度,步骤S506;如果判断消息队列未被装满,则继续优先装载二等消息再判定消息队列是否装满,步骤S507,如果队列已满,则执行步骤S504、S505,S506,如果队列未满,则优先装载三等消息,判定队列是否装满,步骤S508,如果队列已满,则执行步骤S504、S505,S506。
第二时间片的调度和第三时间片的调度,步骤S506,则可以遵循以下规则在第二个100毫秒时间片装载消息的时候,采用第二装载规则:即优先装载紧急消息,当消息队列未满且无紧急消息可装载时,则按照5:1的比例装载消息链表中的二等消息和三等消息。这种规则可基本保证二等消息能在200毫秒内被响应一次。在第三个100毫秒时间片装载消息的时候,采用第三装载规则:即优先装载紧急消息,当消息队列未满且无紧急消息可装载时,则按照2:1的比例装载消息链表中的二等消息和三等消息。这样基本可保证三等消息能在300毫秒内被响应一次。采用以上规则在三个时间片内基本可确保所有连接的设备发送的消息被及时处理。
线程6,消息反馈处理线程:
参照图6,线程6创建后,则一直等待来自线程7的邮箱通知,步骤S601,如果有通知则判断其中的地址是否正确,步骤S602,如果地址正确则根据消息的优先级参数,清空消息链表中的数据,步骤S603。
线程7,消息队列轮询线程:
如图7所示,线程7用于对消息队列进行轮询,首先等待时间片信号量,步骤S701,如果时间片有信号,则将消息队列中的第1/N个消息按照协议将消息从串口3发送出去,该协议格式如表1所示,这里假设消息队列中有N个消息,例如图7所示的5个时,步骤S702;等待线程4的邮箱通知或者挂起本线程5毫秒,步骤S703,时间到则继续轮询下一个消息或者如果接收到来自线程4的邮箱通知,则通过本线程的邮箱通知线程6,并且释放消息链表中的相应数据,继而继续轮询下一个消息,在此处的下一个消息指第2/N个消息,步骤S703;如果没有来自线程4的邮箱通知,则生成报警信息,并呈现出来,例如将报警信息展示在显示设备上和/或通过声、光方式展示报警新型,并继续轮询消息队列中的下一个消息,即2/N,步骤S704。
表1:
消息结构体:
创建的消息结构体可以包括不同优先级的多个消息结构体。每个消息结构体中可以包括以下元素:消息状态、消息实时时间、消息启动时间、消息结束时间、消息的长度、消息的设备地址、消息中的具体内容数据。例如,可以创建对应最高优先级的紧急消息的消息结构体,对应中间优先级的二等消息的消息结构体,以及对应最低优先级的三等消息的消息结构体。可以通过“消息状态”这一消息结构体元素区分不同优先级的消息结构体。例如,可以将消息状态为“1”设置为对应紧急消息的消息结构体,将消息状态为“2”设置为对应二等消息的消息结构体,将消息状态为“3”设置为对应三等消息的消息结构体。
消息链表:
创建消息链表,该消息链表以上述消息结构体的形式存储数据,该链表可以是动态链表或者静态链表。当交互的消息进来之后,根据消息状态,将接收到的消息以紧急消息结构体、二等消息结构体或者三等消息结构体的形式逐个存储在已经创建好的消息链表中。
消息队列装载:
创建轮询消息队列,之后将链表中的数据装载到轮询消息队列中,所述轮询消息队列的装载方式包括以固定时间片装载所述消息链表中的数据。
时间片的长度可以根据系统要求确定,例如以100毫秒(ms)的固定时间片向轮询消息队列装载消息的方式可以为:在第一个100毫秒,即第一时间片内装载消息的时候,采用第一装载规则:即优先装载消息链表中的紧急消息结构体中的紧急消息,在该第一时间片内,如果轮询消息队列未满,则再装载消息链表中的二等消息结构体中的二等消息,在该时间片内,如果轮询消息队列未满则再装载消息链表中的三等消息结构体中的三等消息。这样保证每次紧急消息都能先被处理。
可以与针对第一时间片的第一装载规则不同,在与第一时间片连续的第二时间片内,即第二个100毫秒时间片内,向轮询消息队列装载消息的时候,采用第二装载规则:即优先装载紧急消息,当消息队列未满且无紧急消息可装载时,则按照5:1的比例装载消息链表中的二等消息和三等消息。这种规则可基本保证二等消息能在两个时间片长度内,即200毫秒内被响应一次。
以此类推,在第三个100毫秒时间片装载消息的时候,采用第三装载规则:即优先装载紧急消息,当消息队列未满且无紧急消息可装载时,则按照2:1的比例装载消息链表中的二等消息和三等消息。这样基本可保证三等消息能在三个时间片长度内,即300毫秒内被响应一次。
在一些实施例中,在装载二等消息和三等消息的时候:会根据结构体中的启动时间,实时时间和结束时间三个要素计算出来,二等消息和三等消息中谁是最紧急的,从而按照紧程度来装载到轮询消息队列。当二等消息和三等消息中最紧急的被响应之后,再次装载为没有响应消息中最为紧急的消息。在一些实施例中,可以按照优先级将消息装载到轮询消息队列,当消息队列中的消息发送出去之后,需要正常的接收到反馈,保证消息正确的送达。相比于传统的广播方式直接发送,保证了消息的正确性。
此外,当判定某个设备需要主动上传消息时候,此时可将该主动上传的消息以二等消息结构体在消息链表中存储,然后以二等消息的优先级加入到轮询消息队列中,此时该二等消息就会参加轮询,在此过程中,该来自该主动上传消息的设备的数据会一直以二等消息结构体的形式被提取,直到二等消息结构体中的状态被主动置位,则不再参加轮询。
对消息队列的轮询
传统的轮询一般采用固定的轮询时间,这样设备处理数据的压力会比较大。而在本申请的实施例中对消息队列的轮询按照消息队列中的实际消息数量来动态计算出轮询等待时间,这和传统的轮询不同。本申请的实施例中的动态轮询会根据队列中的实际数据的数量来决定轮询的频率,给设备更多的时间处理其他任务。
每个需要轮询的消息里会包含设备的地址和设备的命令,根据具体的设备地址确定需要轮询的设备,根据消息队列的长度,确定需要轮询的具体时间。
当下位机设备给出反馈或者达到等待的时间则继续轮询下一帧数据,如此重复。
将消息按优先级划分能够提高信息交互的及时性。动态调整轮询机制,能够让设备有更多的时间完成其他任务。
本申请的实施例通过采用消息的优先级划分,设备动态调整轮询设备,能够有效的提高数据总线的带宽使用率,提高设备的响应速度。例如:总共挂载30台设备,其中同一时刻只有3台有效,每台设备耗时5ms,设备轮询效率对比如下表2所示:
表2:
依据本申请的实施例的消息传送装置可以包括第一模式和第二模式,即命令模式和文件模式。在命令模式下可执行上述消息传送方法,而在第二模式,即文件模式:等待接收到文件传送命令,先挂起当前轮询。再将文件按照大小划分为多包,发送给对应地址的下位机设备,每一包数据都会得到一个ACK反馈,等待数据传送结束之后在读取上下文恢复之前的轮询。
本申请的方法的一个具体的示例包括:
初始化,包括创建对应紧急消息的紧急消息结构体、对应二等消息的二等消息结构体,对应三等消息的三等消息结构体,消息链表以及消息队列。
每种消息结构体中都包括元素:消息的状态、消息实时时间、消息启动时间、消息结束时间、消息的长度、消息的设备地址、消息中的具体数据。
创建消息结构体的代码可以为:
#define MESSAGE_LEN 100 //消息体长度
typedef struct{
u8 sta[MESSAGE_LEN];
u32 time[MESSAGE_LEN];
u32 start_time[MESSAGE_LEN];
u32 end_time[MESSAGE_LEN];
u8 len[MESSAGE_LEN];
u16 addr[MESSAGE_LEN];
u8 buf[MESSAGE_LEN][10];
}MODU_USER_MESSAGE;
MODU_USER_MESSAGE Press_msg; //紧急消息结构体
MODU_USER_MESSAGE Second_class_msg; //二等消息结构体
MODU_USER_MESSAGE Third_class_msg; //三等消息结构体
初始化完成之后,通过CJSON库打包JSON数据发送以请求各下位机设备的地址。接收到各下位机设备的回传数据并根据CJSON库解析数据中“cmd”,“adds”,“list”等关键字的读取地址,将解析到的各下位机设备的地址保存到Device_Addr数组中,将下位机设备的数量存储在Device_Number变量中。
将Device_Addr数组中的所有地址,缓存到二等消息结构体中,启动一次轮询,查找这些设备是否都在线,没有在线的下位机设备则在设备的LCD中报警,请求排查硬件链接是否正常。
等待串口2接收到的JSON格式的数据,根据CJSON库解析数据,将消息分为,紧急消息,二等消息,三等消息,将有效数据存储到相应的消息结构体中。
在消息结构体中装载数据的方式为:对于紧急消息:设置消息结构体的状态为1,代表紧急消息,数据长度根据消息有效内容长度而定,地址为Device_Addr数组中的地址,消息实时时间为100,结束时间为100+rt_tick_get(),启动时间为rt_tick_get(),具体数据为接受到的有效数据。其中,rt_tick_get()为提取系统的当前时间的函数。
对于二等消息:设置消息结构体的状态为2,代表二等消息,数据长度为6,地址为Device_Addr数组中的地址,消息实时时间为200、结束时间为200+rt_tick_get(),启动时间为rt_tick_get();具体数据为0xFF, 0XAA, 0X06, Addr_H, Addr_L, 0X01。
对于三等消息:设置消息结构体的状态为3,数据长度根据消息有效数据而定,地址为Device_Addr数组中的地址,消息实时时间为300、结束时间为300+rt_tick_get(),启动时间为rt_tick_get();具体数据根据消息内容而定。
具体时间片调度方式:
在时间片调度线程中,等待结构体中的状态不为0时候,进行第一次100毫秒调度,将紧急消息结构体的数据缓存到轮询消息队列中,再判断消息队列剩余空位的个数,例如,如图11所示,在本实施例中,消息队列被构建为最大缓存20个消息,如果有剩余那么再读取二等消息结构体,继续缓存到轮询消息队列,判断轮询消息队列是否已经满,如果消息队列没有被装载满那么继续缓存三等消息,直到轮询消息队列全部装满或者所有的消息都已经在轮询消息队列中,此后,发送信号量通知轮询线程开始轮询数据,自身线程挂起。
第二次100毫秒调度,优先将紧急消息结构中的数据缓存到轮询消息队列中,判断消息队列剩余空位的个数,如果有剩余空位,那么将剩余的空位按照二等消息和三等消息数量5:1的方式将二等消息和/或三等消息缓存到轮询消息队列中;其中二等消息和三等消息缓存的优先级规则为:同等优先级先入先出的顺序。此后,发送信号量,通知轮询线程开始轮询数据,自身线程挂起。
第三次100毫秒调度,优先将紧急消息结构中的数据缓存到轮询消息队列中,在判断消息队列剩余空位的个数,如果仍有空位,那么将剩余的空位按照二等消息和三等消息数量2:1的方式将二等消息和/或三等消息缓存到轮询消息队列中。其中二等消息和三等消息缓存的优先级规则为:同等优先级先入先出的顺序。发送信号量,通知轮询线程开始轮询数据,自身线程挂起。
具体的轮询的方式:
同样,如图12所示,轮询线程等待时间片调度线程的信号量,打包HEX数据发送到下位机设备。挂起轮询线程,直到接收到轮询确认线程的邮箱反馈信息“mb”,或者等待100/实际轮询设备的个数的时间,单位毫秒,最小为5毫秒。
其中,因为发送给下位机的波特率为115200,发送的最大数据量不超过10个字节,其中包括1个启动位、1位停止位和8位数据位;所以发送时间为:1000/115200*10*10(数据长度)毫秒。接收时间和发送时间一致。
轮询确认线程接收到来自轮询线程反馈的数据之后,判定数据的长度、是否需要打包JSON数据回传给上位机,最后发送邮箱通知轮询线程已经接收到反馈。
轮询线程如果等到邮箱通知则发送邮箱通知消息反馈线程清空消息链表中对应结构体中的数据,该消息结构体下次不再加入时间片调度。如果是线程挂起时间到了,没有收到邮箱反馈则生成报警信息并发送给LCD显示报警,则再次循环下一个时间片调度。
最后直到消息结构体中的状态全部为0的时候,结束轮询,等待新的消息。
应当理解,尽管本申请的实施例以100毫秒作为时间片的参数,但应当理解,更短或更长的其他长度的时间片也是可行的,例如10毫秒、50毫秒、200毫秒、300毫秒。尽管本申请的实施例以20个消息作为消息队列的长度,但应当理解,更短或更长的其他长度的消息队列也是可以根据下位机设备的数量合理确定的,例如10个、30个、50个、100个。尽管本申请的实施例以通信板作为第一装置,并将至少一个下位机设备作为至少一个第二装置对本申请中的方法进行了描述,但应当理解,本申请的方法可以不做调整或者稍作调整而适用于具有相同结构的系统中用于消息的传送。例如,通信板可以不从其他控制系统,例如核心板接收指令,而是自己直接生成指令,在这种情况下,从而无需串口3与其他设备通信以接收指令。在另外一些实施例中,除了实施例中描述的线程间通信方式外,还可以采用其他恰当的通信方式,例如信号量、消息队列、邮箱等中的一个。
本申请的实施例还可以包括与所述方法对应的装置,该装置可以包括如上述方法的各流程相对应的计算机程序模块。
在一些示例实施例中,本文描述的任何方法,过程,信令图,算法或流程图的功能可以由存储在存储器或其他计算机可读或有形媒体的软件和/或计算机程序代码或代码部分实现,并由处理器执行。
在一些示例实施例中,一种装置可以被包括或与至少一个软件应用、模块、单元或实体相关联,该软件应用、模块、单元或实体被配置为算术运算,或作为其程序或部分(包括添加或更新的软件例程),由至少一个操作处理器执行。程序,也称为程序产品或计算机程序,包括软件例程,小程序和宏,可以被存储在任何装置可读数据存储介质中,并且可以包括用于执行特定任务的程序指令。
序列是数据结构的单元,其可以包括字符串、列表、元组等。
一种计算机程序产品可以包括一个或多个计算机可执行部件,当程序运行时,该计算机可执行部件被配置为执行一些示例实施例。该一个或多个计算机可执行部件可以是至少一个软件代码或代码部分。用于实现示例实施例的功能的更改和配置可以作为例程来执行,该例程可以作为添加或更新的软件例程来实现。在一示例中,可以将软件例程下载到该装置中。
作为示例,软件或计算机程序代码或代码的一部分可以是源代码形式,目标代码形式或某种中间形式,并且可以存储在某种载体,分发介质或计算机可读介质,其可以是能够承载程序的任何实体或设备。例如,这样的载体可以包括记录介质、计算机存储器、只读存储器、光电和/或电载体信号、电信信号和/或软件分发包。取决于所需的处理能力,计算机程序可以在单个电子数字计算机中执行,或者可以分布在多个计算机中。所述计算机可读介质或计算机可读存储介质可以是非暂时性介质。
在其他示例实施例中,功能可以由路执行,例如通过使用专用集成电路(ASIC),可编程门阵列(PGA),现场可编程门阵列(FPGA)或任何其他硬件和软件组合。在又一示例实施例中,该功能可以被实现为信号,诸如可以由从因特网或其他网络下载的电磁信号所携带的非有形手段。
根据示例实施例,诸如节点、设备或响应部件之类的装置可以被配置为电路,计算机或微处理器(诸如单芯片计算机元件)或芯片集,其可以至少包括用于提供用于算术运算的存储容量的存储器和/或用于执行算术运算的运算处理器。
本文描述的示例实施例同等地适用于单数和复数实施方式,无论描述某些实施例所使用的语言是单数还是复数形式。例如,描述单个计算设备的操作的实施例同样适用于包括计算设备的多个实例的实施例,反之亦然。
本领域的普通技术人员将容易理解,可以以不同顺序的操作和/或以与所公开的配置不同的配置的硬件元件来实施如上所述的示例实施例。因此,尽管已经基于这些示例实施例描述了一些实施例,但是对于本领域技术人员显而易见的是,某些修改,变化和替代构造将是显而易见的,同时仍在示例实施例的精神和范围内。

Claims (8)

1.基于优先级信息的消息调度方法,用于第一装置与至少一个第二装置的交互,其特征在于:包括步骤:
基于从至少一个所述第二装置获得的消息构建基于消息结构体的消息链表,其中,对应每个所述消息,所述消息链表存储所述消息的优先级信息、消息内容以及消息设备地址;
基于所述优先级信息、所述消息内容以及所述消息设备地址将消息链表中的消息装载进入消息队列,以及
根据所述消息队列中的消息数量对所述消息队列进行动态轮询以将所述消息内容发送至所述第一装置,并将从所述第一装置获得的反馈发送至具有所述消息设备地址的第二装置;
其中,所述优先级信息包括指明最高优先级的紧急信息、指明中等优先级的二等信息,以及指明最低优先级的三等信息;构建针对紧急信息的紧急消息结构体、针对二等信息的二等消息结构体,和/或针对三等信息的三等消息结构体;
其中,将由第二装置主动传送的消息作为二等消息装载进入所述消息队列。
2.根据权利要求1所述的基于优先级信息的消息调度方法,其特征在于:所述消息结构体包括消息状态、消息实时时间、消息启动时间、消息结束时间、消息的长度、消息设备地址、消息内容,其中根据所述消息状态确定所述消息的优先级。
3.根据权利要求1所述的基于优先级信息的消息调度方法,其特征在于:按照固定时间片向所述消息队列循环装载消息,其中,在第一个时间片采用第一装载规则装载消息,在与第一时间片时间连续的第二个时间片采用第二装载规则装载消息,在与第二时间片时间连续的第三时间片采用第三装载规则装载消息。
4.根据权利要求3所述的基于优先级信息的消息调度方法,其特征在于:所述第一装载规则包括优先装载紧急消息,所述第二装载规则包括除优先装载紧急消息外,按优先二等消息的第一数量比例装载二等消息和三等消息,所述第三装载规则包括除优先装载紧急消息外,按优先二等消息的第二数量比例装载二等消息和三等消息,其中所述第一数量比例大于第二数量比例。
5.根据权利要求1所述的基于优先级信息的消息调度方法,其特征在于:按照所述消息队列中的实际消息数量来动态地计算出所述轮询的等待时间和需要轮询的第二装置的数量。
6.根据权利要求1所述的基于优先级信息的消息调度方法,其特征在于:包括由第一装置向第二装置反馈数据校验信息。
7.基于优先级信息的消息调度装置,其特征在于:包括基于从至少一个第二装置获得的消息构建基于消息结构体的消息链表,其中,对应每个所述消息,所述消息链表存储所述消息的优先级信息、消息内容以及消息设备地址的程序模块;基于所述优先级信息、所述消息内容以及所述消息设备地址将消息链表中的消息装载进入消息队列的程序模块,以及根据所述消息队列中的消息数量对所述消息队列进行动态轮询以将所述消息内容发送至第一装置,并将从所述第一装置获得的反馈发送至具有所述消息设备地址的第二装置的程序模块;
其中,所述优先级信息包括指明最高优先级的紧急信息、指明中等优先级的二等信息,以及指明最低优先级的三等信息;构建针对紧急信息的紧急消息结构体、针对二等信息的二等消息结构体,和/或针对三等信息的三等消息结构体;
其中,将由第二装置主动传送的消息作为二等消息装载进入所述消息队列。
8.基于优先级信息的消息调度装置,其特征在于:包括至少一个处理器和包括计算机程序代码的至少一个存储器,其中,所述至少一个存储器和所述计算机程序代码被配置为与所述至少一个处理器一起使所述装置至少执行权利要求1至6中任意一项的基于优先级信息的消息调度方法。
CN202311127703.6A 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置 Pending CN117241231A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311127703.6A CN117241231A (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202311127703.6A CN117241231A (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置
CN202211323388.XA CN115643538B (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN202211323388.XA Division CN115643538B (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置

Publications (1)

Publication Number Publication Date
CN117241231A true CN117241231A (zh) 2023-12-15

Family

ID=84947092

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202311127703.6A Pending CN117241231A (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置
CN202211323388.XA Active CN115643538B (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202211323388.XA Active CN115643538B (zh) 2022-10-27 2022-10-27 基于优先级信息的消息调度方法和装置

Country Status (1)

Country Link
CN (2) CN117241231A (zh)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102487494B (zh) * 2009-10-26 2015-05-13 中国电信股份有限公司 短信流量控制方法和系统
CN101996099A (zh) * 2010-11-17 2011-03-30 山东中创软件工程股份有限公司 一种消息处理方法及系统
CN109639782B (zh) * 2018-11-30 2021-10-01 中体彩科技发展有限公司 消息发送平台、方法
CN110071879A (zh) * 2019-03-15 2019-07-30 中科恒运股份有限公司 消息传输方法、终端设备及存储介质
CN111757280B (zh) * 2019-03-27 2022-05-17 阿里巴巴集团控股有限公司 道路交通环境中的感知基站及其消息发送控制方法、装置
CN111245745B (zh) * 2020-01-07 2022-05-24 腾讯科技(深圳)有限公司 消息发送方法、装置、节点设备及存储介质
CN111510395B (zh) * 2020-06-16 2020-09-25 腾讯科技(深圳)有限公司 业务消息上报方法、装置、设备及介质
CN111866769B (zh) * 2020-06-29 2022-07-12 湖南省梦网科技发展有限公司 一种消息发送方法、装置、服务器及介质
CN113010297A (zh) * 2021-04-23 2021-06-22 北京秒针人工智能科技有限公司 基于消息队列的数据库写入调度器、写入方法和存储介质

Also Published As

Publication number Publication date
CN115643538B (zh) 2024-01-30
CN115643538A (zh) 2023-01-24

Similar Documents

Publication Publication Date Title
EP3146401B1 (en) Efficient and reliable host distribution of totally ordered global state
CN101354664B (zh) 多核处理器中断负载均衡方法和装置
US7076545B2 (en) Load balancing the servicing of received packets
KR100619720B1 (ko) 다중 프로세서간 통신 장치 및 방법
US5619647A (en) System for multiplexing prioritized virtual channels onto physical channels where higher priority virtual will pre-empt a lower priority virtual or a lower priority will wait
CN103199968A (zh) 一种消息的发送方法和系统
CN105794161A (zh) 用于飞行器的数据通信网络
CN109314673A (zh) 一种客户业务传输方法和装置
US20200210224A1 (en) Methods and apparatus for verifying completion of groups of data transactions between processors
CN110650203A (zh) 数据传输方法、装置和系统、计算机存储介质及电子设备
CN110851252A (zh) 一种基于tsn架构的规约转换设备和规约转换方法
US20200348989A1 (en) Methods and apparatus for multiplexing data flows via a single data structure
CN111478839B (zh) 一种物理总线及操作系统解耦的分布式航空通信系统
CN101567873B (zh) 一种多任务并行处理方法及系统
CN112000446A (zh) 一种数据传输的方法及机器人
CN115643538B (zh) 基于优先级信息的消息调度方法和装置
US7814222B2 (en) Queue state mirroring
CN110245120A (zh) 流式计算系统及流式计算系统的日志数据处理方法
CN113268446B (zh) 用于多种机载总线接入的信息处理方法及装置
KR102200590B1 (ko) 엠큐티티 프로토콜 기반 긴급 메시지 처리 장치 및 방법
CN107566291A (zh) 组播传输方法、装置、电子设备及存储介质
KR102113641B1 (ko) 소프트웨어 정의 네트워크 시스템에서 다중 중요도 모드에 따른 패킷 스케줄링 방법, 그 방법을 구현한 컴퓨터프로그램 및 그 방법을 수행하는 스위치 장치
US11671500B2 (en) Internet of things system
CN112835823B (zh) 存储控制器应答发送方法
CN110572474A (zh) 用于嵌入式终端长连接通讯的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination