基于Modbus的OPC服务器设计及其在组态软件中的应用
摘要:本文主要在介绍Modbus协议规范和OPC服务器工作原理以及组成框架的基础上,进行服务器设计,通过设计,将服务器应用到DSC组态软件中,具有一定的现实意义。
关键词:Modbus;OPC;组态
中图分类号:TP393.09 文献标识码:A 文章编号:1007-9599 (2012) 18-0000-02
1 Modbus总线规范
目前,Modbus协议规范主要应用在自动控制领域,目的是实现工业生产中控制器之间的数据通信。同时,还能够通过网络协议实现控制器和其他硬件设备的通信,因此,通过该协议能够让不同厂家的设备构成控制网络,进行集中监控。因此,Modbus协议已经成为了一种通用工业标准。Modbus协议在控制过程中,已经定义了控制器能够识别了消息结构,所以,当控制器发出控制指令后,接收设备就能够回应指令请求,同时侦测指令是否正确,这样,就能够实现不同网络之间的控制。
Modbus协议在通信过程中,在总线上只能有一台主设备,每次通信指令都由主设备发出,在其余的从设备都分配指定地址后,就能够接受主设备的指令。在主设备和从设备进行通信时,如果主设备只和其中一台从设备通信,从设备则返回一个消息回应,如果主设备需要和所有从设备通信,从设备则不能作出回应。Modbus通信有两种模式:ASII和RTU模式。并且,这两种模式不能同时使用,只能选择其中一种模式进行通信。
2 OPC服务器的设计
2.1 服务器对象与接口模块
OPC服务器对象的名称通常为XXX(代表硬件名称)Server,其主要功能就是在启动服务器后获取服务器,得到服务器对象的起始地址,再返回OPC对象。XXXServer派生自IUnknown类,实现了OPC自定义接口,其中最关键的两个接口是IOPC-Server和IOPCBrowseServerAddressSpace。其中,IOPCServer接口类首先派生出IXXXServer类,然后通过指针变量指向IXXXServer类,同时,将接口指针返回客户,客户收到接口指针命令后,可以通过调用相关函数完成相应操作,比如,能够实现对组对象的管理、浏览、创建、删除等操作。并且,还可以通过操作服务器接口了解服务器相关信息。IOPCBrowseServerAddressSpace接口提供浏览服务器地址空间和获取项对象的属性。
OPC Server组对象名称通常为XXXGroup,主要完成存储项对象的信息,通过OPC服务器组对象接口,以OPC组为单位,采用同步和异步方式进行传输,以实现组对象功能。XXXGroup中IXXXSIO接口实现同步传输,程序可以按照规定调用接口进行数据同步存取。如果采用异步方式传输,则通过IOPCAsyncIO与IDadaObject接口派生出IXXXSIO和IXXXDO接口。然后,程序则通过IXXXASIO进行数据异步存取操作。
OPC Server中有一个OPC项XXXItem,由于没有自带接口,所以,不是真正的COM对象,只是表示数据连接。因此,项对象能够对于实际数据项,即服务器中的唯一标识,客户通过数据项建立与数据源的连接。其中,标识包括值、品质、时间戳三个属性。
2.2 数据存储区模块
数据存储区模块就是服务器上包含的可供客户访问的资源的集合,它描述了服务器中含有哪些项,以及这些项是按照什么形式进行组织的,我们可以采用链表结构来实现,在链表结构中,通过一个含有自身结构的指针,实现OPC数据项的遍历。这样。OPC客户就可以通过服务器对象的
IOPCServerBrowseServerAddressSpace接口来浏览数据区的数据项,然后通过OPC组对象创建OPC项。并将OPC项与相应的数据项联系起来。
2.3 Modbus设备驱动模块
Modbus设备驱动模块的实现关键是需要建立符合Modbus协议的数据帧。在本程序中,采用的是RTU模式。无奇偶校验,有2个停止位。
具体步骤,第一步,打开串口,并设置串口参数,比如,波特率、缓冲区等的设置。第二步,将数据量、起始地址、功能码、冗余校验等参数依次填入内存中的缓冲区,建立一帧Modbus。第三步,打开新接收线程,用于监视串口工作状态,当串口收到数据时,线程则会通知客户程序,并将Modbus数据帧发送给设备。如果设备收到数据,则会马上应答,同时发送回应答包文。在回应答过程中,需要判断通信是否超时,串口接收的数据是否符合Modbus协议标准,串口是否能够继续使用。如果通信不超时,串口则继续使用,并且,串口数据符合协议标准,那么就可以在内存中建立接收缓冲区,接收Modbus数据,当整个发送和接收过程结束后,系统将关闭串口资源。
2.4 OPC服务器的注册
由于OPC服务器组件都是自注册组件,相对应的,COM为它们定义了一种“Self-Registration”机制和“Unregistration”机制,将服务器注册过程封装在DLL或EXE程序中,由于本OPC服务器采用DLL组件形式,可以采用Windows系统提供的RegSvr31.exe命令来注册,将该dll文件拷贝到操作系统目录下,运行RegSvr32/OPC_Svr.dll。同样,要从OPC基金会网站下载opc_aeps.dll,opc-comn_ps.dll,opcproxy.dll组件,将其放在操作系统目录下进行注册。保证当组件程序从文件系统删除时会删除其他自身的注册途径。
3 该服务器配合力控组态软件的应用
业界著称的工业组态软件力控就可以支持OPC标准,作为客户端访问OPC服务器程序时,是将OPC服务器程序当作一个I/O设备。数据库中的点参数通过I/O数据库连接与OPC服务器程序进行数据交换。
3.1 在组态软件中定义OPC设备
在力控导航器窗口中选择“I/O设备驱动”项中的“OPC”设备并展开,双击“OPC Client”,在出现对话框后,定义基于Modbus协议的OPC逻辑设备的名称,起名为“OPC_MODB”,单击“下一步”,配置OPC服务器,然后,单击“完成”,则成功添加一个OPC设备,并且在力控的导航窗口中看到该设备。
3.2 对OPC数据项进行数据连接
第一步,双击“实时数据库/数据库组态”,第二步,选择“模拟I/O点”,第三步,双击任一空点参数单元格,选择“数据连接”页,第四步,在“连接I/O设备”的“设备”下拉框中选择预定义的OPC设备“OPC_MODB”,选择后,在“连接项”右侧单击“增加”按钮,单击“确定”按钮,便生成了一个数据项的数据连接。
3.3 进行数据通讯
通过上面的设置,就可以在力控组态软件中像接收其他I/O设备的数据一样接收该OPC设备:OPC_MODB的数据。
通过基于Modbus的OPC接口,可以实时接收从底层传过来的数据,并及时的把数据传送到客户端,对于客户端发送的数据请求,能够立即响应,迅速把数据转发到底层设备。数据既可以在不同的控制系统中进行传递,也可以传递到各种符合COM规范的应用软件中。在工业自动化系统中采用OPC规范的产品,能够实现各软件之间的相互操作和集成,同时,也能够与现场设备通过协议进行即时通信,完成数据传输。随着OPC协议规范的逐步完善和功能增强,OPC将成为控制系统中不可缺少的一部分。
参考文献:
[1]李正军.现场总线及其应用技术[M].北京:机械工业出版社,2005.
[2]OPC基金会.OPC协议规范[S].
关键词:Modbus;OPC;组态
中图分类号:TP393.09 文献标识码:A 文章编号:1007-9599 (2012) 18-0000-02
1 Modbus总线规范
目前,Modbus协议规范主要应用在自动控制领域,目的是实现工业生产中控制器之间的数据通信。同时,还能够通过网络协议实现控制器和其他硬件设备的通信,因此,通过该协议能够让不同厂家的设备构成控制网络,进行集中监控。因此,Modbus协议已经成为了一种通用工业标准。Modbus协议在控制过程中,已经定义了控制器能够识别了消息结构,所以,当控制器发出控制指令后,接收设备就能够回应指令请求,同时侦测指令是否正确,这样,就能够实现不同网络之间的控制。
Modbus协议在通信过程中,在总线上只能有一台主设备,每次通信指令都由主设备发出,在其余的从设备都分配指定地址后,就能够接受主设备的指令。在主设备和从设备进行通信时,如果主设备只和其中一台从设备通信,从设备则返回一个消息回应,如果主设备需要和所有从设备通信,从设备则不能作出回应。Modbus通信有两种模式:ASII和RTU模式。并且,这两种模式不能同时使用,只能选择其中一种模式进行通信。
2 OPC服务器的设计
2.1 服务器对象与接口模块
OPC服务器对象的名称通常为XXX(代表硬件名称)Server,其主要功能就是在启动服务器后获取服务器,得到服务器对象的起始地址,再返回OPC对象。XXXServer派生自IUnknown类,实现了OPC自定义接口,其中最关键的两个接口是IOPC-Server和IOPCBrowseServerAddressSpace。其中,IOPCServer接口类首先派生出IXXXServer类,然后通过指针变量指向IXXXServer类,同时,将接口指针返回客户,客户收到接口指针命令后,可以通过调用相关函数完成相应操作,比如,能够实现对组对象的管理、浏览、创建、删除等操作。并且,还可以通过操作服务器接口了解服务器相关信息。IOPCBrowseServerAddressSpace接口提供浏览服务器地址空间和获取项对象的属性。
OPC Server组对象名称通常为XXXGroup,主要完成存储项对象的信息,通过OPC服务器组对象接口,以OPC组为单位,采用同步和异步方式进行传输,以实现组对象功能。XXXGroup中IXXXSIO接口实现同步传输,程序可以按照规定调用接口进行数据同步存取。如果采用异步方式传输,则通过IOPCAsyncIO与IDadaObject接口派生出IXXXSIO和IXXXDO接口。然后,程序则通过IXXXASIO进行数据异步存取操作。
OPC Server中有一个OPC项XXXItem,由于没有自带接口,所以,不是真正的COM对象,只是表示数据连接。因此,项对象能够对于实际数据项,即服务器中的唯一标识,客户通过数据项建立与数据源的连接。其中,标识包括值、品质、时间戳三个属性。
2.2 数据存储区模块
数据存储区模块就是服务器上包含的可供客户访问的资源的集合,它描述了服务器中含有哪些项,以及这些项是按照什么形式进行组织的,我们可以采用链表结构来实现,在链表结构中,通过一个含有自身结构的指针,实现OPC数据项的遍历。这样。OPC客户就可以通过服务器对象的
IOPCServerBrowseServerAddressSpace接口来浏览数据区的数据项,然后通过OPC组对象创建OPC项。并将OPC项与相应的数据项联系起来。
2.3 Modbus设备驱动模块
Modbus设备驱动模块的实现关键是需要建立符合Modbus协议的数据帧。在本程序中,采用的是RTU模式。无奇偶校验,有2个停止位。
具体步骤,第一步,打开串口,并设置串口参数,比如,波特率、缓冲区等的设置。第二步,将数据量、起始地址、功能码、冗余校验等参数依次填入内存中的缓冲区,建立一帧Modbus。第三步,打开新接收线程,用于监视串口工作状态,当串口收到数据时,线程则会通知客户程序,并将Modbus数据帧发送给设备。如果设备收到数据,则会马上应答,同时发送回应答包文。在回应答过程中,需要判断通信是否超时,串口接收的数据是否符合Modbus协议标准,串口是否能够继续使用。如果通信不超时,串口则继续使用,并且,串口数据符合协议标准,那么就可以在内存中建立接收缓冲区,接收Modbus数据,当整个发送和接收过程结束后,系统将关闭串口资源。
2.4 OPC服务器的注册
由于OPC服务器组件都是自注册组件,相对应的,COM为它们定义了一种“Self-Registration”机制和“Unregistration”机制,将服务器注册过程封装在DLL或EXE程序中,由于本OPC服务器采用DLL组件形式,可以采用Windows系统提供的RegSvr31.exe命令来注册,将该dll文件拷贝到操作系统目录下,运行RegSvr32/OPC_Svr.dll。同样,要从OPC基金会网站下载opc_aeps.dll,opc-comn_ps.dll,opcproxy.dll组件,将其放在操作系统目录下进行注册。保证当组件程序从文件系统删除时会删除其他自身的注册途径。
3 该服务器配合力控组态软件的应用
业界著称的工业组态软件力控就可以支持OPC标准,作为客户端访问OPC服务器程序时,是将OPC服务器程序当作一个I/O设备。数据库中的点参数通过I/O数据库连接与OPC服务器程序进行数据交换。
3.1 在组态软件中定义OPC设备
在力控导航器窗口中选择“I/O设备驱动”项中的“OPC”设备并展开,双击“OPC Client”,在出现对话框后,定义基于Modbus协议的OPC逻辑设备的名称,起名为“OPC_MODB”,单击“下一步”,配置OPC服务器,然后,单击“完成”,则成功添加一个OPC设备,并且在力控的导航窗口中看到该设备。
3.2 对OPC数据项进行数据连接
第一步,双击“实时数据库/数据库组态”,第二步,选择“模拟I/O点”,第三步,双击任一空点参数单元格,选择“数据连接”页,第四步,在“连接I/O设备”的“设备”下拉框中选择预定义的OPC设备“OPC_MODB”,选择后,在“连接项”右侧单击“增加”按钮,单击“确定”按钮,便生成了一个数据项的数据连接。
3.3 进行数据通讯
通过上面的设置,就可以在力控组态软件中像接收其他I/O设备的数据一样接收该OPC设备:OPC_MODB的数据。
通过基于Modbus的OPC接口,可以实时接收从底层传过来的数据,并及时的把数据传送到客户端,对于客户端发送的数据请求,能够立即响应,迅速把数据转发到底层设备。数据既可以在不同的控制系统中进行传递,也可以传递到各种符合COM规范的应用软件中。在工业自动化系统中采用OPC规范的产品,能够实现各软件之间的相互操作和集成,同时,也能够与现场设备通过协议进行即时通信,完成数据传输。随着OPC协议规范的逐步完善和功能增强,OPC将成为控制系统中不可缺少的一部分。
参考文献:
[1]李正军.现场总线及其应用技术[M].北京:机械工业出版社,2005.
[2]OPC基金会.OPC协议规范[S].
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论