CN111782417A - 一种基于消息的多进程共享串口资源的实现方法 - Google Patents
一种基于消息的多进程共享串口资源的实现方法 Download PDFInfo
- Publication number
- CN111782417A CN111782417A CN202010574968.0A CN202010574968A CN111782417A CN 111782417 A CN111782417 A CN 111782417A CN 202010574968 A CN202010574968 A CN 202010574968A CN 111782417 A CN111782417 A CN 111782417A
- Authority
- CN
- China
- Prior art keywords
- message
- serial port
- client process
- type
- request
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 149
- 230000008569 process Effects 0.000 claims abstract description 98
- 230000004044 response Effects 0.000 claims abstract description 35
- 230000002452 interceptive effect Effects 0.000 claims description 6
- 238000004891 communication Methods 0.000 claims description 4
- 230000000903 blocking effect Effects 0.000 claims description 3
- 239000000284 extract Substances 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 8
- 230000003993 interaction Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
Images
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
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 (9)
1.一种基于消息的多进程共享串口资源的实现方法,其特征在于,包括:
串口服务与客户进程之间通过消息队列进行交互;
串口服务的处理流程包括:
初始化串口配置参数并打开串口;
创建一个消息队列;
启动串口接收线程;
启动消息队列处理线程;
消息队列处理线程等待接收来自客户进程的报文,当接收到的报文是请求应答式报文中的请求报文时,将发送该请求报文的进程ID和请求命令字存放至待响应列表,然后将报文通过串口发送出去;当接收到的报文是命令报文时,直接通过串口发送数据,无需更新待响应列表;当接收到的报文是订阅指令报文时,更新状态订阅列表;
串口接收线程等待接收从串口流入的报文,当接收到的报文是请求应答式报文中的应答报文时,查找待响应列表,匹配报文中的请求命令字,并通过进程ID将该报文发送至发送请求报文的客户进程,并将进程ID和请求命令字从待响应列表中删除;当接收到的报文是状态上报报文时,在状态订阅列表中查看该报文的订阅者,如果存在订阅者,则将报文发送给对应的客户进程;如果无订阅者,则将该报文直接丢弃;
客户进程的处理流程包括:
客户进程调用订阅接口完成状态上报报文的订阅;
客户进程调用发送接口完成报文的发送;
客户进程调用接收接口完成请求应答报文中的应答报文和状态上报报文的接收。
2.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,消息队列支持进程间的双向通信;消息队列上的消息设置消息类型;接收者通过指定消息类型的方式,接收特定的某一种类型或多种类型的消息。
3.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,消息队列上传输的消息内容包括:消息类型、客户进程ID、报文类型、报文长度和报文数据。
4.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,奖励独立运行的守护进程,与串口硬件资源交互,接收来自不同客户进程的命令报文和请求应答式报文中的请求报文,将数据通过串口发送出去;同时阻塞接收状态上报报文和请求应答式报文中的应答报文,进行类型值匹配后发送至相应的客户端进程。
5.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,客户进程的处理接口以库函数的形式存在,允许多个进程同时调用,提供客户进程与串口服务的交互接口。
6.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,客户进程的处理流程还包括:初始化接口,包括:首先客户进程连接串口服务创建的消息队列,以查看串口服务是否已经启动,如果已启动,则通过消息队列向串口服务发送串口状态查询命令,以查看串口是否可用,如果串口可用,则初始化过程正常结束。
7.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,订阅接口中,客户进程将进程ID和关注的状态类型通过消息队列发送至串口服务,发送的消息的内容包括:消息类型、本客户进程ID、报文类型、报文长度和报文数据。
8.如权利要求1所述的基于消息的多进程共享串口资源的实现方法,其特征在于,客户进程向消息队列发送消息的内容包括:消息类型、本客户进程ID、报文类型、报文长度和报文数据。
9.如权利要求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 true CN111782417A (zh) | 2020-10-16 |
CN111782417B 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) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259268A (zh) * | 2021-07-02 | 2021-08-13 | 北京城建智控科技有限公司 | 一种支持冗余架构的网口与串口数据转发网关及方法 |
WO2023035722A1 (zh) * | 2021-09-07 | 2023-03-16 | 华为技术有限公司 | 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服务器集群实现共享订阅的方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259268A (zh) * | 2021-07-02 | 2021-08-13 | 北京城建智控科技有限公司 | 一种支持冗余架构的网口与串口数据转发网关及方法 |
WO2023035722A1 (zh) * | 2021-09-07 | 2023-03-16 | 华为技术有限公司 | Rdma数据传输系统、rdma数据传输方法及网络设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111782417B (zh) | 2023-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2098417C (en) | Method and system for project management across process boundaries in a data processing system | |
US5748897A (en) | Apparatus and method for operating an aggregation of server computers using a dual-role proxy server computer | |
CN111580995B (zh) | 基于mqtt异步通信场景下的分布式云平台与物联网智能终端的同步通信方法与系统 | |
US5867650A (en) | Out-of-band data transmission | |
WO2017041398A1 (zh) | 数据传输方法和装置 | |
CN107493266B (zh) | 嵌入式自助终端的通信系统、方法及装置 | |
JPH09218860A (ja) | クライアント/サーバシステムにおける多様なプロトコルに従った遠隔手続き呼出しをハンドリングする方法 | |
CN111782417A (zh) | 一种基于消息的多进程共享串口资源的实现方法 | |
CN111258723B (zh) | 分布式系统的事务处理方法、装置、系统、介质及设备 | |
CN111541688A (zh) | 一种兼容多协议的嵌入式系统、数据处理方法及装置 | |
CN104573489A (zh) | 禁止应用创建桌面图标的方法及装置 | |
CN116881040A (zh) | 一种业务操作处理方法、装置、电子装置和存储介质 | |
CN113992740B (zh) | 一种基于自主可控的中间件及数据传输方法 | |
CN108429665B (zh) | 一种并发通信传输数据的方法 | |
US11870746B2 (en) | Method for chatting messages by topic based on subscription channel reference in server and user device | |
US5727148A (en) | Message control method and system | |
CN109639795B (zh) | 一种基于AcitveMQ消息队列的服务管理方法与装置 | |
CN112511636A (zh) | 数据传输系统、方法、装置、计算机设备及存储介质 | |
CN112714181A (zh) | 一种数据传输方法及装置 | |
CN113176957B (zh) | 一种基于rpc的远程应用自动化系统 | |
CN113204436A (zh) | 一种消息处理方法、装置、设备及计算机可读存储介质 | |
CN113032010B (zh) | 命令的传输控制方法、终端及计算机可读存储介质 | |
CN112351053B (zh) | 嵌入式数据库的远程访问方法、装置、设备及介质 | |
CN115174588B (zh) | 带宽控制方法、装置、设备、存储介质和程序产品 | |
KR100442599B1 (ko) | 교환 시스템에서 워크스테이션의 분산 객체를 이용한메시지 처리 장치 및 방법 |
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 |