实现工控设备间OPC通信的方法与流程

文档序号:11206633阅读:1634来源:国知局
实现工控设备间OPC通信的方法与流程

本发明涉及工业安全技术领域,尤其涉及一种实现工控设备间opc通信的方法。



背景技术:

opc协议(oleforprocesscontrol)是基于微软的ole/com机制在应用层协议dce/rpc(distributedcomputingenvironment/remoteprocedurecalls)之上传输数据的通讯标准,以c/s(客户端和服务器)架构实现,主要用于工业生产过程中的数据采集和逻辑控制。工业环境中各种设备种类繁多,各大厂商的设备和软件之间需要一种通用的数据交换方式,opc协议定义了一套标准的接口和方法,各大设备和软件厂商也都基于微软的ole/com技术提供了对opc协议的支持。

但是,随着全球化发展的进一步加快,工业发展的过程中,工业现场使用的设备和软件来自于世界各个国家,这其中极有可能出现通过设备或软件来窃取国家工业生产信息的行为,所以在一些关键的、关系国家安全的工业领域,会禁止使用某些软件或系统,例如,国家的某些电力生产系统中就禁止使用windows系统。工业生产中需要采集各种设备的数据信息进行集中展现,例如,公司的erp(enterpriseresourceplanning)系统要集中展现生产环境的数据,这种情况就需要erp系统对各种设备进行直接的数据访问,如果需要对仅支持opc协议的设备进行数据通讯,就要erp系统所部署的操作系统支持opc协议,就目前而言只有微软的windows操作系统支持了opc协议,linux操作系统不支持opc协议。因此,对于不允许使用windows系统或仅使用了linux操作系统的环境中,无法与支持opc协议的设备进行数据通讯,限制了设备的使用。



技术实现要素:

本发明实施例提供一种实现工控设备间opc通信的方法,用于至少解决上述技术问题之一。

第一方面,本发明实施例提供一种实现工控设备间opc通信的方法,所述工控设备包括服务端工控设备和客户端工控设备,所述工控设备搭载有不兼容opc协议的操作系统,所述方法包括:

服务端工控设备根据通过135端口接收到自客户端工控设备的连接请求时,建立与所述客户端工控设备之间的第一通信连接;

当所述服务端工控设备通过所述第一通信连接接收自所述客户端工控设备的dce/rpc数据包不属于第一预设数据包时,生成响应数据并反馈至所述服务端工控设备。

第二方面,本发明实施例提供一种计算机可读存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项实现工控设备间opc通信的方法。

第四方面,提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明上述任一项实现工控设备间opc通信的方法。

第五方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任一项实现工控设备间opc通信的方法。

本发明实施例中,实现了服务端工控设备与客户端工控设备之间的opc通信。从而通过采用本发明实施例的方法避免了某些特殊领域采用windows系统而可能存在的安全隐患,同时还能够保证与支持opc协议的设备之间的兼容性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的实现工控设备间opc通信的方法一实施方式的流程图;

图2为本发明的实现工控设备间opc通信的方法的另一实施方式的流程图;

图3为本发明的实现工控设备间opc通信的方法的又一实施方式的流程图;

图4为本发明的实现工控设备间opc通信的方法的又一实施方式的流程图;

图5为本发明的实现工控设备间opc通信的方法的又一实施方式的流程图;

图6为本发明的实现工控设备间opc通信的方法的又一实施方式的流程图;

图7为本发明实施例中的数据存储解析模型的结构示意图;

图8为本发明的电子设备的一实施例的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

在本发明中,运行于服务器上的应用程序或脚本程序、服务器都可以是元件。一个或多个元件可在执行的过程和/或线程中,并且元件可以在一台计算机上本地化和/或分布在两台或多台计算机之间,并可以由各种计算机可读介质运行。元件还可以根据具有一个或多个数据包的信号,例如,来自一个与本地系统、分布式系统中另一元件交互的,和/或在因特网的网络通过信号与其它系统交互的数据的信号通过本地和/或远程过程来进行通信。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

如图1所示,本发明的一实施例的实现工控设备间opc通信的方法,所述工控设备搭载有不兼容opc协议的操作系统,所述工控设备包括服务端工控设备和客户端工控设备,所述方法包括:

s11、服务端工控设备根据通过135端口接收到自客户端工控设备的连接请求时,建立与所述客户端工控设备之间的第一通信连接;

s12、当所述服务端工控设备通过所述第一通信连接接收自所述客户端工控设备的dce/rpc数据包不属于第一预设数据包时,生成响应数据并反馈至所述服务端工控设备。

本发明实施例中,本实施例中的工控系统所搭载的操作系统可以是linux操作系统或者是unix操作系统。实现了服务端工控设备与客户端工控设备之间的通信。从而通过采用本发明实施例的方法避免了某些特殊领域采用windows系统而可能存在的安全隐患,同时还能够保证与支持opc协议的设备之间的兼容性。执行本发明上述实施例的执行主体可以为工控设备,并且所述工控设备可以是单个设备也可以是设备群组。

如图2所示,在本发明实现工控设备间opc通信的方法的一些实施例中,还包括:

s21、当接收的所述dce/rpc数据包属于所述第一预设数据包时,获取服务端动态端口;

s22、所述服务端工控设备基于所述服务端动态端口创建tcp服务,并将所述服务端动态端口号发送至所述客户端工控设备;

s23、当所述服务端工控设备接收到自所述客户端工控设备发送的与所述服务端动态端口建立连接的tcp连接请求时,建立与所述客户端工控设备之间的第二通信连接;

s24、所述服务端工控设备通过所述第二通信连接接收自所述客户端工控设备的opc通讯数据包;

s25、当接收的所述opc通讯数据包不属于第二预设数据包时,解析所述opc数据包,并向所述客户端工控设备返回响应数据。

如图3所示,在本发明实现工控设备间opc通信的方法的一些实施例中,还包括:

s31、当接收的所述opc通讯数据包属于所述第二预设数据包时,所述服务端工控设备通过所述客户端工控设备的135端口,建立与所述客户端工控设备之间的第三通信连接;

s32、所述服务端工控设备通过所述第三通信连接向所述客户端工控设备发送dce/rpc数据包;

s33、所述服务端工控设备接收自所述客户端工控设备针对所述dce/rpc数据包的响应数据包;

s34、当所述响应数据包包含客户端动态端口信息时,所述服务端工控设备基于所述客户端动态端口信息建立与所述客户端工控设备之间的第四通信连接;

s35、所述服务端工控设备通过所述第四通信连接向所述客户端工控设备发送opc通讯数据包。

在本发明实现工控设备间opc通信的方法的一些实施例中,还包括:当所述服务端工控设备与所述客户端工控设备之间的通信结束之后,断开所述第一通信连接至第四通信连接,以释放所述服务端工控设备的135端口、所述客户端工控设备的135端口、所述服务端动态端口和所述客户端动态端口。

如图4所示,在一些实施例中,在所述生成响应数据并反馈至所述服务端工控设备之前还包括:

s41、当通过所述dce/rpc数据包属于bind类型时,确定所述bind类型的数据包所对应的接口的bind全局唯一标识符;

s42、查询预先建立的接口管理字典,以确定是否包括所述bind全局唯一标识符;

s43、如果是,则组bind_ack包以生成响应报文,并在所述响应报文的是否支持接口字段填是;

s44、如果否,则组bind_ack包以生成响应报文,并在所述响应报文的是否支持接口字段填否。

本实施例中实现了对bind类型数据包的响应,能够在判定接收到的数据包为bind类型时根据获取的bind类型数据包的全局唯一标识符,并通过查询预先建立的接口管理字典来确定是否支持opc设备所发送的bind类型的数据包的请求,如果是则组包为bind_ack包,并在数据包的是否支持字段填写“是”,如果否则组包为bind_ack包,并在数据包的是否支持字段填写“否”。

本实施例中的,接口管理字典存储接口信息,所述接口信息至少包括:接口的全局唯一标识符值、接口的类型、接口的引用计数、全局唯一标识符常量标志、接口对应opc版本、接口是否支持标志、关联的对象标识符、拥有者的全局唯一标识符、拥有者的全局唯一标识符类型、关联的全局唯一标识符和关联的全局唯一标识符类型中的一种或者多种。

接口管理字典是全局唯一的单根类,在提供opc客户端和opc服务器中都有且仅有一个,用于存储全部的以全局唯一标识符guid(globallyuniqueidentifier)为区分标志的接口信息。opc协议通过一系列接口提供服务,接口通过128位的全局唯一标识符guid进行区分,是一种由算法生成的二进制长度为128位的数字标识符,在以dce/rpc协议为基础的opc协议中,ipid、uuid同guid都是同样的数据、仅是语言表达定义不同。

为了识别和存储接口信息,建立一个接口管理字典,接口管理字典中用一个map结构(在该数据结构中,key唯一不重复)存储接口信息,每一个接口信息包括:接口的guid值、接口的类型、接口的引用计数、guid常量标志、接口对应opc版本、接口是否支持标志、关联的oid、关联的oxid、拥有者的guid、拥有者的guid类型、关联的guid、关联的guid类型。

接口管理字典的功能包括:

存储dce/rpc及opcda规范中定义的,涉及opc协议通讯接口的guid值,以便在进行opc协议通讯过程中识别接口类型。例如,在收到bind类型数据帧的时候,根据数据帧中abstractsyntax结构的guid,去接口管理字典中查询接口类型,确定该接口的支持状态。

记录在程序运行过程中动态生成的接口信息。例如,iremunknown2接口会在opc协议通讯的过程中被用来申请和释放接口。iremunknown2接口的remqueryinterface方法用来申请接口,调用此方法时,需向接口管理字典中添加一个ipid对应的接口信息。iremunknown2接口的remrelease方法用来释放接口,当调用此方法时,需要从本字典中删除报文中要删除ipid对应的接口信息。

在request数据帧的packetflags的object位为1的情况下,根据数据中objectuuid字段在接口管理字典中查询对应的接口类型,为处理opc数据确定接口信息。

如图5所示,在一些实施例中,在所述生成响应数据并反馈至所述服务端工控设备之前还包括:

s51、当通过所述dce/rpc数据包属于alter类型时,确定所述alter类型的数据包所对应的接口的alter全局唯一标识符;

s52、查询预先建立的接口管理字典,以确定是否包括所述alter全局唯一标识符;

s53、如果是,则组alter_ack包以生成响应报文,并在所述响应报文的是否支持接口字段填是;

s54、如果否,则组alter_ack包以生成响应报文,并在所述响应报文的是否支持接口字段填否。

本实施例中实现了对alter类型数据包的响应,能够在判定接收到的数据包为alter类型时根据获取的alter类型数据包的全局唯一标识符,并通过查询预先建立的接口管理字典来确定是否支持opc设备所发送的alter类型的数据包的请求,如果是则组包为alter_ack包,并在数据包的是否支持字段填写“是”,如果否则组包为alter_ack包,并在数据包的是否支持字段填写“否”。

如图6所示,在一些实施例中,在所述生成响应数据并反馈至所述服务端工控设备之前还包括:

s61、当所述dce/rpc数据包属于request类型时,解析所述dce/rpc数据包的标志位信息以确定所述标志位信息的最高位是否为1;

s62、当确定所述标志位信息的最高位为1时,确定所述dce/rpc数据包的报文头所包含的全局唯一标识符;

s63、查询预先建立的接口管理字典以确定对应于所述全局唯一标识符的接口类型;

s64、根据确定的所述接口类型所对应的方法类型处理所述数据包所包含的数据部分以生成响应报文。

本实施例中,当接收到的数据包为request类型时,进一步判断该数据包是否对应于isystemactivator接口的remotecreateinstance方法(当服务器访问客户端时,数据包对应于ioxidresolver接口的resolveoxid2方法),如果是,则获取动态端口。

在一些实施例中,实现工控设备间opc通信的方法还包括:在所述服务端工控设备与所述客户端工控设备之间通信之前建立数据存储解析模型,所述数据存储解析模型包括第一级存储解析模型(standardopcserver)、第二级存储解析模型(standardopcgroup)和第三级存储解析模型(standardopcitem)。

如图7所示为数据存储解析模型的结构示意图。

所述第一级存储解析模型存储有opc协议处理的相关接口对象,以及对所述第二级存储解析模型的增加、删除、修改、查询的方法;

所述第二级存储解析模型存储有opc协议处理的相关接口对象,以及对所述第三级存储解析模型的增加、删除、修改、查询的方法;

所述第三级存储解析模型为opc协议中读写数据的最小单位。

在本实施例中第二级存储解析模型(standardopcgroup)拥有的属性主要包括:字符串名称、激活标致、客户端定义的最快的刷新频率(单位为毫秒)、客户端句柄、服务端句柄、死区参数、语言标记、时区数据。

standardopcitem作为opc协议读写数据的最小单位,拥有的属性为:字符串名称、值、时间戳、数据类型、数据质量、激活标志、客户端句柄、服务端句柄、访问权限、字符串id。

根据opc协议通讯,在对象standardopcserver、standardopcgroup中分别创建相关接口的同名接口对象,为数据解析使用,这些接口对象在opcda中给予了接口、输入参数、输出参数定义说明。在非windows系统环境下,根据报文一问一答的形式(客户端和服务端通讯的一般形式),分别实现了他们的方法,一个方法对应四个函数。例如,iopcserver的addgroup方法,为了提供客户端的功能,build+方法+request的函数为组织请求报文的函数,process+方法名+response为解析收到响应数据的函数。为了提供服务端的功能,process+方法+request的函数为解析请求报文的函数,build+方法名+response为根据请求生成响应数据的函数。

在一些实施例中,所述opc服务器中包括地址空间对象模型,所述地址空间对象模型包括层次化地址空间模型和扁平化地址空间模型。

opc服务器中存储有一个standardopcitem(简称item)列表,该item列表包含服务器的全部item,服务器需要构造一个地址空间,以支持客户端通过标准的iopcbrowseserveraddressspace接口进行浏览查询所有的item。

地址空间的构建可以分为两种类型:层次化地址空间和扁平化地址空间。地址空间对象模型结构主要实现了把item的字符串id(例如,a.b.c、peoplecount)和item数据类型(opc传输支持的一些数据类型)添加到地址空间对象模型中,地址空间对象模型中包含一个map和一个list存储结构(map中存储key-value键值对,key不允许重复;list中为value序列化数据,可重复)。map中的key为字符串,元素为子地址空间对象模型的指针,主要用在构建层次化地址空间。list结构在两种地址空间模型中都要使用。

层次化地址空间构造的原型是树,整个地址空间为一颗倒着的树,每一个item的字符串id,为一个包含或不包含“.”的字符串,如果字符串不包含“.”,则该item信息作为根的叶子,否则,该字符串中包含树干。例如,item的字符串id为a.b,则a为根上的树干,b为a树干上的叶子。树干是以一个子地址空间的形式展现的,可以再包含树干或叶子,但是一个树干不能既没有树干也没有叶子。因此,利用循环递归的概念,当item的字符串id包含“.”,以“.”作为分隔符,以第一个“.”前的字符串为key,创建子地址空间对象模型,添加到上一级地址空间对象模型的map中,并将“.”后的子字符串作为输入,由刚才创建的子地址空间模型对象调用,重复检测剩下的字符串中是否包含点,如果包含点,重复上述的流程,如果不包含点,创建子字符串和数据类型组成的iteminfostruct,并添加到该地址空间对象模型的list列表中。

扁平化地址空间,直接将item的id作为key,和item的数据类型一起组成iteminfostruct,并添加到根地址空间对象模型的list列表中。

在一些实施例中,实现工控设备间opc通信的方法还包括:

在所述服务端工控设备与所述客户端工控设备之间通信过程中,客户端工控设备按照预设周期ping所述请求端;

当所述客户端工控设备连续三次未接收到所述服务端工控设备对ping消息的响应时,释放所述客户端工控设备与所述服务端工控设备之间的连接所占用的资源。

本实施例中,opc通讯时,服务端工控设备和客户端工控设备必须周期性地“ping”对方,以便保证客户与对象一直处于连接状态,达到心跳的效果。根据ping机制和ping集合的概念,ping处理器创建对应的ping处理线程,通过ioxidresolver接口的complexping和simpleping方法,进行连接状态的监测。根据ioxidresolver接口的complexping进行ping集合的创建(oid添加)和删除(oid删除),simpleping方法根据complexping添加返回的ping集合的id,进行每2分钟一次的数据通讯心跳检测工作(发送ping报文,解析响应报文),如果连续3次ping不成功(不能连接、ping没有响应或ping的返回结果错误),则释放相关连接上的资源,包括释放standardopcserver、standardopcgroup、standardopcitem模型,删除结构管理字典中相关接口信息,及停止相关数据通讯和ping线程。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作合并,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

另一方面,本发明实施例提供一种计算机可读存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行上述方法实施例中的相关步骤,例如:

服务端工控设备根据通过135端口接收到自客户端工控设备的连接请求时,建立与所述客户端工控设备之间的第一通信连接;

当所述服务端工控设备通过所述第一通信连接接收自所述客户端工控设备的dce/rpc数据包不属于第一预设数据包时,生成响应数据并反馈至所述服务端工控设备。

另一方面,本发明实施例还公开一种电子设备,其包括:

至少一个处理器,以及

与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行:

服务端工控设备根据通过135端口接收到自客户端工控设备的连接请求时,建立与所述客户端工控设备之间的第一通信连接;

当所述服务端工控设备通过所述第一通信连接接收自所述客户端工控设备的dce/rpc数据包不属于第一预设数据包时,生成响应数据并反馈至所述服务端工控设备。

图8是本申请另一实施例提供的执行实现工控设备间opc通信的方法的电子设备的硬件结构示意图,如图8所示,该设备包括:

一个或多个处理器810以及存储器820,图8中以一个处理器810为例。

执行实现工控设备间opc通信的方法的设备还可以包括:输入装置830和输出装置840。

处理器810、存储器820、输入装置830和输出装置840可以通过总线或者其他方式连接,图8中以通过总线连接为例。

存储器820作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的实现工控设备间opc通信的方法对应的程序指令/模块。处理器810通过运行存储在存储器820中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例实现工控设备间opc通信的方法。

存储器820可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据实现工控设备间opc通信的装置的使用所创建的数据等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器820可选包括相对于处理器810远程设置的存储器,这些远程存储器可以通过网络连接至实现工控设备间opc通信的装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置830可接收输入的数字或字符信息,以及产生与实现工控设备间opc通信的装置的用户设置以及功能控制有关的信号。输出装置840可包括显示屏等显示设备。

所述一个或者多个模块存储在所述存储器820中,当被所述一个或者多个处理器810执行时,执行上述任意方法实施例中的实现工控设备间opc通信的方法。

上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

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