CN107992367A - 一种Modbus串口数据处理方法 - Google Patents
一种Modbus串口数据处理方法 Download PDFInfo
- Publication number
- CN107992367A CN107992367A CN201710987416.0A CN201710987416A CN107992367A CN 107992367 A CN107992367 A CN 107992367A CN 201710987416 A CN201710987416 A CN 201710987416A CN 107992367 A CN107992367 A CN 107992367A
- Authority
- CN
- China
- Prior art keywords
- thread
- serial
- modbus
- data
- serial ports
- 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
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Programmable Controllers (AREA)
Abstract
本发明提供了一种Modbus串口数据处理方法,主线程解析串口配置文件;串口线程用于根据主线程的命令启动,进入事件消息循环;协议线程启动,根据配置串口信息确定串口号,将串口线程的Modbus列表中存储的Modbus命令存入协议线程的QModbusComList列表中;数据线程启动,解析响应信息,实时检测QComDataList列表是否存储有数据,当检测到有数据存在时进行处理。本发明基于Qt应用程序框架,采用多串口并行,对硬件的利用率更高,系统耗费的资源更少,能够保证应用程序长时间采集、解析和存储多串口Modbus数据,确保变电站主设备状态信息及时、高效、准确的呈现给用户。
Description
技术领域
本发明属于变电站一次设备在线监测技术领域,特别涉及一种Modbus串口数据处理方法。
背景技术
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。其特点是通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本,特别适用于远距离通信,串口通信是变电站智能组件产品的重要研究课题,如在基于ARM的嵌入式系统开发应用中,对于系统程序的调试及上位机和下位机的沟通等,串口通信都是必不可少的功能实现。
在变电站监测系统中,经常会处理多个串口发送过来的Modbus数据,而且数据量较大,若串口采用9600波特率,则每秒需要进行1200字节的数据处理,由于串口通信的传输速度较慢,不能保证长时间稳定采集、解析和存储多串口数据,进一步导致变电站主设备状态信息不能及时、高效、准确的呈献给用户,因此,可能继续采用传统的串口通信的方式不再适用,随着科学技术的发展,慢慢出现了一系列的基于开发平台的串口通信研究,比如基于LabView的串口通信研究、基于VC++的串口通信研究、基于Qt的串口通信研究和基于QT_E的串口平台研究,研究主要针对某些产品,且有些产品已经成功推向市场。可以看出,基于Qt开发串口通信等应用程序已成为一个热点。Qt是一个多平台的C++图形用户界面应用程序框架,它通过信号和槽的方法,使对象之间在彼此不知道对方信息的情况下实现信息交互,由于其面向对象、易扩展,可实现组件编程等特点,已成为嵌入式领域的重要开发工具。
发明内容
本发明的目的在于提供一种Modbus串口数据处理方法,用于解决现有技术的方法不能将变电站数据及时、高效、准确的呈现给用户的问题。
为实现上述目的,本发明的技术方案是:
一种Modbus串口数据处理方法,包括主线程、串口线程、协议线程及数据线程:
所述主线程用于开启串口线程、协议线程及数据线程,解析串口配置文件,读取多串口信息;
所述串口线程用于根据主线程的命令启动,进入事件消息循环;
所述协议线程用于根据主线程的命令启动,根据配置串口信息确定串口号,将串口线程的Modbus列表中存储的Modbus命令存入协议线程的QModbusComList列表中;
所述数据线程用于根据主线程的命令启动,解析响应信息,实时检测数据线程QComDataList列表是否存储有数据,当检测到有数据存在时,解析出各个参数,对解析出的各参数进行处理。
进一步地,所述串口配置文件为XML串口配置文件。
进一步地,串口线程与协议线程采用QList列表通信。
进一步地,串口线程与数据线程采用QList列表通信。
进一步地,所述串口事件循环实时监测QModbusComList列表是否为空,当QModbusComList列表不为空时,takeFrist()函数取走列表第一组Modbus命令,延迟接收响应信息,并将其存储在QComDataList列表。
本发明的有益效果是:
本发明提供了一种基于Qt的并发Modbus的串口数据处理方法,包括主线程、串口线程、协议线程及数据线程:主线程用于开启串口线程、协议线程及数据线程,解析串口配置文件,读取多串口信息;串口线程用于根据主线程的命令启动,进入事件消息循环,实时监测QModbusComList列表是否为空,不为空则takeFrist()函数取走列表第一组Modbus命令并发送给下位机;协议线程用于根据主线程的命令启动,根据配置串口信息确定串口号,根据Modbus协议组织串口命令并存入QModbusComList列表中;数据线程用于根据主线程的命令启动,解析响应信息,实时检测QComDataList列表是否存储有数据,当检测到有数据存在时,解析出各个参数,对解析出的各参数进行处理。本发明基于Qt应用程序框架,采用多串口并行,可缩短轮询周期,提高监测效率;数据存储和数据分析并行处理,数据处理方式更高效;QList作为线程间通信方法,方便数据扩展,数据交互更加灵活;对于硬件来说,多线程运行对硬件的利用率更高,系统耗费的资源更少,能够保证应用程序长时间采集、解析和存储多串口Modbus数据,确保变电站主设备状态信息及时、高效、准确的呈现给用户。
附图说明
图1为基于Qt的高并发数据处理方法流程图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步的说明:
一般在处理串口通信数据时,通常所采用的方法是把采集线程和解析线程放在主线程里,这对于CPU主频频率较高的x86架构的机器来说是没问题的,但是对ARM架构的机器就很困难了。ARM架构的机器相对x86架构的机器各有优缺点,在工程应用时,根据工程实际需求灵活配置机器可以优化工程方案,实现最大效益。本方法基于Qt应用程序开发框架,支持多数主流操作系统,具有良好的可移植性;算法采用多线程,将数据存储和数据解析分离,可以方便的在ARM架构上和x86架构机器上移植,使得公司产品系列化和多样化;优化工程方案,根据工程实际需要,对于带载较少的工程,配置ARM架构机器;基于此算法研发出的产品已应用在多个智能变电站和换流站,已产生几十万的产值。
一种基于Qt的并发Modbus的串口数据处理方法,该方法具体使用到四个线程,分别是主线程、串口线程、协议线程及数据线程,所述主线程用于开启串口线程、协议线程及数据线程,如图1所示,下面最具体说明:
1、主线程解析XML串口配置文件,通过解析的配置文件读取多串口信息,根据配置串口信息初始化串口并启动QMySerialPort串口线程,主线程QMySerialPort类继承自QThread,用于实现串口初始化、串口命令的发送和反馈信息的接收存储。调用QSerialPort类初始化串口后启动run()函数,进入事件消息循环;QSerialPort是基于Qt编写的串口类函数,用于串口的初始化和串口命令的发送和反馈的接收存储;事件循环监测QModbusComList列表,QModbusComList是QList类对象,用于串口线程和协议线程间通信;当QModbusComList不为空时,takeFirst()函数拿走列表第一组Modbus命令,然后调用QSerialPort类将串口命令根据串口参数发送出去。
2、协议线程根据主线程的命令,从主线程中启动,QMessageThread类继承自QThread。用于根据配置文件串口号和装置类型组织协议,并将协议数据push_back()到QModbusComList列表。
3、数据线程QDataParseThread根据主线程的命令,从主线程中启动,数据线程继承自QThread,用以实现串口响应信息的解析与存储。串口线程的响应消息列表中的响应消息通过QList线程间通信方式将响应消息存入到QComDataList列表,数据线程takeFirst()函数拿走列表数据用以解析处理,防止列表读写冲突用的是Qt中互斥量的锁定和解锁机制。
根据延迟配置,串口线程延迟接收响应信息并将其反馈信息校验成功后存储在QComDataList列表,数据线程启动后,进入事件消息循环,监测QComDataList列表是否为空,有数据入列表后takeFirst()拿走第一组,根据协议定义解析出各个参数,存储在数据库以做进一步处理。
以上给出了具体的实施方式,但本发明不局限于以上所描述的实施方式。本发明的基本思路在于上述基本方案,对本领域普通技术人员而言,根据本发明的教导,设计出各种变形的模型、公式、参数并不需要花费创造性劳动。在不脱离本发明的原理和精神的情况下对实施方式进行的变化、修改、替换和变型仍落入本发明的保护范围内。
Claims (5)
1.一种Modbus串口数据处理方法,其特征在于,包括主线程、串口线程、协议线程及数据线程:
所述主线程用于开启串口线程、协议线程及数据线程,解析串口配置文件,读取多串口信息;
所述串口线程用于根据主线程的命令启动,进入事件消息循环;
所述协议线程用于根据主线程的命令启动,根据配置串口信息确定串口号,将串口线程的Modbus列表中存储的Modbus命令存入协议线程的QModbusComList列表中;
所述数据线程用于根据主线程的命令启动,解析响应信息,实时检测QComDataList列表是否存储有数据,当检测到有数据存在时,解析出各个参数,对解析出的各参数进行处理。
2.根据权利要求1所述的Modbus串口数据处理方法,其特征在于,所述串口配置文件为XML串口配置文件。
3.根据权利要求1所述的Modbus串口数据处理方法,其特征在于,串口线程与协议线程采用QList通信。
4.根据权利要求1所述的Modbus串口数据处理方法,其特征在于,串口线程与数据线程采用QList通信。
5.根据权利要求1-4任一项所述的Modbus串口数据处理方法,其特征在于,所述串口事件循环实时监测QModbusComList列表是否为空,当QModbusComList列表不为空时,takeFrist()函数取走列表第一组Modbus命令,延迟接收响应信息,并将响应信息存储在QComDataList列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710987416.0A CN107992367B (zh) | 2017-10-20 | 2017-10-20 | 一种Modbus串口数据处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710987416.0A CN107992367B (zh) | 2017-10-20 | 2017-10-20 | 一种Modbus串口数据处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107992367A true CN107992367A (zh) | 2018-05-04 |
CN107992367B CN107992367B (zh) | 2020-09-25 |
Family
ID=62029996
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710987416.0A Active CN107992367B (zh) | 2017-10-20 | 2017-10-20 | 一种Modbus串口数据处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107992367B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108958789A (zh) * | 2018-05-20 | 2018-12-07 | 湖北九州云仓科技发展有限公司 | 一种并行流式计算方法、电子设备、存储介质及系统 |
CN109728936A (zh) * | 2018-12-05 | 2019-05-07 | 北京电力自动化设备有限公司 | 高压链式静止无功发生器通信管理方法、装置及系统 |
CN110032535A (zh) * | 2018-12-28 | 2019-07-19 | 北京润科通用技术有限公司 | 一种串口数据解析方法及装置 |
CN111030907A (zh) * | 2019-12-11 | 2020-04-17 | 西安安森智能仪器股份有限公司 | 一种机器人串口总线的多设备数据解析及管理方法 |
CN111899501A (zh) * | 2020-08-04 | 2020-11-06 | 广东电网有限责任公司 | 一种配网自动化主站变电站内开关的遥控方法 |
CN113127286A (zh) * | 2019-12-30 | 2021-07-16 | 深圳Tcl新技术有限公司 | 多串口通信的数据获取方法、装置、智能终端及存储介质 |
CN117573214A (zh) * | 2024-01-17 | 2024-02-20 | 深圳前海深蕾半导体有限公司 | 一种串口设备和Android系统框架融合的方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7809656B2 (en) * | 2007-09-27 | 2010-10-05 | Rockwell Automation Technologies, Inc. | Microhistorians as proxies for data transfer |
CN103713543A (zh) * | 2013-12-18 | 2014-04-09 | 国核自仪系统工程有限公司 | 一种基于fpga的多串口并行处理架构 |
CN104464246A (zh) * | 2014-12-10 | 2015-03-25 | 广东广联电子科技有限公司 | 一种远程抄表系统中的串口数据处理方法 |
CN104484292A (zh) * | 2014-12-30 | 2015-04-01 | 飞天诚信科技股份有限公司 | 一种适用于串口设备的驱动程序及其工作方法 |
CN105068947A (zh) * | 2015-08-20 | 2015-11-18 | 浪潮软件集团有限公司 | 一种基于驱动层处理串口通信的方法 |
-
2017
- 2017-10-20 CN CN201710987416.0A patent/CN107992367B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7809656B2 (en) * | 2007-09-27 | 2010-10-05 | Rockwell Automation Technologies, Inc. | Microhistorians as proxies for data transfer |
CN103713543A (zh) * | 2013-12-18 | 2014-04-09 | 国核自仪系统工程有限公司 | 一种基于fpga的多串口并行处理架构 |
CN104464246A (zh) * | 2014-12-10 | 2015-03-25 | 广东广联电子科技有限公司 | 一种远程抄表系统中的串口数据处理方法 |
CN104484292A (zh) * | 2014-12-30 | 2015-04-01 | 飞天诚信科技股份有限公司 | 一种适用于串口设备的驱动程序及其工作方法 |
CN105068947A (zh) * | 2015-08-20 | 2015-11-18 | 浪潮软件集团有限公司 | 一种基于驱动层处理串口通信的方法 |
Non-Patent Citations (1)
Title |
---|
王静思: "基于Modbus协议的多串口数据采集系统的实现", 《第十六届全国青年通信学术会议论文集(上)》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108958789A (zh) * | 2018-05-20 | 2018-12-07 | 湖北九州云仓科技发展有限公司 | 一种并行流式计算方法、电子设备、存储介质及系统 |
CN108958789B (zh) * | 2018-05-20 | 2021-07-09 | 湖北九州云仓科技发展有限公司 | 一种并行流式计算方法、电子设备、存储介质及系统 |
CN109728936A (zh) * | 2018-12-05 | 2019-05-07 | 北京电力自动化设备有限公司 | 高压链式静止无功发生器通信管理方法、装置及系统 |
CN109728936B (zh) * | 2018-12-05 | 2021-10-29 | 北京电力自动化设备有限公司 | 高压链式静止无功发生器通信管理方法、装置及系统 |
CN110032535A (zh) * | 2018-12-28 | 2019-07-19 | 北京润科通用技术有限公司 | 一种串口数据解析方法及装置 |
CN111030907A (zh) * | 2019-12-11 | 2020-04-17 | 西安安森智能仪器股份有限公司 | 一种机器人串口总线的多设备数据解析及管理方法 |
CN113127286A (zh) * | 2019-12-30 | 2021-07-16 | 深圳Tcl新技术有限公司 | 多串口通信的数据获取方法、装置、智能终端及存储介质 |
CN113127286B (zh) * | 2019-12-30 | 2023-01-20 | 深圳Tcl新技术有限公司 | 多串口通信的数据获取方法、装置、智能终端及存储介质 |
CN111899501A (zh) * | 2020-08-04 | 2020-11-06 | 广东电网有限责任公司 | 一种配网自动化主站变电站内开关的遥控方法 |
CN111899501B (zh) * | 2020-08-04 | 2021-08-06 | 广东电网有限责任公司 | 一种配网自动化主站变电站内开关的遥控方法 |
CN117573214A (zh) * | 2024-01-17 | 2024-02-20 | 深圳前海深蕾半导体有限公司 | 一种串口设备和Android系统框架融合的方法及装置 |
CN117573214B (zh) * | 2024-01-17 | 2024-04-19 | 深圳前海深蕾半导体有限公司 | 一种串口设备和Android系统框架融合的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107992367B (zh) | 2020-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107992367A (zh) | 一种Modbus串口数据处理方法 | |
Fujimoto | Distributed simulation systems | |
CN107526645B (zh) | 一种通信优化方法及系统 | |
CN101873005B (zh) | 一种实现电能量均衡采集的方法 | |
CN104765641B (zh) | 一种作业调度方法及系统 | |
CN105516292A (zh) | 一种智能变电站云平台的热备方法 | |
CN109753401A (zh) | 监控方法、采集端、管控端、监控系统及装置 | |
CN104516809A (zh) | 一种自动化测试系统及方法 | |
CN107817401A (zh) | 一种用电信息采集系统的压力测试方法及装置 | |
CN105279614A (zh) | 基于流程的业务审计系统及方法 | |
CN109542450A (zh) | 智能变电站过程层智能组件实现方法及装置 | |
CN110177146A (zh) | 一种基于异步事件驱动的非阻塞Restful通信方法、装置和设备 | |
CN110347407A (zh) | 一种获取内存占用量的方法、装置、计算机设备及介质 | |
CN104050193B (zh) | 生成报文的方法和实现该方法的数据处理系统 | |
CN104202328B (zh) | 一种订阅goose/smv报文的方法、配置模块及订阅端 | |
CN109782724A (zh) | 防误闭锁的控制方法及终端设备 | |
CN109375146A (zh) | 一种用电数据的补采方法、系统及终端设备 | |
CN109840725A (zh) | 货物拣选方法、装置、电子装置及计算机可读存储介质 | |
CN109117295A (zh) | 一种交易超时监控方法及装置 | |
CN106685856A (zh) | 智能变电站海量网络报文处理方法、系统和设备 | |
CN107093069A (zh) | 智能电表数据处理系统和方法 | |
CN110209722A (zh) | 一种用于数据交换的数据接口 | |
CN108228908A (zh) | 一种数据抽取方法及装置 | |
CN115576218A (zh) | 基于协调事件轴同步的电力信息物理联合仿真方法及系统 | |
CN113505326A (zh) | 一种基于http协议族的动态编码数据传输控制方法 |
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 |