CN102437952A - 多变种Modbus协议报文的管理方法 - Google Patents
多变种Modbus协议报文的管理方法 Download PDFInfo
- Publication number
- CN102437952A CN102437952A CN2011103592411A CN201110359241A CN102437952A CN 102437952 A CN102437952 A CN 102437952A CN 2011103592411 A CN2011103592411 A CN 2011103592411A CN 201110359241 A CN201110359241 A CN 201110359241A CN 102437952 A CN102437952 A CN 102437952A
- Authority
- CN
- China
- Prior art keywords
- modbus
- message
- data
- sending
- transmission
- 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
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明是一种多变种Modbus协议报文发送的管理方法,对于多变种的Modbus的报文发送,通道守护任务不会阻塞在一个Modbus中,要么接收一个Modbus的数据,要么发送下一个Modbus的请求,提高了发送和接收的速度,数据的实时性得到了保证,消除了Modbus规约具备了发送条件而实际上发送延迟的现象,提高了报文发送的实时性。对于不同数据类型的传输报文,发送时动态添加了发送索引callOrder,避免了分段发送时的缓冲区复制,提高了传输效率。
Description
技术领域
本发明涉及多变种的Modbus主站协议的管理方法,属工业控制自动化领域。
背景技术
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。借助于Modbus 协议,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
在我国,Modbus已经成为国家标准,标准号:GB/T19582-2008。据不完全统计:截止到2010年,Modbus的节点安装数量已经超过了1100万个。
Modbus具有以下几个特点:
1、标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过500家,支持Modbus的产品超过800种。
2、Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
国内大部分自控厂家都是基于Modbus规约来实现与主站通讯。
在流量计、压力传感器、温度传感器、电动阀门、液位计中嵌入Modbus规约,可接入到SCADA系统上,但因为解释的不同,Modbus规约会出现多个版本,给上位机SCADA的接入带来很大的麻烦,数据的采集依赖于Modbus可靠、稳定的通讯,因此对Modbus规约的管理对系统的运行效率和可靠性起着非常重要的作用。现有技术一般采用如下方式:
轮循处理方式:因为Modbus的变种很多,只能为每一个Modbus规约编写一个动态链接库,并导入一个新的动态链接库副本,每个规约的接收任务使用阻塞方式调用read(),没有接收到数据或时间不到时则不会发送下一个Modbus规约的报文,在主任务中使用阻塞方式调用write()来请求数据。这种方法比较简单,但是效率低。在主任务中发送数据后,如果接收的报文较长、或没接收到数据,主任务会等待接收的数据,直到等待时间到时才会发送下一个规约的报文,这样就存在一个滞后发送的时间窗口,影响了主任务后续事件的实时处理。这样的处理方式使数据不能实时、快速地上传到SCADA系统,对现场的采集点存在延迟,如果现场有故障或需要快速处理的问题,则不能及时反映到SCADA系统上,对安全生产会产生不利影响。
工业自动化系统是一个实时系统,采集设备生成的大量数据需要快速、准确上送到SCADA系统,尽可能提高传输效率。现有的方式在发送数据、接收数据时会出现停滞、延时的现象,大大影响了传输效率。
发明内容
本发明所要解决的技术问题是,提供一种多变种Modbus协议报文的管理方法,采取高效的报文缓冲区管理方式,以提高发收规约的效率。
为了解决上述技术问题,本发明采用了以下技术方案。
多变种Modbus协议报文发送的管理方法,其特征是:对于要发送的不同功能类型的报文,将其按照不同的功能码分成若干段,当第n(n>=1)段报文发送完后,并且接收到数据后就会问下一个Modbus的相应码,都问完后,才进行第n+1段的发送;发送序号callOrder每发送一个功能码就会增加一次,如果callOrder等于功能码的数量funCodeNum,则callOrder等于0,从0开始重新请求数据;
对于接收的数据类型的报文,根据发送时的长度来判断是否已经接收完毕,如果没有接收完毕,则接着收,直到全部接收完毕时才会发送下一个Modbus的请求;为了防止出现误码,在接收时判断接收到的功能码和发送的功能码是否相同,不相同则不会进行处理,相同时会将相应的数据放到共享内存中保存起来,完成一次数据的接收过程。
本发明的积极效果在于:所有的Modbus规约都采用一个动态链接库,增加一个规约配置文件,在这个配置文件中,对不同的Modbus规约进行配置,在对规约的初始化时将这个配置文件读到内存中并在内存中保存,根据不同的设备地址对配置文件进行读取。当某一个Modbus规约的报文发送后并不等待接收完数据,而是转到下一个Modbus规约上,用read()函数来接收数据,接收完或没有数据则判断本Modbus规约是否可发送,如果本规约的报文可发送,则再调用write()来发送报文,在可以发送报文时则及时发送报文。
对于多变种的Modbus的报文发送,通道守护任务不会阻塞在一个Modbus中,要么接收一个Modbus的数据,要么发送下一个Modbus的请求,提高了发送和接收的速度,数据的实时性得到了保证,消除了Modbus规约具备了发送条件而实际上发送延迟的现象,提高了报文发送的实时性。对于不同数据类型的传输报文,发送时动态添加了发送索引callOrder,避免了分段发送时的缓冲区复制,提高了传输效率。
附图说明
图1是处理单个Modbus规约的报文发送、接收流程示意图。
图2是多个变种的Modbus规约被分割成多个功能码段进行处理的示意图。
具体实施方式
下面结合附图和具体实施例进一步说明本发明。
主任务初始化时分配多个空闲的发送、接收报文缓冲区,分配的缓冲区是共享内存方式的,长度基本为512个字节,每建立一个 Modbus规约,就创建一个相应的Modbus规约副本,Modbus规约结构包括的数据成员有初始化函数、接收函数、发送函数、发收报文长度、设备ID、功能码、寄存器起始地址等;
发送Modbus规约报文时,将报文发送到内存的缓冲区,对于数据报文,利用这个缓冲区从前向后循环进行报文编码,包括报文的ID、功能码、寄存器起始地址、数据区、CRC校验,通过共享内存管理机制传递给通道守护任务进行发送;
通道守护任务监视共享内存中的发送缓冲区;通道守护任务为每一个通道的发送设置一个要发送的头指针和已发送的尾指针,Modbus规约在要发送请求数据时,将尾指针增加,通道的守护任务判断头指针和尾指针是否相同,不相同说明有新的发送命令到来 ,通道守护任务将头指针和尾指针间的数据,最大发送64个字节,送到物理通道的发送缓冲区中,物理通道返回值>0,说明本次发送成功。
多变种的Modbus规约的数据处理过程主要包括以下几个步骤:
(1)主任务初始时分配多个共享内存,该共享内存中有发送、接收报文缓冲区,每个发送报文缓冲区的大小是512个字节。
(2)每建立一个 Modbus规约,就创建一个相应的Modbus规约副本,Modbus规约结构包括的数据成员有初始化函数、接收函数、发送函数、发收报文长度、设备ID、功能码、寄存器起始地址等;
(3)发送报文时,先从Modbus规约处理程序中将报文发送至内存中,对于数据报文,利用这个缓冲区从前向后进行报文编码,包括设备地址、功能码、寄存器起始地址、数据长度、校验码,通过一个线程,用内存管理机制将发送的数据传递给通道守护任务进行发送。
(4)通道发送任务将数据取出后并且判断不存在上次没有发送完的报文,则发送本次数据。
对于一个Modbus规约的处理,则如图1所示,执行以下流程:
(1)判断当前要发送的报文是否完全发送完;
(2)如果当前报文没有发送完,使用write(),判断头指针的位置就可以知道当前报文已经发送到的位置,继续发送余下的当前报文,然后转到过程(4)执行;
(3)假如当前Modbus的报文已发送完,报文所在的发送报文缓冲区中的头指针和尾指针是相同的;
(4)根据write()的返回值,判断本次发送是否成功,如果成功则转到(1),发送余下的报文,如果不成功,则重发。全部发送完后则结束流程。
发送完请求的数据后则进入接收判断:
(1) 调用read()函数,如果read()返回值大于0,说明有接收到的数据;
(2) 接收缓冲区中有头指针和尾指针,当在通道守护任务中接收到数据时尾指针会增
加;
(3) 接收缓冲区的头指针和尾指针不相同,则将中间的数据放到内存接收缓冲区中;
(4) 该内存缓冲区为512个字节,循环放置接收到的数据;
(5) 通道守护任务调用Modbus的接收函数,在Modbus规约中对接收到的数据进行处
理。完成本次接收任务后,再发送下一个功能码的数据。
如图2所示,对于多个变种的Modbus规约的报文,对于要发送的不同功能类型的报文,将其按照不同的功能码分成若干段,当第n(n>=1)段报文发送完后,并且接收到数据后就会问下一个Modbus的相应码,不会一直问本Modbus的其余码,其它的Modbus都问完后,才进行第n+1段的发送;发送序号callOrder每发送一个功能码就会增加一次,如果callOrder等于功能码的数量funCodeNum,则callOrder等于0,从0开始重新请求数据。
对于接收的数据类型的报文,会根据发送时的长度来判断是否已经接收完毕,如果没有接收完毕,则接着收,直到全部接收完毕时才会发送下一个Modbus的请求。为了防止出现误码,会在接收时判断接收到的功能码和发送的功能码是否相同,不相同则不会进行处理,相同时会将相应的数据放到共享内存中保存起来,完成一次数据的接收过程。
Claims (2)
1.多变种Modbus协议报文发送的管理方法,其特征是:对于要发送的不同功能类型的报文,将其按照不同的功能码分成若干段,当第n(n>=1)段报文发送完后,并且接收到数据后就会问下一个Modbus的相应码,都问完后,才进行第n+1段的发送;发送序号callOrder每发送一个功能码就会增加一次,如果callOrder等于功能码的数量funCodeNum,则callOrder等于0,从0开始重新请求数据;
对于接收的数据类型的报文,根据发送时的长度来判断是否已经接收完毕,如果没有接收完毕,则接着收,直到全部接收完毕时才会发送下一个Modbus的请求;为了防止出现误码,在接收时判断接收到的功能码和发送的功能码是否相同,不相同则不会进行处理,相同时会将相应的数据放到共享内存中保存起来,完成一次数据的接收过程。
2.如权利要求1所述的多变种Modbus协议报文发送的管理方法,其特征是:主任务初始时分配多个共享内存,该共享内存中有发送、接收报文缓冲区,每个发送报文缓冲区的大小是512个字节,每建立一个 Modbus规约,就创建一个相应的Modbus规约副本,Modbus规约结构包括的数据成员有初始化函数、接收函数、发送函数、发收报文长度、设备ID、功能码、寄存器起始地址;
发送报文时,先从Modbus规约处理程序中将报文发送至内存中,对于数据报文,利用这个缓冲区从前向后进行报文编码,包括设备地址、功能码、寄存器起始地址、数据长度、校验码,通过一个线程,用内存管理机制将发送的数据传递给通道守护任务进行发送;通道发送任务将数据取出后并且判断不存在上次没有发送完的报文,则发送本次数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103592411A CN102437952A (zh) | 2012-01-29 | 2012-01-29 | 多变种Modbus协议报文的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103592411A CN102437952A (zh) | 2012-01-29 | 2012-01-29 | 多变种Modbus协议报文的管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102437952A true CN102437952A (zh) | 2012-05-02 |
Family
ID=45985835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103592411A Pending CN102437952A (zh) | 2012-01-29 | 2012-01-29 | 多变种Modbus协议报文的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102437952A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104539506A (zh) * | 2015-01-27 | 2015-04-22 | 浪潮集团有限公司 | 一种网络传输服务构件及网络传输系统 |
CN105278437A (zh) * | 2014-06-16 | 2016-01-27 | 上海宝信软件股份有限公司 | 基于S7-300/400 PLC的Modbus RTU/ASCII协议实现方法 |
CN105812346A (zh) * | 2015-12-12 | 2016-07-27 | 重庆川仪自动化股份有限公司 | 一种串口设备和以太网设备的数据交互方法 |
CN106330601A (zh) * | 2016-08-19 | 2017-01-11 | 北京匡恩网络科技有限责任公司 | 测试用例生成方法及装置 |
CN107786406A (zh) * | 2017-10-25 | 2018-03-09 | 笔笔发信息技术(上海)有限公司 | 使用数据表控制通讯设备工作的方法 |
CN113132468A (zh) * | 2021-03-19 | 2021-07-16 | 珠海科创电力电子有限公司 | 基于ModbusTCP协议的通信方法、通信设备、通信系统和存储介质 |
-
2012
- 2012-01-29 CN CN2011103592411A patent/CN102437952A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105278437A (zh) * | 2014-06-16 | 2016-01-27 | 上海宝信软件股份有限公司 | 基于S7-300/400 PLC的Modbus RTU/ASCII协议实现方法 |
CN104539506A (zh) * | 2015-01-27 | 2015-04-22 | 浪潮集团有限公司 | 一种网络传输服务构件及网络传输系统 |
CN105812346A (zh) * | 2015-12-12 | 2016-07-27 | 重庆川仪自动化股份有限公司 | 一种串口设备和以太网设备的数据交互方法 |
CN106330601A (zh) * | 2016-08-19 | 2017-01-11 | 北京匡恩网络科技有限责任公司 | 测试用例生成方法及装置 |
CN107786406A (zh) * | 2017-10-25 | 2018-03-09 | 笔笔发信息技术(上海)有限公司 | 使用数据表控制通讯设备工作的方法 |
CN113132468A (zh) * | 2021-03-19 | 2021-07-16 | 珠海科创电力电子有限公司 | 基于ModbusTCP协议的通信方法、通信设备、通信系统和存储介质 |
CN113132468B (zh) * | 2021-03-19 | 2022-02-25 | 珠海科创电力电子有限公司 | 基于ModbusTCP协议的通信方法、通信设备、通信系统和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102437952A (zh) | 多变种Modbus协议报文的管理方法 | |
CN102196002B (zh) | 一种基于数据流通信的网络控制系统 | |
JP2021170311A (ja) | EtherCATマスタースレーブ統合ブリッジコントローラー及び制御方法 | |
CN101950175B (zh) | 一种基于工业以太网的高速现场总线实现方法 | |
CN101175077B (zh) | 光纤通道知识产权核 | |
CN104702474A (zh) | 一种基于FPGA的EtherCAT主站装置 | |
CN105406998A (zh) | 基于fpga的双冗余千兆以太网介质访问控制器ip核 | |
CN101325090B (zh) | 通过使循环冗余码线路相对于数据线路偏移改善等待时间 | |
CN101374094A (zh) | 数据传输方法 | |
CN103200249A (zh) | 物联网智能数据网关系统的实现方法 | |
RU2004109133A (ru) | Улучшение доступности и масштабируемости в системе передачи сообщений способом, прозрачным для приложения | |
CN103064731A (zh) | 一种提高消息队列系统性能的装置及其方法 | |
CN101262398B (zh) | 污染源监测系统监测子站通信网络 | |
CN110635982B (zh) | 通讯总线上双主机通讯方法、系统、工控网关及储存介质 | |
CN101124560A (zh) | 用于调度消息和非调度消息协调发送的通信控制器 | |
CN101309192A (zh) | 总线通信方法 | |
US20130159447A1 (en) | System, gateway, and method for automatic setting configuration by learning commands | |
CN101529404B (zh) | 用于时间戳消息的方法 | |
CN108306852A (zh) | 一种基于简单二进制编码的消息中间件系统和方法 | |
CN204733178U (zh) | 一种基于FPGA的EtherCAT主站装置 | |
CN114866504B (zh) | 一种基于mqtt消息协议的能源控制器进程间的通信方法 | |
CN106506303A (zh) | 一种控制器实时以太网EtherCAT的主站系统 | |
CN110474828B (zh) | 一种mbus总线通信方法及系统 | |
CN101267425A (zh) | 用于动力环境分布式监控系统中的板间接口通讯协议 | |
KR20160110585A (ko) | 사물 인터넷에서 dds 기반 사물 품질의 설정 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120502 |