一种Modbus主站指令处理方法及主站控制器与流程

文档序号:12270045阅读:755来源:国知局
一种Modbus主站指令处理方法及主站控制器与流程

本发明属于自动化控制技术领域,更具体地,涉及一种Modbus主站指令处理方法及主站控制器。



背景技术:

Modbus协议是应用于电子控制器上的一种通用协议。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。它已经成为一种通用工业标准。Modbus通讯系统由一台主站控制器和多台从站设备构成,主站控制器可为上位机或逻辑控制器(Programmable Logic Controller,PLC)。主站控制器通过Modbus协议与从站设备进行通信,可以更改或读取从站设备的参数及状态。

主站控制器在一个通信周期向从站设备发送的一条消息帧如下:地址域+功能码+数据+差错校验。其中,地址域为从站设备的编号(例如1号从站,2号从站等)。功能码为Modbus协议定义,指示具体的操作(例如0x01读线圈,0x03读保持寄存器等)。数据为用户需要读取或写入到从站设备中的具体数据集(通常由从站设备的数据地址、请求数据的个数、请求数据的字节长度、请求的原始数据等组成)。差错校验为根据前面的数据(地址域+功能码+数据)通过算法计算出来的结果。

从站设备接收到消息帧后执行,并发送响应消息给主站控制器。主站控制器需要从接收的响应消息中提取出所需的数据,然后进行处理。

目前很多主站控制器在发送Modbus消息帧时,需要按照Modbus消息帧的格式去手动填写发送缓冲区,例如在PC端采用串口调试助手的方法。当数据量很大时,手动填写容易出错,并且由于Modbus协议定义的功能码种类多且没有明显区分特征,容易出现混淆。在写入数据到从站设备时,如果源数据地址改变或长度发生变化,需要更改大量软件代码,存在代码维护复杂的问题。在读取从站设备时,需要人为的从主站控制器接收到的响应消息中提取出所需的数据,或者采用专门定制的软件来提取所需的数据,这种方式缺乏通用性。由此可见,Modbus主站控制器亟需一种简短高效的处理方法,来自动加载、解析设备数据。



技术实现要素:

有鉴于此,本发明提供一种Modbus主站指令处理方法及主站控制器,通过Modbus指令来进行Modbus通信,采用指令机制来实现自动加载和解析设备数据。

为了实现以上目的,按照本发明的一个方面,提供了一种Modbus主站指令处理方法,

主站控制器接收到Modbus操作指令后,根据Modbus指令集将所述Modbus操作指令生成发向从站设备的Modbus消息帧,并将所述Modbus消息帧发送到所述从站设备;

从站设备响应后,主站控制器接收从站设备的响应消息帧,并根据上述Modbus操作指令自动解析和处理所述响应消息帧中的数据。

本发明的一个实施例中,在所述Modbus操作指令中包括如下一种或多种信息:

用于代替现有Modbus协议功能码的Modbus指令;

从站设备的设备号;

从站设备中的目的数据地址;

读取或写入的数据数量;

主站控制器的源数据地址。

本发明的一个实施例中,所述主站控制器接收到Modbus操作指令后,根据Modbus指令集将所述Modbus操作指令生成发向从站设备的Modbus消息帧,并将所述Modbus消息帧发送到所述从站设备,具体包括:

主站控制器接收到Modbus操作指令后,将所述Modbus操作指令存入指令发送堆栈;

当检测到所述指令发送堆栈中有待发送Modbus操作指令时,根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令的内容生成发向从站设备的Modbus消息帧;

将所述Modbus消息帧发送到所述从站设备。

本发明的一个实施例中,所述根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令的内容生成发向从站设备的Modbus消息帧,具体为:

根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令中的Modbus指令转换成对应的Modbus协议功能码;

根据所述Modbus操作指令中从站设备的设备号,从站设备中的目的数据地址,读取或写入的数据数量以及主站控制器的源数据地址,生成消息帧参数;

计算所述消息帧的CRC差错校验码;

将所述Modbus协议功能码、消息帧参数以及CRC差错校验码写入到消息帧的对应位置,生成消息帧。

本发明的一个实施例中,所述根据所述Modbus操作指令中从站设备的设备号,从站设备中的目的数据地址,读取或写入的数据数量以及主站控制器的源数据地址,生成消息帧参数,具体为:

如果所述Modbus操作指令为读操作,则生成的消息帧参数中包括从站设备的设备号、从站设备中的一个或多个目的数据地址以及主站控制器的源数据地址;

如果所述Modbus操作指令为写操作,则生成的消息帧参数中包括从站设备的设备号、从站设备中的一个或多个目的数据地址以及主站控制器的源数据地址处所保存的数据。

本发明的一个实施例中,所述从站设备响应后,主站控制器接收从站设备的响应消息帧,并根据上述Modbus操作指令自动解析和处理所述响应消息帧中的数据,具体为:

解析所述响应消息帧获得所述响应消息帧中的数据;

获得所述Modbus操作指令中主站控制器的源数据地址;

将所述响应消息帧中的数据写入到所述主站控制器的源数据地址处。

本发明的一个实施例中,在所述Modbus指令集中,所述Modbus协议功能码与Modbus指令的对应关系为:

用Modbus指令RCOL代替Modbus协议功能码01,表示读线圈;

用Modbus指令RREG代替Modbus协议功能码03,表示读寄存器;

用Modbus指令WCOL代替Modbus协议功能码05,表示写单个线圈;

用Modbus指令WREG代替Modbus协议功能码06,表示写单个寄存器;

用Modbus指令WMCL代替Modbus协议功能码0F,表示写多个线圈;

用Modbus指令WMRG代替Modbus协议功能码10,表示写多个寄存器。

按照本发明的另一方面,还提供了一种Modbus主站控制器,包括消息帧生成发送模块以及响应消息帧接收解析模块,其中:

所述消息帧生成发送模块,用于在接收到Modbus操作指令后,根据Modbus指令集将所述Modbus操作指令生成发向从站设备的Modbus消息帧,并将所述Modbus消息帧发送到所述从站设备;

所述响应消息帧接收解析模块,用于在从站设备响应后,接收从站设备的响应消息帧,并根据上述Modbus操作指令自动解析和处理所述响应消息帧中的数据。

本发明的一个实施例中,所述Modbus操作指令中包括如下一种或多种信息:

用于代替现有Modbus协议功能码的Modbus指令;

从站设备的设备号;

从站设备中的目的数据地址;

读取或写入的数据数量;

主站控制器的源数据地址。

本发明的一个实施例中,所述消息帧生成发送模块具体包括Modbus操作指令缓存子模块、消息帧生成子模块、消息帧发送子模块,其中:

所述Modbus操作指令缓存子模块,用于在接收到Modbus操作指令后,将所述Modbus操作指令存入指令发送堆栈;

所述消息帧生成子模块,用于在检测到所述指令发送堆栈中有待发送Modbus操作指令时,根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令的内容生成发向从站设备的Modbus消息帧;

所述消息帧发送子模块,用于将所述Modbus消息帧发送到所述从站设备。

与现有技术相比,本发明具有如下有益效果:

(1)本发明采用Modbus操作指令的方式来进行Modbus通信,能自动根据操作指令生成消息帧,并能自动解析和处理响应消息帧,消息帧和生成和响应消息帧的解析不需要人为参与,克服了现有技术中手动填写消息帧及人为处理响应消息帧中数据时效率低下且容易出错的问题;

(2)本发明中采用Modbus指令集的方式,设定Modbus协议功能码与Modbus指令的对应关系,只需手动输入Modbus操作指令即可完成通信过程,一方面Modbus指令集中的指令可以人为预设并且可以灵活修改,增强了指令处理的扩展性及区分性,克服了现有技术中直接填写Modbus协议功能码时,因功能码的区分性差以及数据量大导致容易出错且效率低下的问题;

(3)本发明中,在处理消息响应帧时是根据发出的相应Modbus操作指令来自动解析和处理数据,克服了现有技术中人为去理解消息响应帧,并且手动去提取并处理数据出效率低下容易出错的问题;

(4)本发明中,在指令不断变化的情况下只需对操作指令集进行扩展和维护即可,而无需对整个程序进行修改或扩展,只需一次性开发或较少维护,减少了开发成本和维护成本。

附图说明

图1是本发明实施例中一种Modbus主站指令处理方法的流程示意图;

图2是本发明实施例中一种Modbus操作指令的格式示意图;

图3是本发明实施例中一种根据Modbus操作指令生成并发送消息帧的方法示意图;

图4是本发明实施例中一种接收响应消息帧并根据Modbus操作指令生成解析处理数据的方法示意图;

图5是本发明实施例中一种Modbus主站控制器的结构示意图;

图6是本发明实施例中一种消息帧生成发送模块的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图1所示,本发明的整体技术方案如下:

以Modbus指令集的方式代替现有Modbus协议中的功能码。

主站控制器接收到Modbus操作指令后,根据Modbus指令集将所述Modbus操作指令生成发向从站设备的Modbus消息帧,并将所述Modbus消息帧发送到所述从站设备;

从站设备响应后,主站控制器接收从站设备的响应消息帧,并根据上述Modbus操作指令自动解析和处理所述响应消息帧中的数据。

在本发明中,指令发送堆栈是缓存发送指令的地方,当主站控制器前端有发送指令请求时,则将前端指令存入发送堆栈,当指令发送堆栈中有指令时,指令发送处理模块则向从站设备发送指令。指令发送处理模块按照发送堆栈中的指令,自动生成Modbus消息帧,其中包括将Modbus指令转换成Modbus功能码、拷贝指令中的从站设备地址和指令所指源数据到消息帧的恰当地方、通过算法计算CRC差错校验码。当从站设备响应后,回复响应帧至主站控制器的响应消息帧接收解析模块,响应消息帧接收解析模块根据当前发送指令自动解析和处理接收的数据。处理完响应数据后,当前Modbus指令通信完成,执行下一条Modbus指令。

其中,所述的Modbus指令包括:

A1以Modbus指令集的方式代替现有Modbus协议中的功能码。

A2对从站设备的设备号进行设定。

A3对从站设备中的目的数据地址进行设定。

A4对读取或写入的数据数量进行设定。

A5对主站控制器的源数据地址进行设定。

前端下发的Modbus操作指令的具体格式一般如图2所示,包括用于代替现有Modbus协议功能码的Modbus指令;从站设备的设备号;从站设备中的目的数据地址;读取或写入的数据数量;主站控制器的源数据地址。

当前端有Modbus操作指令的请求时,指令以队列的方式存入指令发送堆栈。当指令发送堆栈中有指令时,指令发送处理模块则取出该指令,读取指令中的配置并解析相应的数据。如图3所示,具体包括:

主站控制器接收到Modbus操作指令后,将所述Modbus操作指令存入指令发送堆栈;

当检测到所述指令发送堆栈中有待发送Modbus操作指令时,根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令的内容生成发向从站设备的Modbus消息帧;具体地,本步骤包括以下子步骤:

根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令中的Modbus指令转换成对应的Modbus协议功能码;

根据所述Modbus操作指令中从站设备的设备号,从站设备中的目的数据地址,读取或写入的数据数量以及主站控制器的源数据地址,生成消息帧参数;

在根据操作指令生成消息帧的各参数时,有两种情况,一种是读数据,此时不需要在消息帧中添加数据;另一种是写数据,此时需要在消息帧中添加需写入从站设备的数据,具体地:

如果所述Modbus操作指令为读操作,则生成的消息帧参数中包括从站设备的设备号、从站设备中的一个或多个目的数据地址以及主站控制器的源数据地址;

如果所述Modbus操作指令为写操作,则生成的消息帧参数中包括从站设备的设备号、从站设备中的一个或多个目的数据地址以及主站控制器的源数据地址处所保存的数据。

计算所述消息帧的CRC差错校验码;

将所述Modbus协议功能码、消息帧参数以及CRC差错校验码写入到消息帧的对应位置,生成消息帧。

将所述Modbus消息帧发送到所述从站设备。

当从站设备响应后,接收处理模块自动解析和处理接收的数据。如图4所示,具体包括:

解析所述响应消息帧获得所述响应消息帧中的数据;

获得所述Modbus操作指令中主站控制器的源数据地址;

将所述响应消息帧中的数据写入到所述主站控制器的源数据地址处。

以下结合具体实施例,对本发明Modbus主站指令处理方法作一详细说明:

实施例1:前端指令请求

前端指令请求的格式如图2所示,其中Modbus指令集设定如下:

用RCOL代替功能码01(读线圈)

用RREG代替功能码03(读寄存器)

用WCOL代替功能码05(写单个线圈)

用WREG代替功能码06(写单个寄存器)

用WMCL代替功能码0F(写多个线圈)

用WMRG代替功能码10(写多个寄存器)。

从站设备号、从站设备的目的数据地址、读取或写入数据个数分别用十进制或十六进制进行设定。例如1号从站,则将指令格式中的从站设备号参数填为1或者0x01;例如要读写的目的地址为0x1000,则将指令格式中的从站设备的目的数据地址参数填为0x1000;指令格式中的主站控制器源地址以代号代替(需要在主站控制器的程序代码中做相应的处理),例如用D1代替数据源地址0x0001。

例如:若需要读取1号从站5个寄存器的数据到主站控制器中,并存在主站控制器0x0001~0x0005地址处。

原先发送一条Modbus消息帧,需要在主站控制器中输入01 03 00 0000 05 85C9,读取到数据后还需手动或编写专用程序将数据拷贝到主站控制器的0x0001~0x0005地址处。

基于本发明的指令机制后,至需要在主站控制器中输入RREG 0x010x0000 0x0005D1即可完成以上通信过程,指令会自动解析从站设备数据到0x0001~0x0005地址处。

实例2,数据读取

当主站控制器发出读取寄存器请求指令后,该指令会存入到图1所示的指令发送堆栈中,接着指令发送模块会获取指令堆栈中的指令,按照图3所示的流程将指令封装成数据帧发送到从站设备,从站设备响应后,响应帧会按照图4所示的流程在主站控制器中进行处理。

例如:读寄存器指令请求RREG 0x01 0x0000 0x0005 D1

指令发送处理模块会按照图3所示的流程将指令自动封装成01 03 00 00 00 05 85 C9的消息帧发送到从站设备,主站控制器收到响应帧后(假设响应帧为01 03 0A 00 01 00 02 00 03 00 04 00 05 CF 24),响应消息帧接收解析模块会按照图4所示流程将所需数据00 01 00 02 00 03 00 04 00 05存入到0x0001~0x0005地址处。

实例3,数据写入

当主站控制器发出读取寄存器请求指令后,该指令会存入到图1所示的指令发送堆栈中,接着指令发送模块会获取指令堆栈中的指令,按照图3所示的流程将指令封装成数据帧发送到从站设备,从站设备响应后,响应帧会按照图4所示的流程在主站控制器中进行处理。

例如:写多个寄存器指令请求WMRG 0x01 0x0000 0x0005 D1

指令发送处理模块会按照图3所示的流程将指令自动封装成01 10 00 00 00 05 0A 00 01 00 02 00 03 00 04 00 05 EA 6A的消息帧发送到从站设备。主站控制器0x0001(D1)~0x0005(D5)地址处的数据00 01 00 02 00 03 00 04 00 05由指令发送处理模块自动加载到消息帧中,无需手动或编写专门的程序来实现。

进一步地,如图5所示,本发明还提供了一种Modbus主站控制器,包括消息帧生成发送模块以及响应消息帧接收解析模块,其中:

所述消息帧生成发送模块,用于在接收到Modbus操作指令后,根据Modbus指令集将所述Modbus操作指令生成发向从站设备的Modbus消息帧,并将所述Modbus消息帧发送到所述从站设备;

其中,所述Modbus操作指令中包括如下一种或多种信息:

用于代替现有Modbus协议功能码的Modbus指令;

从站设备的设备号;

从站设备中的目的数据地址;

读取或写入的数据数量;

主站控制器的源数据地址。

所述响应消息帧接收解析模块,用于在从站设备响应后,接收从站设备的响应消息帧,并根据上述Modbus操作指令自动解析和处理所述响应消息帧中的数据。

进一步地,如图6所示,所述消息帧生成发送模块具体包括Modbus操作指令缓存子模块、消息帧生成子模块、消息帧发送子模块,其中:

所述Modbus操作指令缓存子模块,用于在接收到Modbus操作指令后,将所述Modbus操作指令存入指令发送堆栈;

所述消息帧生成子模块,用于在检测到所述指令发送堆栈中有待发送Modbus操作指令时,根据Modbus指令集中Modbus协议功能码与Modbus指令的对应关系,将所述Modbus操作指令的内容生成发向从站设备的Modbus消息帧;

所述消息帧发送子模块,用于将所述Modbus消息帧发送到所述从站设备。

本发明中,采用Modbus操作指令的方式来进行Modbus通信,能自动根据操作指令生成消息帧,并能自动解析和处理响应消息帧,消息帧和生成和响应消息帧的解析不需要人为参与,克服了现有技术中手动填写消息帧及人为处理响应消息帧中数据时效率低下且容易出错的问题;采用Modbus指令集的方式,设定Modbus协议功能码与Modbus指令的对应关系,只需手动输入Modbus操作指令即可完成通信过程,一方面Modbus指令集中的指令可以人为预设并且可以灵活修改,增强了指令处理的扩展性及区分性,克服了现有技术中直接填写Modbus协议功能码时,因功能码的区分性差以及数据量大导致容易出错且效率低下的问题;在处理消息响应帧时是根据发出的相应Modbus操作指令来自动解析和处理数据,克服了现有技术中人为去理解消息响应帧,并且手动去提取并处理数据出效率低下容易出错的问题;在指令不断变化的情况下只需对操作指令集进行扩展和维护即可,而无需对整个程序进行修改或扩展,只需一次性开发或较少维护,减少了开发成本和维护成本。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1