CN111782417B - 一种基于消息的多进程共享串口资源的实现方法 - Google Patents
一种基于消息的多进程共享串口资源的实现方法 Download PDFInfo
- Publication number
- CN111782417B CN111782417B CN202010574968.0A CN202010574968A CN111782417B CN 111782417 B CN111782417 B CN 111782417B CN 202010574968 A CN202010574968 A CN 202010574968A CN 111782417 B CN111782417 B CN 111782417B
- Authority
- CN
- China
- Prior art keywords
- message
- serial port
- client process
- type
- receiving
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 147
- 230000008569 process Effects 0.000 claims abstract description 96
- 230000004044 response Effects 0.000 claims abstract description 33
- 230000003993 interaction Effects 0.000 claims description 12
- 239000000284 extract Substances 0.000 claims description 3
- 230000007175 bidirectional communication Effects 0.000 claims 1
- 230000000903 blocking effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种基于消息的多进程共享串口资源的实现方法,其中,包括:串口服务的处理流程包括:初始化串口配置参数并打开串口;创建一个消息队列;启动串口接收线程;启动消息队列处理线程;消息队列处理线程等待接收来自客户进程的报文;客户进程调用订阅接口完成状态上报报文的订阅;客户进程调用发送接口完成报文的发送;客户进程调用接收接口完成请求应答报文中的应答报文和状态上报报文的接收。
Description
技术领域
本发明涉及计算机领域,特别涉及多进程共享同一串口资源的实现方法。
背景技术
在工业控制领域,串口是一种普遍的用于各设备间进行控制及数据采集的端口,而一般的操作***中,串口是独占资源,同一串口只被一个进行使用,一个进程使用了该串口其他进程将无法在使用它,但在某些应用场景下,串口是***被多个进程同时访问控制的。
现有的技术,有些设备可以通过驱动程序虚拟出多个相同功能的串口,共不通的进程进行使用,但是,这个方法不够灵活,需要驱动的支持,对于通用的串口驱动,没有此功能,同时虚拟出来的串口数量也是固定被限制的。也有一些技术,是通过共享的串口服务进行串口共享的,但是覆盖的交互模式不够全面,仅限于处理请求应答式的交互模式,无法处理单向传输的报文,比如:无反馈的命令报文和被动接收的状态上报报文。
发明内容
本发明的目的在于提供一种基于消息的多进程共享串口资源的实现方法,用于解决现有方法中存在交互模式覆盖不全面的问题。
本发明一种基于消息的多进程共享串口资源的实现方法,其中,包括:串口服务与客户进程之间通过消息队列进行交互;串口服务的处理流程包括:初始化串口配置参数并打开串口;创建一个消息队列;启动串口接收线程;启动消息队列处理线程;消息队列处理线程等待接收来自客户进程的报文,当接收到的报文是请求应答式报文中的请求报文时,将发送该请求报文的进程ID和请求命令字存放至待响应列表,然后将报文通过串口发送出去;当接收到的报文是命令报文时,直接通过串口发送数据,无需更新待响应列表;当接收到的报文是订阅指令报文时,更新状态订阅列表;串口接收线程等待接收从串口流入的报文,当接收到的报文是请求应答式报文中的应答报文时,查找待响应列表,匹配报文中的请求命令字,并通过进程ID将该报文发送至发送请求报文的客户进程,并将进程ID和请求命令字从待响应列表中删除;当接收到的报文是状态上报报文时,在状态订阅列表中查看该报文的订阅者,如果存在订阅者,则将报文发送给对应的客户进程;如果无订阅者,则将该报文直接丢弃;客户进程的处理流程包括:客户进程调用订阅接口完成状态上报报文的订阅;客户进程调用发送接口完成报文的发送;客户进程调用接收接口完成请求应答报文中的应答报文和状态上报报文的接收。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,消息队列支持进程间的双向通信;消息队列上的消息设置消息类型;接收者通过指定消息类型的方式,接收特定的某一种类型或多种类型的消息。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,消息队列上传输的消息内容包括:消息类型、客户进程ID、报文类型、报文长度和报文数据。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,奖励独立运行的守护进程,与串口硬件资源交互,接收来自不同客户进程的命令报文和请求应答式报文中的请求报文,将数据通过串口发送出去;同时阻塞接收状态上报报文和请求应答式报文中的应答报文,进行类型值匹配后发送至相应的客户端进程。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,客户进程的处理接口以库函数的形式存在,允许多个进程同时调用,提供客户进程与串口服务的交互接口。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,客户进程的处理流程还包括:初始化接口,包括:首先客户进程连接串口服务创建的消息队列,以查看串口服务是否已经启动,如果已启动,则通过消息队列向串口服务发送串口状态查询命令,以查看串口是否可用,如果串口可用,则初始化过程正常结束。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,订阅接口中,客户进程将进程ID和关注的状态类型通过消息队列发送至串口服务,发送的消息的内容包括:消息类型、本客户进程ID、报文类型、报文长度和报文数据。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,客户进程向消息队列发送消息的内容包括:消息类型、本客户进程ID、报文类型、报文长度和报文数据。
根据本发明的基于消息的多进程共享串口资源的实现方法,其中,客户进程将客户进程ID设置为消息类型,从消息队列中提取与消息类型值匹配的报文。
本发明的目的在于提供一种基于消息的多进程共享串口资源的实现方法,能够满足多个进程共享串口资源时的各种应用场景,提高通用性和灵活性。
附图说明
图1为一种基于消息的串口共享技术组成框图;
图2a)为串口服务模块的初始化流程图;
图2b)为串口服务模块的消息处理线程流程图;
图2c)为串口服务模块的串口接收线程流程图;
图3a)为报文处理请求应答报文交互序列图;
图3b)为报文处理无反馈的命令报文交互序列图;
图3c)为报文处理状态上报报文交互序列图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
图1为一种基于消息的串口共享技术组成框图,如图1所示,本发明基于消息的多进程共享串口资源的实现方法按照交互模式将串口报文分为三类,第一类是请求应答式报文,设备A通过串口发送请求报文给设备B,设备B收到报文后,向设备A发送应答报文;第二类是命令报文,设备A通过串口发送命令报文给设备B,设备B无需进行应答;第三类状态上报报文,设备A作为接收端,被动接收设备B发送状态上报报文。
本发明由两部分组成,一部分是串口服务模块,一部分是提供客户进程使用的接口模块。串口服务模块与客户进程之间通过消息队列进行交互。
消息队列具有的特征包括:支持进程间的双向通信;消息队列上的消息设置消息类型;接收者通过指定消息类型的方式,接收特定的某一种类型或多种类型的消息;
消息队列上传输的消息内容包括:消息类型、客户进程ID、报文类型、报文长度和报文数据。
串口服务模块是一个独立运行的守护进程,直接与串口硬件资源交互。串口服务模块负责接收来自不同客户进程的命令报文和请求应答式报文中的请求报文,然后将数据通过串口发送出去;同时阻塞接收状态上报报文和请求应答式报文中的应答报文,进行类型值匹配后发送至相应的客户端进程。
接口模块以库函数的形式存在,允许多个进程同时调用,提供了客户进程与串口服务模块的交互接口。
图2a)为串口服务模块的初始化流程图;图2b)为串口服务模块的消息处理线程流程图;图2c)为串口服务模块的串口接收线程流程图;串口服务模块的处理流程具体内容包括:
初始化串口配置参数并打开串口;
创建一个消息队列;
启动串口接收线程;
启动消息队列处理线程;
消息队列处理线程等待接收来自客户进程的报文。当接收到的报文是请求应答式报文中的请求报文时,将发送该报文的进程ID和请求命令字存放至待响应列表,然后将报文通过串口发送出去;当接收到的报文是命令报文时,直接通过串口发送数据,无需更新待响应列表;当接收到的报文是订阅指令报文时,更新状态订阅列表;
串口接收线程等待接收从串口流入的报文。当接收到的报文是请求应答式报文中的应答报文时,查找待响应列表,匹配报文中的请求命令字,并通过进程ID将该报文发送至发送请求报文的客户进程,并将进程ID和请求命令字从待响应列表中删除;当接收到的报文是状态上报报文时,在状态订阅列表中查看该报文的订阅者,如果存在订阅者,则将报文发送给对应的客户进程。如果无订阅者,则将该报文直接丢弃。
图3a)为报文处理请求应答报文交互序列图;图3b)为报文处理无反馈的命令报文交互序列图;图3c)为报文处理状态上报报文交互序列图。
接口模块的处理流程包括:
初始化接口:客户进程调用该接口完成初始化。首先客户进程连接串口服务模块创建的消息队列,以查看串口服务模块是否已经启动。已启动,则通过消息队列向串口服务模块发送串口状态查询命令,以查看串口是否可用。如果串口可用,则初始化过程正常结束;
订阅接口:客户进程调用该接口完成状态上报报文的订阅。客户进程将进程ID和关注的状态类型通过消息队列发送至串口服务模块,发送的消息的内容包括:消息类型、本客户进程ID、报文类型(订阅指令)、报文长度和报文数据(关注的状态类型);
发送接口:客户进程调用该接口完成报文的发送。客户进程向消息队列发送消息,消息的内容包括:消息类型、本客户进程ID、报文类型(请求应答式报文或命令报文)、报文长度和报文数据;
接收接口:客户进程调用该接口完成请求应答报文中的应答报文和状态上报报文的接收。客户进程将客户进程ID设置为消息类型,从消息队列中提取与消息类型值匹配的报文。
本发明通过使用支持进程间双向通信的消息队列,所传输的消息内容包括:消息类型、客户进程ID、报文类型、报文长度和报文数据,接收者通过指定消息类型的方式,接收特定的某一种类型或多种类型的消息。
本发明提出的基于消息的多进程共享串口实现方法,可广泛应用于计算机控制领域,满足多个进程共享串口资源时的各种应用场景。与现有的共享的串口服务相比,通用性和灵活性更好,覆盖的交互模式更全面。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (6)
1.一种基于消息的多进程共享串口资源的实现方法,其特征在于,包括:
串口服务与客户进程之间通过消息队列进行交互;
串口服务的处理流程包括:
初始化串口配置参数并打开串口;
创建一个消息队列;
启动串口接收线程;
启动消息队列处理线程;
消息队列处理线程等待接收来自客户进程的报文,当接收到的报文是请求应答式报文中的请求报文时,将发送该请求报文的进程ID和请求命令字存放至待响应列表,然后将报文通过串口发送出去;当接收到的报文是命令报文时,直接通过串口发送数据,无需更新待响应列表;当接收到的报文是订阅指令报文时,更新状态订阅列表;
串口接收线程等待接收从串口流入的报文,当接收到的报文是请求应答式报文中的应答报文时,查找待响应列表,匹配报文中的请求命令字,并通过进程ID将该报文发送至发送请求报文的客户进程,并将进程ID和请求命令字从待响应列表中删除;当接收到的报文是状态上报报文时,在状态订阅列表中查看该报文的订阅者,如果存在订阅者,则将报文发送给对应的客户进程;如果无订阅者,则将该报文直接丢弃;
客户进程的处理流程包括:
客户进程调用订阅接口完成状态上报报文的订阅;
客户进程调用发送接口完成报文的发送;
客户进程调用接收接口完成请求应答报文中的应答报文和状态上报报文的接收;
其中,
奖励独立运行的守护进程,与串口硬件资源交互,接收来自不同客户进程的命令报文和请求应答式报文中的请求报文,将数据通过串口发送出去;同时阻塞接收状态上报报文和请求应答式报文中的应答报文,进行类型值匹配后发送至相应的客户端进程;
客户进程的处理接口以库函数的形式存在,允许多个进程同时调用,提供客户进程与串口服务的交互接口;
客户进程的处理流程还包括:初始化接口,包括:首先客户进程连接串口服务创建的消息队列,以查看串口服务是否已经启动,如果已启动,则通过消息队列向串口服务发送串口状态查询命令,以查看串口是否可用,如果串口可用,则初始化过程正常结束。
2.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,消息队列支持进程间的双向通信;消息队列上的消息设置消息类型;接收者通过指定消息类型的方式,接收特定的某一种类型或多种类型的消息。
3.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,消息队列上传输的消息内容包括:消息类型、客户进程ID、报文类型、报文长度和报文数据。
4.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,订阅接口中,客户进程将进程ID和关注的状态类型通过消息队列发送至串口服务,发送的消息的内容包括:消息类型、本客户进程ID、报文类型、报文长度和报文数据。
5.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,客户进程向消息队列发送消息的内容包括:消息类型、本客户进程ID、报文类型、报文长度和报文数据。
6.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,客户进程将客户进程ID设置为消息类型,从消息队列中提取与消息类型值匹配的报文。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010574968.0A CN111782417B (zh) | 2020-06-22 | 2020-06-22 | 一种基于消息的多进程共享串口资源的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010574968.0A CN111782417B (zh) | 2020-06-22 | 2020-06-22 | 一种基于消息的多进程共享串口资源的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111782417A CN111782417A (zh) | 2020-10-16 |
CN111782417B true CN111782417B (zh) | 2023-10-31 |
Family
ID=72757652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010574968.0A Active CN111782417B (zh) | 2020-06-22 | 2020-06-22 | 一种基于消息的多进程共享串口资源的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111782417B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259268A (zh) * | 2021-07-02 | 2021-08-13 | 北京城建智控科技有限公司 | 一种支持冗余架构的网口与串口数据转发网关及方法 |
CN115776434A (zh) * | 2021-09-07 | 2023-03-10 | 华为技术有限公司 | Rdma数据传输***、rdma数据传输方法及网络设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3185130A1 (en) * | 2015-12-22 | 2017-06-28 | NXP USA, Inc. | A serial data communications switching device and a method of operating thereof |
CN109669724A (zh) * | 2018-11-26 | 2019-04-23 | 许昌许继软件技术有限公司 | 一种基于Linux***的多命令并发式代理服务方法及*** |
CN110336736A (zh) * | 2019-05-27 | 2019-10-15 | 四川长虹电器股份有限公司 | 基于mqtt服务器集群实现共享订阅的方法 |
-
2020
- 2020-06-22 CN CN202010574968.0A patent/CN111782417B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3185130A1 (en) * | 2015-12-22 | 2017-06-28 | NXP USA, Inc. | A serial data communications switching device and a method of operating thereof |
CN109669724A (zh) * | 2018-11-26 | 2019-04-23 | 许昌许继软件技术有限公司 | 一种基于Linux***的多命令并发式代理服务方法及*** |
CN110336736A (zh) * | 2019-05-27 | 2019-10-15 | 四川长虹电器股份有限公司 | 基于mqtt服务器集群实现共享订阅的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111782417A (zh) | 2020-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5060140A (en) | Universal programmable data communication connection system | |
US5396630A (en) | Method and system for object management across process boundries in a data processing system | |
US5940600A (en) | Isochronous channel having a linked list of buffers | |
US6182119B1 (en) | Dynamically configurable filtered dispatch notification system | |
US6691147B1 (en) | Method and apparatus supporting network communications | |
CN107493266B (zh) | 嵌入式自助终端的通信***、方法及装置 | |
US5867650A (en) | Out-of-band data transmission | |
CN111782417B (zh) | 一种基于消息的多进程共享串口资源的实现方法 | |
WO2021088641A1 (zh) | 数据发送方法、处理方法、接收方法及其设备、存储介质 | |
CN108063813B (zh) | 一种集群环境下密码服务网络并行化的方法与*** | |
CN111258723B (zh) | 分布式***的事务处理方法、装置、***、介质及设备 | |
CN113391979A (zh) | 监控数据展示的处理方法、设备、***及存储介质 | |
Rodríguez et al. | Formal modelling and incremental verification of the MQTT IoT protocol | |
CN111722944A (zh) | 一种基于nio的airt-ros通信方法及*** | |
EP1088422B1 (en) | A telecommunication controller messaging system | |
CN114866528A (zh) | 一种基于MQTT和Websocket的数据通讯方法 | |
US11870746B2 (en) | Method for chatting messages by topic based on subscription channel reference in server and user device | |
US20100250684A1 (en) | High availability method and apparatus for shared resources | |
CN112511636B (zh) | 数据传输***、方法、装置、计算机设备及存储介质 | |
CN109639795B (zh) | 一种基于AcitveMQ消息队列的服务管理方法与装置 | |
CN113176957B (zh) | 一种基于rpc的远程应用自动化*** | |
CN113204436A (zh) | 一种消息处理方法、装置、设备及计算机可读存储介质 | |
KR100914249B1 (ko) | 네트워크 기반 로봇 제어를 위한 통신 시스템 및 방법 | |
CN115914330B (zh) | 一种基于nio异步线程模型的异构应用间通信方法 | |
Wackerow | MQSeries Primer |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |