本发明涉及网络通信技术领域,具体而言,涉及一种兼容modbus协议的bacnet协议栈的数据处理方法及系统。
背景技术:
modbus是osi模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。串行链路modbus通常使用主从技术,即仅一设备(主设备)能初始化传输(查询或控制)。
目前,bacnetip是开放的楼宇设备自动控制网络数据通信协议。随着internet在通信领域的发展,控制网络与internet的互联已是必然趋势。但现有技术中还未能将这两种协议进行相互自由转换,使得控制网络与internet的互联存在通信障碍。
技术实现要素:
本发明实施例提供了一种兼容modbus协议的bacnet协议栈的数据处理方法及系统,能够使得modbus协议和bacnet协议进行自由转换。
为实现上述目的,本发明实施例一方面提供一种兼容modbus协议的bacnet协议栈的数据处理方法,所述方法包括:上位机对bacnet协议栈进行读写属性操作时,向互联网上发送一帧udp数据帧;所述bacnet协议栈接收所述udp数据帧后,将所述udp数据帧中的对象id解析为modbus数据帧中的设备地址和起始地址,并将所述udp数据帧中的当前值解析为所述modbus数据帧中的数据长度和有效数据;所述bacnet协议栈将解析后的信息发送至modbus库;所述modbus库以modbus数据帧的格式将解析后的信息发送至各个机组处。
进一步地,所述udp数据帧中的对象id包括参数偏移和设备偏移;相应地,将所述udp数据帧中的对象id解析为modbus数据帧中的设备地址和起始地址包括:
将所述对象id中的参数偏移赋值给所述modbus数据帧中的起始地址,并将所述对象id中的设备偏移赋值给所述modbus数据帧中的设备地址。
进一步地,将所述udp数据帧中的当前值解析为所述modbus数据帧中的数据长度和有效数据包括:
将所述udp数据帧中的当前值作为所述modbus数据帧中的有效数据,并将所述udp数据帧中的当前值所处数据的长度作为所述modbus数据帧中的数据长度。
进一步地,所述modbus库以modbus数据帧的格式将解析后的信息发送至各个机组处包括:所述modbus库以modbus数据帧的格式将解析后的信息发送至485总线上,以使得机组通过所述485总线接收并解析modbus数据帧中携带的信息;相应地,所述方法还包括:所述机组将所述上位机请求的信息以modbus数据帧的格式发送到485总线;所述modbus库通过所述485总线接收所述modbus数据帧,基于所述modbus数据帧中的设备地址和起始地址,解析得到udp数据帧的对象id,并根据所述modbus数据帧中的数据长度和有效数据解析得到udp数据帧中的当前值;所述modbus库将解析得到的信息传给bacnet协议栈,以使得所述bacnet协议栈将所述解析得到的信息以udp数据帧的格式发送到互联网上;所述上位机通过网络设备从互联网中获取所述udp数据帧。
进一步地,基于所述modbus数据帧中的设备地址和起始地址,解析得到udp数据帧的对象id包括:
将所述modbus数据帧中的设备地址赋值给所述对象id中的设备偏移,并将所述modbus数据帧中的起始地址赋值给所述对象id中的参数偏移;其中,所述对象id中的设备类型、机型系列以及对象类型由使用modbus协议的机组的机型预先约定。
进一步地,根据所述modbus数据帧中的数据长度和有效数据解析得到udp数据帧中的当前值包括:
根据所述起始地址和数据长度,确定预设参数在有效数据中的目标地址;
将所述目标地址处的数据值赋值给所述udp数据帧中的当前值。
本申请还提供一种兼容modbus协议的bacnet协议栈的数据处理系统,所述系统包括上位机、bacnet协议栈、modbus库以及机组,其中:所述上位机,用于对所述bacnet协议栈进行读写属性操作时,向互联网上发送一帧udp数据帧;所述bacnet协议栈,用于接收所述udp数据帧后,将所述udp数据帧中的对象id解析为modbus数据帧中的设备地址和起始地址,并将所述udp数据帧中的当前值解析为所述modbus数据帧中的数据长度和有效数据;将解析后的信息发送至所述modbus库;所述modbus库,用于以modbus数据帧的格式将解析后的信息发送至各个机组处。
进一步地,所述udp数据帧中的对象id包括参数偏移和设备偏移;相应地,所述bacnet协议栈包括:
id转换单元,用于将所述对象id中的参数偏移赋值给所述modbus数据帧中的起始地址,并将所述对象id中的设备偏移赋值给所述modbus数据帧中的设备地址。
进一步地,所述bacnet协议栈还包括:
数据转换单元,用于将所述udp数据帧中的当前值作为所述modbus数据帧中的有效数据,并将所述udp数据帧中的当前值所处数据的长度作为所述modbus数据帧中的数据长度。
进一步地,所述modbus库以modbus数据帧的格式将解析后的信息发送至485总线上,以使得机组通过所述485总线接收并解析modbus数据帧中携带的信息;相应地,所述机组还用于将所述上位机请求的信息以modbus数据帧的格式发送到485总线;所述modbus库还用于通过所述485总线接收所述modbus数据帧,基于所述modbus数据帧中的设备地址和起始地址,解析得到udp数据帧的对象id,并根据所述modbus数据帧中的数据长度和有效数据解析得到udp数据帧中的当前值;将解析得到的信息传给bacnet协议栈,以使得所述bacnet协议栈将所述解析得到的信息以udp数据帧的格式发送到互联网上;所述上位机还用于通过网络设备从互联网中获取所述udp数据帧。
由上可见,本申请通过bacnet协议栈对互联网中的udp数据帧进行解析,可以将udp数据帧中的对象id和当前值分别解析为modbus数据帧中的设备地址、起始地址、数据长度和有效数据,从而能够将bacnet数据帧转换为modbus数据帧,从而使得机组能够解析出上位机发出的信息。此外,通过modbus库对modbus数据帧进行解析,可以将modbus数据帧转换为bacnet数据帧,从而可以实现这两种协议之间的自由转换,消除了控制网络与internet的互联之间存在的通信障碍。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本申请中mobus协议与bacnet协议之间的转换架构图;
图2为本申请中数据转换的示意图;
图3为本申请中id转换的示意图;
图4为本申请中数据转换的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都应当属于本申请保护的范围。
本申请提供一种兼容modbus协议的bacnet协议栈的数据处理方法,所述方法包括:
s1:上位机对bacnet协议栈进行读写属性操作时,向互联网上发送一帧udp数据帧;
s2:所述bacnet协议栈接收所述udp数据帧后,将所述udp数据帧中的对象id解析为modbus数据帧中的设备地址和起始地址,并将所述udp数据帧中的当前值解析为所述modbus数据帧中的数据长度和有效数据;
s3:所述bacnet协议栈将解析后的信息发送至modbus库;
s4:所述modbus库以modbus数据帧的格式将解析后的信息发送至各个机组处。
其中,所述modbus协议是由modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。所述bacnet协议(楼宇自动控制网络数据通讯协议,adatacommunicationprotocolforbuildingautomationandcontrolnetworks)是由美国暖通、空调和制冷工程师协会组织的标准项目委员会135p历经八年半时间开发的。
在本实施方式中,所述udp(userdatagramprotocol,用户数据报协议)数据帧中的对象id包括参数偏移和设备偏移;相应地,将所述udp数据帧中的对象id解析为modbus数据帧中的设备地址和起始地址包括:
将所述对象id中的参数偏移赋值给所述modbus数据帧中的起始地址,并将所述对象id中的设备偏移赋值给所述modbus数据帧中的设备地址。
在本实施方式中,将所述udp数据帧中的当前值解析为所述modbus数据帧中的数据长度和有效数据包括:
将所述udp数据帧中的当前值作为所述modbus数据帧中的有效数据,并将所述udp数据帧中的当前值所处数据的长度作为所述modbus数据帧中的数据长度。
在本实施方式中,所述modbus库以modbus数据帧的格式将解析后的信息发送至各个机组处包括:所述modbus库以modbus数据帧的格式将解析后的信息发送至485总线上,以使得机组通过所述485总线接收并解析modbus数据帧中携带的信息;相应地,所述方法还包括:所述机组将所述上位机请求的信息以modbus数据帧的格式发送到485总线;所述modbus库通过所述485总线接收所述modbus数据帧,基于所述modbus数据帧中的设备地址和起始地址,解析得到udp数据帧的对象id,并根据所述modbus数据帧中的数据长度和有效数据解析得到udp数据帧中的当前值;所述modbus库将解析得到的信息传给bacnet协议栈,以使得所述bacnet协议栈将所述解析得到的信息以udp数据帧的格式发送到互联网上;所述上位机通过网络设备从互联网中获取所述udp数据帧。
在本实施方式中,基于所述modbus数据帧中的设备地址和起始地址,解析得到udp数据帧的对象id包括:
将所述modbus数据帧中的设备地址赋值给所述对象id中的设备偏移,并将所述modbus数据帧中的起始地址赋值给所述对象id中的参数偏移;其中,所述对象id中的设备类型、机型系列以及对象类型由使用modbus协议的机组的机型预先约定。
在本实施方式中,根据所述modbus数据帧中的数据长度和有效数据解析得到udp数据帧中的当前值包括:
根据所述起始地址和数据长度,确定预设参数在有效数据中的目标地址;
将所述目标地址处的数据值赋值给所述udp数据帧中的当前值。
具体地,modbus协议数据请求帧主要由设备地址、功能码、起始地址、数据长度和crc校验五部分组成,其中设备地址和起始地址主要用来标示参数地址,定位参数数据位置,功能码用于识别数据功能类型,数据长度指此次所要读取的数据长度。
modbus协议数据响应帧主要由设备地址、功能码、字节个数、有效数据和crc校验五部分组成,其中设备地址也是用来标示参数地址,定位参数数据,功能码用于识别数据功能类型,字节个数指有效数据的字节数,有效数据就是所读取的参数数据。
bacnet对象主要由对象id(objectid)、当前值(presentvalue)、对象名称(objectname)等内容组成,其中presentvalue包含模拟数据、开关量、多态数据等多种数据类型得数据值,objectname由字符串组成,对象id由32bits组成,可以分成参数偏移、设备偏移、设备类型、机型系列、对象类型五段。
请参阅图1至图4,上位机对bacnet协议栈进行读写属性操作,向互联网上发送一帧udp数据帧,当bacnet协议栈通过各种网络设备接收到这一帧udp数据后进行解析,通过数据转换逻辑处理算法将相关信息传给modbus库,modbus库以modbus帧格式发送到485总线上,机组接收485总线数据,解析出相应的信息。
机组将上位机想要的信息以modbus帧格式发送到485总线,modbus库解析机组发送上来的modbus帧,通过数据转换逻辑处理算法将相关信息传给bacnet协议栈,bacnet协议栈又将相关信息以udp格式发送到互联网,udp数据通过各种网络设备传回到上位机。
在本实施方式中,在进行id转换时,modbus帧中的设备地址和起始地址是用来标示参数地址,定位参数数据位置的,因此就得到了有效数据的机组编号和参数编号,而bacnet对象id的参数偏移和设备偏移两段正好也是标示参数地址,定位参数数据位置的,故而,直接将modbus帧中的设备地址和起始地址赋给bacnet对象id的参数偏移和设备偏移。
在本实施方式中,bacnet对象id的其他三段设备类型、机型系列、对象类型是针对使用modbus协议的机组机型提前约定好的,因此参数偏移、设备偏移、设备类型、机型系列、对象类型五段组成bacnet对象id值。
在本实施方式中,在进行数据转换时,通过id转换算法得到了有效数据的起始位置,根据数据长度和参数偏移值即可定位某个参数在有效数据中的地址。将此地址中的数据值赋给presentvalue即可。
在本实施方式中,通过bacnet协议配置modbus参数实施方案如下:
1、初始化以太网口,为上位机提供bacnet数据写入接口;
2、上位机通过bacnetip协议写入modbus配置参数(包含但不限于标准帧、波特率、采样点、极性等modbus参数);
3、程序内部收到配置信息后,初始化485硬件接口;
4、控制器初始化完毕,通过485接口接收或等待bacnetip数据指令;
在本实施方式中,通过bacnet协议写入modbus数据实施方案如下:
1、上位机通过bacnetip协议写入id的数据(presentvalue、objectname、其它属性);
2、程序保存对象id的objectname;
3、程序得到bacnetid,通过id转换算法解析得到modbus设备地址和起始地址;
4、程序得到presentvalue,通过数据转换算法解析得到modbus有效数据;
5、程序拼接modbus设备地址、起始地址和data得到需要发送的modbus数据报文;
6、程序将modbus报文发送到485总线上;
在本实施方式中,通过bacnet协议读取485数据实施方案如下:
1、通过上述初始化后,485接口电路接收485总线数据(设备地址、起始地址和data);
2、程序通过id转换算法解析modbus设备地址和起始地址得到objectid;
3、程序通过数据转换算法解析modbusdata得到presentvalue;
4、程序建立objectid、presentvalue、objectname及其它属性关系,得到一个bacnet对象;
5、程序通过下发的bacnetip查询数据包得到id值;
6、程序通过得到的id值返回需要查询的数据。如:presentvalue、objectname及其它属性。
本申请还提供一种兼容modbus协议的bacnet协议栈的数据处理系统,所述系统包括上位机、bacnet协议栈、modbus库以及机组,其中:
所述上位机,用于对所述bacnet协议栈进行读写属性操作时,向互联网上发送一帧udp数据帧;
所述bacnet协议栈,用于接收所述udp数据帧后,将所述udp数据帧中的对象id解析为modbus数据帧中的设备地址和起始地址,并将所述udp数据帧中的当前值解析为所述modbus数据帧中的数据长度和有效数据;将解析后的信息发送至所述modbus库;
所述modbus库,用于以modbus数据帧的格式将解析后的信息发送至各个机组处。
在本实施方式中,所述udp数据帧中的对象id包括参数偏移和设备偏移;相应地,所述bacnet协议栈包括:
id转换单元,用于将所述对象id中的参数偏移赋值给所述modbus数据帧中的起始地址,并将所述对象id中的设备偏移赋值给所述modbus数据帧中的设备地址。
在本实施方式中,所述bacnet协议栈还包括:
数据转换单元,用于将所述udp数据帧中的当前值作为所述modbus数据帧中的有效数据,并将所述udp数据帧中的当前值所处数据的长度作为所述modbus数据帧中的数据长度。
在本实施方式中,所述modbus库以modbus数据帧的格式将解析后的信息发送至485总线上,以使得机组通过所述485总线接收并解析modbus数据帧中携带的信息;相应地,所述机组还用于将所述上位机请求的信息以modbus数据帧的格式发送到485总线;所述modbus库还用于通过所述485总线接收所述modbus数据帧,基于所述modbus数据帧中的设备地址和起始地址,解析得到udp数据帧的对象id,并根据所述modbus数据帧中的数据长度和有效数据解析得到udp数据帧中的当前值;将解析得到的信息传给bacnet协议栈,以使得所述bacnet协议栈将所述解析得到的信息以udp数据帧的格式发送到互联网上;所述上位机还用于通过网络设备从互联网中获取所述udp数据帧。
由上可见,本申请通过bacnet协议栈对互联网中的udp数据帧进行解析,可以将udp数据帧中的对象id和当前值分别解析为modbus数据帧中的设备地址、起始地址、数据长度和有效数据,从而能够将bacnet数据帧转换为modbus数据帧,从而使得机组能够解析出上位机发出的信息。此外,通过modbus库对modbus数据帧进行解析,可以将modbus数据帧转换为bacnet数据帧,从而可以实现这两种协议之间的自由转换,消除了控制网络与internet的互联之间存在的通信障碍。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。