基于Modbus TCP的OPC服务器设计
rVersion, WORD wMinorVersion, WORD wBuildNumber)设置Vendor及OPC服务器版本信息。
通过调用SetServerDelimiter(WCHAR cDelimiter)设置服务器标签ID的分隔符,在这里我们设置cDelimiter为"."。 通过调用SetCaseSensitivity(BOOL bOnOff = FALSE)设置OPC服务器端地址空间是否区分大小写,在这里我们设置bOnOff=True,即区分地址空间大小写。
OPC回调数据通信管理:在这里主要设置三个回调函数,分别是读设备数据回调函数、写设备数据回调函数和客户端连接或断开回调函数。
回调函数声明分别如下:
/// 从设备读数据tag回调函数
void ReadNotificationHandler(IntPtr hTag, out object Value, out UInt16 Quality, out System.Runtime.InteropServices.ComTypes.FILETIME Timestamp, out Int32 DeviceError)
/// 向设备写数据Tag回调函数
void WriteNotificationHandler(IntPtr hTag, ref object Value, ref UInt16 Quality, ref System.Runtime.InteropServices.ComTypes.FILETIME Timestamp, out Int32 DeviceError)
/// 客户端连接或断开回调函数
void ClientConnNotificationHandler(UInt32 Num, bool bConnect)
声明完回调函数后,需要调用使能回调函数EnableDeviceRead、EnableDeviceWrite和EnableClientConnNotify分别对上述3个回调函数使能,完成回调函数设置。
OPC服务器注册管理:通过调用int RegisterOPCServer(byte[] pSvrCLSID, string lpProgID, string lpDescription, string lpVendor, string lpFilePath)完成对OPC服务器的注册,以便OPC客户端通过注册表搜索到本机或本网络内的OPC服务器。
通过调用int UnregisterOPCServer(byte[] pSvrCLSID, string lpProgID)完成OPC服务器的注销功能。
3. 通信驱动模块
ModbusTCP是Modbus协议的网络协议,TCP端口号为502。ModbusTCP由协议头MBAP、功能码和数据域组成,协议格式如图3所示。
图3:基于ModbusTCP协议的请求和应答格式。
MBAP(Modbus Application Protocol)协议头的主要功能时对Modbus应用数据单元ADU的标识。其详细内容见表1。
表1:MBAP协议头。
功能码主要功能是标识请求什么类型数据,本通讯驱动模块主要使用6种标准的Modbus功能码,其详细内容见表2。
表2:Modbus功能码。
Modbus TCP消息帧通过TCP网络协议进行传输,因此借助Dot Net 4.0平台的Socket类定义封装了一个TcpSocket TCP通信类,通过此类可以完成TCP连接断开、发送接收数据和发现断开自动重连功能。
本Modbus TCP协议通信驱动模块属于Modbus Slave,需要对设备返回的Modbus TCP消息帧进行MBAP验证、请求数据获取。图4是对设备进行读取数据的流程。
图4:设备通信驱动模块读取设备数据流程。
4. 用户界面
OPC服务器的用户界面将数据项用树形结构标识,然后设计数据项和硬件设备的数据绑定设置的界面以及实时显示数据项列表界面,并将数据存储区与硬件通信接口联系起来,实现用户自定义组态功能。在OPC服务器程序关闭时需要将数据项的属性以及硬件设备设置参数作为组态配置文件保存起来,便于下次OPC服务器运行时能自动调入组态配置文件,自动完成初始设置。
主窗口:主窗口是OPC服务器程序的起始点,主要完成OPC服务器的初始化。主窗口是所有界面元素的组织容器,主要包括菜单栏、工具栏 、设备树形列表 、标签列表、信息列表和状态栏,如图5所示。
图5:用户界面。
添加设备:此处的设备是实际物理设备的一个逻辑引用,通过此逻辑设备设置与实际设备的通信参数及相关属性。点击菜单"添加?添加设备",则打开设备属性设置对话框,如图6所示。用户可以设置相关参数。
图6:设备属性设置对话框。
添加组:组是包容设备中一组同类型数据的容器,只需要设置其名称即可。点击"添加?添加组",则打开设置组属性对话框,如图7所示。用户可以设置组名称。
图7:组属性设置对话框。
添加数据标签:数据标签是实际物理设备中数据的逻辑抽象,且进行了OPC数据封装。点击菜单"添加?添加标签",打开Modbus TCP设备数据标签属性设置对话框,用户根据实际设备情况,设置数据点名称、地址、数据类型、寄存器类型等属性,如图8所示。
图8:Modbus设备数据标签属性设置对话框。
根据实际需要重复"添加设备-添加组-添加数据标签"流程,配置好所需要存取的设备数据点。
组态配置文件:在OPC服务器程序关闭时需要将数据项的属性以及硬件设备设置参数作为组态配置文件保存起来,便于下次OPC服务器运行时能自动调入组态配置文件,自动完成初始设置。本文利用DotNet 4
- 基于ARM Cortex-M3的MODBUS协议实现及其应用(06-24)
- 基于Linux操作系统下的TCP/IP网络通信研究与应用(01-10)
- 巧解无线路由器不正常工作技巧(02-13)
- 排忧解难 让宽带路由更好“服务”自己 (03-05)
- 网站安全课程:DDOS攻击防御全攻略(03-11)
- TCP/IP基础(03-17)