一种数据传输方法及MODBUS服务器转让专利

申请号 : CN201410190325.0

文献号 : CN103929439B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵灿饶敦胜

申请人 : 昆山华恒焊接股份有限公司

摘要 :

一种数据传输方法及MODBUS服务器,所述方法包括:MODBUS服务器接收客户端发送的写寄存器的请求帧;解析所述请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息,且当所述功能码、起始地址、寄存器数量和寄存器值信息均满足预设要求时,所述MODBUS服务器处理所述请求帧相应的写寄存器请求;所述MODBUS服务器在处理完所述请求帧相应的请求时,向所述客户端发送应答帧。上述的方案可以有效提高数据传输的效率、节约数据传输的时间。

权利要求 :

1.一种数据传输方法,其特征在于,包括:

MODBUS服务器接收客户端发送的写寄存器的请求帧,所述请求帧包括功能码、起始地址、寄存器数量和寄存器值信息,其中,所述功能码指示MODBUS服务器执行写寄存器的操作,所述起始地址为所述写寄存器的操作对应的所述的MODBUS服务器的应用设备寄存器的起始地址,所述寄存器数量为所述写寄存器的操作对应的寄存器个数,且寄存器数量大于等于0x0001并小于等于0xFFFF,所述寄存器值为写入相应的应用设备寄存器中的数值;所述MODBUS服务器为基于MODBUS—TCP协议进行通信的服务端;

解析所述请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息,且当所述功能码、起始地址、寄存器数量和寄存器值信息均满足预设要求时,所述MODBUS服务器处理所述请求帧相应的写寄存器请求;

所述MODBUS服务器处理完所述请求帧相应的写寄存器请求时,向所述客户端发送应答帧。

2.根据权利要求1所述的数据传输方法,其特征在于,判断所述功能码、起始地址、寄存器数量和寄存器值信息是否满足预设要求,包括:判断所述功能码是否为支持的功能码;

当判断所述功能码为支持的功能码时,判断所述寄存器数量是否大于等于0x0001且小于等于0xFFFF;

当寄存器数量大于等于0x0001且小于等于0xFFFF时,判断所述起始地址、所述起始地址与所述寄存器数量的十六进制数值之和是否满足预设要求。

3.根据权利要求2所述的数据传输方法,其特征在于,还包括:当判断所述功能码不是支持的功能码时,返回第一异常码。

4.根据权利要求2所述的数据传输方法,其特征在于,还包括:当判断所述寄存器数量不满足大于等于0x0001且小于等于0xFFFF时,返回第二异常码。

5.根据权利要求2所述的数据传输方法,其特征在于,还包括:当判断起始地址、所述起始地址与所述寄存器数量的十六进制数值之和不满足预设要求时,返回第三异常码。

6.根据权利要求2所述的数据传输方法,其特征在于,还包括:当所述MODBUS服务器处理所述请求帧相应的写寄存器请求失败时,返回第四异常码。

7.一种MODBUS服务器,其特征在于,包括:

接收单元,适于接收客户端发送的写寄存器的请求帧,所述请求帧包括功能码、起始地址、寄存器数量和寄存器值信息,其中,所述功能码指示MODBUS服务器执行写寄存器的操作,所述起始地址为所述写寄存器的操作对应的所述的MODBUS服务器中应用设备寄存器的起始地址,所述寄存器数量为所述写寄存器的操作对应的寄存器个数,且所述寄存器数量大于等于0x0001并小于等于0xFFFF,所述寄存器值为写入相应的应用设备寄存器中的数值;所述MODBUS服务器为基于MODBUS—TCP协议进行通信的服务端;

解析单元,适于解析所述接收单元所接收的写寄存器请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息;

判断单元,适于判断所述解析单元从所述请求帧中解析出来的所述功能码、所述起始地址、所述寄存器数量和所述寄存器值是否满足预设要求;

处理单元,适于当所述判断单元判断所述功能码、所述起始地址、所述寄存器数量和所述寄存器值满足预设要求时,处理所述请求帧相应的写寄存器请求;

应答单元,适于当所述处理单元处理完所述请求帧相应的写寄存器请求时,向所述客户端发送应答帧。

8.根据权利要求7所述的MODBUS服务器,其特征在于,所述判断单元包括:

第一判断子单元,适于判断所述功能码是否为支持的功能码;

第二判断子单元,适于当所述第一判断子单元判断所述功能码为支持的功能码时,判断所述寄存器数量是否大于等于0x0001且小于等于0xFFFF;

第三判断子单元,适于当所述第二判断子单元判断所述寄存器数量大于等于0x0001且小于等于0xFFFF时,判断所述起始地址、所述起始地址与所述寄存器数量的十六进制数值之和是否满足预设要求。

9.根据权利要求8所述的MODBUS服务器,其特征在于,还包括:第一返回单元,适于当所述第一判断子单元判断所述功能码不是支持的功能码时,返回第一异常码。

10.根据权利要求8所述的MODBUS服务器,其特征在于,还包括:第二返回单元,适于当所述第二判断子单元判断所述寄存器数量不满足大于等于0x0001且小于等于0xFFFF时,返回第二异常码。

11.根据权利要求8所述的MODBUS服务器,其特征在于,还包括:第三返回单元,适于当第三判断子单元判断所述起始地址、所述起始地址与所述寄存器数量的十六进制数值之和不满足预设要求时,返回第三异常码。

12.根据权利要求8所述的MODBUS服务器,其特征在于,还包括:当所述处理单元处理所述请求帧相应的写寄存器请求失败时,返回第四异常码。

说明书 :

一种数据传输方法及MODBUS服务器

技术领域

[0001] 本发明涉及数据传输技术领域,特别是涉及一种数据传输方法及MODBUS服务器。

背景技术

[0002] MODBUS-TCP协议是用于管理和控制自动化设备的MODBUS系列通讯协议,它覆盖了使用TCP/IP协议的“内部网(Intranet)”和“互联网(Internet)”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLC、I/O模块,以及连接其它简单域总线或I/O模块的网关服务的。
[0003] 现有技术中,使用MODBUS-TCP协议传输数据,一次最多仅能传送240字节的数据。在需要大量数据交互的场合时,需要分批多次才能传输大量的数据,导致数据传输效率低下。

发明内容

[0004] 本发明实施例解决的是如何使用MODBUS-TCP协议提高数据传输的效率。
[0005] 为解决上述问题,本发明实施例提供了一种数据传输方法,所述方法包括:
[0006] MODBUS服务器接收客户端发送的写寄存器的请求帧,所述请求帧包括功能码、起始地址、寄存器数量和寄存器值信息,其中,所述功能码指示MODBUS服务器执行写寄存器的操作,所述起始地址为所述写操作对应的所述的MODBUS服务器的应用设备寄存器的起始地址,所述寄存器数量为所述写操作对应的寄存器个数,且寄存器数量大于等于0x0001并小于等于0xFFFF,所述寄存器值为写入相应的应用设备寄存器中的数值;
[0007] 解析所述请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息,且当所述功能码、起始地址、寄存器数量和寄存器值信息均满足预设要求时,所述MODBUS服务器处理所述请求帧相应的写寄存器请求;
[0008] 所述MODBUS服务器处理完所述请求帧相应的写寄存器请求时,向所述客户端发送应答帧。
[0009] 可选地,判断所述功能码、起始地址、寄存器数量和寄存器值信息是否满足预设要求,包括:
[0010] 判断所述功能码是否为支持的功能码;
[0011] 当判断所述功能码为支持的功能码时,判断所述寄存器数量是否大于等于0x0001且小于等于0xFFFF;
[0012] 当寄存器数量大于等于寄存器数量大于等于0x0001且小于等于0xFFFF时,判断所述起始地址、所述起始地址与所述寄存器数量之和是否满足预设要求。
[0013] 可选地,所述方法还包括:当判断所述功能码不是支持的功能码时,返回第一异常码。
[0014] 可选地,所述方法还包括:当判断所述寄存器数量不满足大于等于0x0001且小于等于0xFFFF时,返回第二异常码。
[0015] 可选地,所述方法还包括:当判断起始地址、所述起始地址与所述寄存器数量之和不满足预设要求时,返回第三异常码。
[0016] 可选地,所述方法还包括:当所述MODBUS服务器处理所述请求帧相应的写寄存器请求失败时,返回第四异常码。
[0017] 本发明实施例还提供了一种MODBUS服务器,包括:
[0018] 接收单元,适于接收客户端发送的写寄存器的请求帧,所述请求帧包括功能码、起始地址、寄存器数量和寄存器值信息,其中,所述功能码指示MODBUS服务器执行写寄存器的操作,所述起始地址为所述写操作对应的所述的MODBUS服务器中应用设备寄存器的起始地址,所述寄存器数量为所述写操作对应的寄存器个数,且所述寄存器数量大于等于0x0001并小于等于0xFFFF,所述寄存器值为写入相应的应用设备寄存器中的数值;
[0019] 解析单元,适于解析所述接收单元所接收的写寄存器请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息;
[0020] 判断单元,适于判断所述解析单元从所述请求帧中解析出来的所述功能码、所述起始地址、所述寄存器数量和所述寄存器值是否满足预设要求;
[0021] 处理单元,适于当所述判断单元判断所述功能码、所述起始地址、所述寄存器数量和所述寄存器值满足预设要求时,处理所述请求帧相应的写寄存器请求;
[0022] 应答单元,适于当所述处理单元处理完所述请求帧相应的写寄存器请求时,向所述客户端发送应答帧。
[0023] 可选地,所述判断单元包括:
[0024] 第一判断子单元,适于判断所述功能码是否为支持的功能码;
[0025] 第二判断子单元,适于当所述第一判断子单元判断所述功能码为支持的功能码时,判断所述寄存器数量是否大于等于0x0001且小于等于0xFFFF;
[0026] 第三判断子单元,适于当所述第二判断子单元判断所述寄存器数量大于等于0x0001且小于等于0xFFFF时,判断所述起始地址、所述起始地址与所述寄存器数量之和是否满足预设要求。
[0027] 可选地,所述服务器还包括:第一返回单元,适于当所述第一判断子单元判断所述功能码不是支持的功能码时,返回第一异常码。
[0028] 可选地,所述服务器还包括:第二返回单元,适于当所述第二判断子单元判断所述寄存器数量不满足大于等于0x0001且小于等于0xFFFF时,返回第二异常码。
[0029] 可选地,所述服务器还包括:第三返回单元,适于当第三判断子单元判断所述起始地址、所述起始地址与所述寄存器数量之和不满足预设要求时,返回第三异常码。
[0030] 可选地,所述服务器还包括:当所述处理单元处理所述请求帧相应的写寄存器请求失败时,返回第四异常码。
[0031] 与现有技术相比,本发明实施例的技术方案具有以下的优点:
[0032] 由于将写寄存器请求帧中数据字段的寄存器数量的范围设置为大于等于0x0001且小于等于0xFFFF,这样,一次性请求写入寄存器中的整型数据最多可以为65535个,因此,一次可以传输大量数据,故可以有效提高数据传输的效率、节约数据传输的时间。

附图说明

[0033] 图1是现有技术中MODBUS服务器响应客户端写多个寄存器操作请求的流程图;
[0034] 图2是本发明实施例中的一种数据传输方法的流程图;
[0035] 图3是本发明实施例中的另一种数据传输方法的流程图;
[0036] 图4是本发明实施例中的一种MODBUS服务器的结构示意图。

具体实施方式

[0037] 图1为现有技术中MODBUS服务器响应客户端写寄存器操作请求的流程图。如图1所示,MODBUS服务器响应客户端写寄存器操作请求的过程包括:
[0038] 步骤S11:MODBUS服务器接收客户端发送的写寄存器请求帧。
[0039] 其中,MODBUS服务器所接收的的写寄存器请求帧的部分信息如表1所示:
[0040]字段名称 数据长度 取值/预设范围
功能码 1字节 0x10
起始地址 2字节 0x0000-0xFFFF
寄存器数量 2字节 0x0001-0x0078
字节计数 1字节 2*N
寄存器值 N*2字节(N=寄存器数量) 具体数值
[0041] 表1
[0042] 在步骤S11之后,可以判断写寄存器请求帧中的数据是否满足预设要求,具体可以包括步骤S12a至S12c。
[0043] 步骤S12a:判断功能码是否为支持的功能码。
[0044] 步骤S12b:当判断功能码为支持的功能码时,判断写寄存器请求帧中的寄存器数量是否大于等于0x0001且小于等于0x0078,并判断字节计数是否等于寄存器数量的2倍。
[0045] 步骤S12c:当寄存器数量大于等于0x0001且小于等于0xFFFF,且字节计数等于寄存器数量的2倍时,判断起始地址、起始地址与寄存器数量之和是否均满足预设要求。
[0046] 当执行完毕步骤S12a至S12c,判断写寄存器请求帧中的数据满足预设要求时,可以接着执行步骤S13:MODBUS服务器处理写寄存器请求。
[0047] 接下来执行步骤S14:判断写寄存器操作是否成功。
[0048] 当判断写寄存器操作成功时,接着执行步骤S15:MODBUS服务器向客户端发送应答帧。
[0049] MODBUS服务器端发送的应答帧的部分信息如表2所示:
[0050]字段名称 数据长度 取值/预设范围
功能码 1字节 0x10
起始地址 2字节 0x0000-0xFFFF
寄存器数量 2字节 0x0001-0x007B
[0051] 表2
[0052] 由上述的分析可知,由于写寄存器请求帧中设置的寄存器数量须满足大于等于0x0001并小于等于0x0078,并设置了“字节计数”字段,以对“寄存器数量”字段的准确性进行校验。因此,客户端一次性向MODBUS服务器请求传输的数据最多仅为240(120*2)个字节的数据。在需要大量数据交互的场合时,这种数据传输方法会降低数据传输的效率。
[0053] 为解决上述问题,本发明实施例采用的技术方案通过改变写寄存器请求帧中设置的寄存器数量的范围,并同时在请求帧中取消了原有请求帧中设置的字节计数,可以确保所传输数据的可靠性,并且使得一次传送的数据量大幅增加,从而可以提高数据传输的效率。
[0054] 为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
[0055] 图2示出了本发明实施例中的一种数据传输方法的流程图。如图2所示的数据传输方法,包括:
[0056] 步骤S21:MODBUS服务器接收客户端发送的写寄存器请求帧。
[0057] 在本发明的实施例中,所述写寄存器请求帧可以包括功能码、起始地址、寄存器数量和寄存器值信息。其中,功能码指示MODBUS服务器执行写寄存器操作,起始地址为所述写操作对应的MODBUS服务器中应用设备寄存器的起始地址,所述寄存器数量为所述写操作对应的寄存器个数,且寄存器数量大于等于0x0001并小于等于0xFFFF,所述寄存器值为写入相应应用设备寄存器中的数值。
[0058] 步骤S22:解析所述请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息,且当所述功能码、起始地址、寄存器数量和寄存器值信息均满足预设要求时,所述MODBUS服务器处理所述请求帧相应的写寄存器请求。
[0059] 在本发明实施例中,MODBUS服务器可以解析所述请求帧,即可以读取所述写寄存器请求帧中各个字节中的数据。通过依次读取写寄存器请求帧中的数据,可以获取请求帧中的功能码、起始地址、寄存器数量和寄存器值信息。
[0060] 步骤S23:所述MODBUS服务器处理完所述请求帧相应的写寄存器请求时,向所述客户端发送应答帧。
[0061] 图3示出了本发明实施例中另一种数据传输方法的流程图。如图3所示的数据传输方法,具体可以包括:
[0062] 步骤S31:MODBUS服务器接收写寄存器请求帧。
[0063] 在读取请求帧中的数据后,MODBUS服务器可以对所读取的数据执行相应的判断,以确定功能码字段和数据字段中的起始地址字段、寄存器数量字段和寄存器值字段的信息是否均满足预设要求,具体可以包括:
[0064] 步骤S32a:判断功能码是否为支持的功能码。
[0065] 在具体实施中,写寄存器请求帧中的功能码字段的值可以根据实际的需要进行设置。例如,可以将功能码的值设置为0x01。
[0066] 在具体实施中,当判断功能码不是支持的功能码时,可以返回第一异常码01,并可以接着退出此次响应写寄存器请求的操作。
[0067] 步骤S32b:当功能码为支持的功能码时,判断寄存器数量是否大于等于0x0001且小于等于0xFFFF。
[0068] 在具体实施中,当判断功能码为0x01时,接着判断寄存器数量是否大于等于0x0001且小于等于0xFFFF。
[0069] 写寄存器请求帧中所设置的寄存器数量字段决定了一次性传输的数据量。在寄存器数量大于等于0x0001且小于等于0xFFFF时,一次性传输的数据量最多可以达到65535个整形数据。这样,便可以满足大批量数据传输的需求,因此可以提高数据传输的效率。
[0070] 另外,需要指出的是,在现有技术中,为了验证写寄存器请求帧中设置的存器数量的准确性,在请求帧的数据结构中还设置了1个字节的字节计数。但是,经研究发现,由于MODBUS-TCP协议本身是一种可靠的数据传输协议,其可以确保所传输数据的准确性。因此,在本发明的实施例中,写寄存器请求帧中取消设置1个字节的字节计数。这样做不但可以简化写寄存器请求帧的结构,且可以一次性传输大量数据,提高交互效率。
[0071] 在具体实施中,当判断寄存器数量不满足大于等于0x0001且小于等于0xFFFF时,可以返回第二异常码03,并可以接着执行退出此次响应写寄存器请求的操作。
[0072] 步骤S32c:当寄存器数量大于等于0x0001且小于等于0xFFFF时,判断起始地址、起始地址与寄存器数量之和是否满足预设要求。
[0073] 在具体实施中,当判断寄存器数量大于等于0x0001且小于0xFFFF时,接着便可以判断写寄存器请求帧中的起始地址、起始地址与寄存器数量之和是否满足预设要求。其中,起始地址为写寄存器操作对应的MODBUS服务器中的应用设备寄存器的开始地址,起始地址与寄存器数量之和则为写寄存器操作所对应的应用设备寄存器的结束地址。
[0074] 在具体实施中,当起始地址、起始地址与寄存器数量之和均不满足预设要求时,可以返回第三异常码02,并可以接着退出此次响应写寄存器请求的操作。
[0075] 当经过前述的步骤判断出写寄存器请求帧中的数据均满足预设要求时,接着便可以执行步骤S33:MODBUS服务器处理写寄存器请求,即MODBUS服务器将寄存器值对应的数据按照顺序写入从起始地址到结束地址(结束地址为起始地址与寄存器数量之和)的应用设备寄存器中,从而完成写寄存器操作。
[0076] 在具体实施中,MODBUS服务器处理所述写寄存器请求一般会出现两种结果:一种是执行写寄存器操作成功;另一种则是执行写寄存器操作失败。通过执行步骤S34:判断写寄存器操作是否成功,便可以得到MODBUS服务器处理所述写寄存器请求的操作结果。
[0077] 具体实施中,当MODBUS服务器执行所述写寄存器请求帧相应的写寄存器操作失败时,可以返回第四异常码04,并退出此次响应写寄存器请求的操作。
[0078] 当MODBUS服务器执行所述写寄存器请求帧相应的写寄存器操作成功时,可以接着按照顺序执行步骤S35:MODBUS服务器向客户端发送的应答帧。
[0079] 图4示出了本发明实施例中的一种MODBUS服务器的结构示意图。如图4所示的MODBUS服务器可以包括依次相连接的接收单元41、解析单元42、判断单元43、处理单元44和应答单元45。其中,
[0080] 接收单元41,适于接收客户端发送的写寄存器请求帧。其中,所述请求帧包括功能码、起始地址、寄存器数量和寄存器值信息。所述功能码用于指示MODBUS服务器执行写寄存器的操作,所述起始地址表明所述写操作对应的所述的MODBUS服务器中应用设备寄存器的起始地址,所述寄存器数量表明所述写操作对应的寄存器个数,且寄存器数量大于等于0x0001并小于等于0xFFFF,所述寄存器值为写入相应应用设备寄存器中的数值。
[0081] 解析单元42,适于解析接收单元41所接收的写寄存器的请求帧,获取所述请求帧中的功能码、起始地址、寄存器数量和寄存器值信息。
[0082] 判断单元43,适于判断解析单元42从所述请求帧中解析出来的所述功能码、所述起始地址、所述寄存器数量和所述寄存器值是否满足预设要求。
[0083] 处理单元44,适于当判断单元43判断所述功能码、所述起始地址、所述寄存器数量和所述寄存器值满足预设要求时,处理所述请求帧相应的写寄存器请求。
[0084] 应答单元45,适于所述当处理单元44处理完所述请求帧相应的写寄存器请求时,向所述客户端发送应答帧。
[0085] 在具体实施中,判断单元43可以包括:
[0086] 第一判断子单元43a,适于判断功能码是否为支持的功能码。
[0087] 第二判断子单元43b,适于当第一判断子单元43a判断所述功能码为支持的功能码时,判断寄存器数量是否大于等于0x0001且小于等于0xFFFF;
[0088] 第三判断子单元43c,适于当第二判断子单元43b判断寄存器数量大于等于0x0001且小于等于xFFFF时,判断起始地址、起始地址与寄存器数量之和是否在预设范围内。
[0089] 在具体实施中,所述MODBUS服务器还可以包括:第一返回单元46,适于当第一判断子单元43a判断所述功能码不是支持的功能码时,返回第一异常码。
[0090] 在具体实施中,所述MODBUS服务器还可以包括:第二返回单元47,适于当第二判断子单元43b判断当所述寄存器数量不满足大于等于0x0001且小于等于0xFFFF时,返回第二异常码。
[0091] 在具体实施中,所述MODBUS服务器还可以包括:第三返回单元48,适于当第三判断子单元33c判断起始地址、起始地址与寄存器数量之和不满足预设要求时,返回第三异常码。
[0092] 在具体实施中,所述MODBUS服务器还可以包括:第四返回单元49,适于当所述处理单元44处理所述请求帧相应的写寄存器请求失败时,返回第四异常码。
[0093] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
[0094] 以上对本发明实施例的方法及系统做了详细的介绍,本发明并不限于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。