OPC与AJAX技术在RSView32数据读取
和Web发布中的应用
OPC与AJAX技术在RSView32数据读取和Web发布中的应用
OPC与AJAX技术在RSView32数据读取和Web发布中的应用OPCandAJAXTechnologytoReadandWebReleasedataofRSView32
刘忠徐玉斌(太原科技大学系统仿真与计算机应用研究所,山西太原030024)
摘要
采用OPC方式实现了对组态软件RSView32中变量数据的读取,由COM服务器暂存读取到的最新数据,信息管理系
统定时从COM服务器获取数据,通过AJAX异步刷新技术,把得到的数据以趋势图或监控画面的形式显示在IE浏览器
中,解决了管理系统读取和显示组态软件实时数据的问题.
关键词:OPC,COM服务器,AJAX技术,RSView32
Abstract
Inthispaper,themothedofOPCisusedtoaccessthevariabledataofconfigurationsoftwareRS —View32,ThenThese latestdataistemporarilystoredintheCOMserver.BymeansofAJAX(asynchronousref—reshtechnology),thedatawhich
InformationManage-mentSystemhasgainedfromCOMserverinfixedtimeisdemonstrated bytendencycharormonitor-
ingpictureform.Theproblemthatreal-timedataofconfigurationsoftwareisreadedanddispl ayedbyInformationManage—
mentSystemhasbeensolved.
Keywords:OPC,COMServer,AJAXTechnology,RSView32
本文采用OPC技术,读取由组态软件RSView32开发的洗
煤厂监控系统中的变量数据,通过串口传输到Web服务器上,
然后采用AJAX技术在服务端开发模拟监控系统和信息管理系
统,实现了监控系统的Web发布功能和数据集成.该方法具有
很大的通用性,只要是采用支持OPC规范的组态软件开发的监控系统,都可以采用此方法实现Web发布,不受访问客户端数
量的限制,既经济又适用,特别适用那些旧的不支持Web发布
版本的组态软件开发的监控系统.
1系统的基本结构
洗煤厂的原有的监控系统是采用组态软件RSView326.3
中文版开发的,本系统的OPC数据采集客户端以VB6.0为开
发工具,COM服务器采用VC++6.0利用A TL库生成,COM服务器利用STL提供的关联数组来储存从监控系统采集来的实时数据和变量名,信息管理系统选用B/S模式并采用AJAX定时局部刷新技术,模拟监控系统只是信息管理系统的一个功能模块,本论文不讨论信息管理系统的其它功能.首先OPC客户端定时从R
SView32读取数据并调用COM服务器接El的写方法,把变量名和数值写入COM服务器中,然后信息管理系统的Web服务器根据客户浏览器的局部刷新请求,调用COM服务器接口的读方法,读取所需要的变量对应的数值,并把需要更新的实时数据返回IE浏览器.浏览器的定时刷新间隔时间和OPC客户端的读取数据的间隔时间应该相等.系统的基本结构如图1所示.
2OPC数据采集设计
组态软件RSView32为了方便数据的对外访问,内部提供
了名为RS1.RSView32OPCTagServer的OPC服务器.
2.1RSView32OPC服务器的设置
RSV{ew32OPC服务器的设置分几步完成:
在RSView32的工程项目中打开启动设置对话框,选择
QPC/DDE服务器复选框,确保工程运行时OPC服务器处于启动状态.
为RSVjew32OPC服务器设置DCOM组态:DCOM组态
曩壁熏景璧濯=======
图1系统的基本结构
通过程序来设置,在系统中通过"开始"一"运
行",输人文件名启动该程序.Dcomcnfg程序
启动后,在"Applications"页选择"RS1.RSView32OPCTagSem—er"条目,设置属性;在"安全"标签中选择"使用自定义访问"许
ajax实例里面的函数可权选项钮;在"标识"标签中选择"交互式用户"选项.
2.2OPC客户端设置及编程
安装好了OPC自动化接口服务,保证机器的系统目录下有
文件(OPCDAAuto.dl1).启动VB,新建工程OPCClient,在VB
主菜单的"工程"项中选择"引用",在弹出窗口可用的引用选项
中选择"OPCAutomation2.0"再按确定,这样才能使用自动化
接口.工控机一般都是24小时处于运行状态,考虑到网络安全
方面,从OPC采集的数据通过串171通信发送出去,串1:3方式病毒不易感染工控机上的监控系统.编写的OPCClient端主要代
码如下:
声明
WithEventsMyOPCSewerAsOPCServer定义OPC服务器DimmyOPCGroupsAsOPCGroups定义OPC组集合DimmyOPCGroupAsOPCGroup定义OPC组DimmyOPCItemsAsOPCltems定义OPC标签集合DimServerHandles()AsLong定义服务器句柄
《工业控制计算机~2009年22卷第6期21 DimClientHandles()AsLong定义客户端句柄
DimErrors()AsLong定义错误句柄
DimMyOPCltemName()AsString定义记录OPC的标签DimMyOPCV alue()AsV ariant定义存放OPC的值SetMyOPCServer=NewOPCServer建立OPC服务器对象
连接OPC服务器'
IfMyOPCServer.ServerState=OPCDisconnectedThen
MyOPCServer.ConnectRS1.RSView32OPCTagServer
添加OPC组
SetmyOPCGroup=myOPCGroups.Add(StrGroup) myOPCGroupIsSubscribed=False设置为同步读取数据myOPCGroupUpdateRate=1000刷新频率为1000ms myOPCGroup.IsActive=True设置组为激活状态
添加项
MyOPCltemsAddltemsItems(Groups),MyOPCltemName,Clien—tHandles.ServerHandIes.Errors
同步方式读取数据
myOPCGroup.SyncReadOPCCache,ItemCount(I).ServerHandles, MyOPCV alueErrors
3COM服务器设计
COM服务器是用来存放从串口收到的实时数据,只存放当
前最新的数据,每次收到的新数据覆盖原来的数据,依次进行. 为了设计简捷快速,我们选用VC++6.O利用ATL库开发COM 服务器,ATL工程向导会自动生成COM服务器的基本框架结构,可以省去不少的麻烦.为了能够向COM服务器读写数据, COM服务器对外提供一个名为IDataSupplier接El,该接口包括三个方法:写数据方法SetData(BSTRbstrName,double
dV alue),读数据方法GetData(BSTRbstrName,double
pV alue),参数bstrName传递的变量名称,参数dV alue传递变
量的数值,另外还有Clear()方法清空关联数组中的数据,以便
写入新的数据.OPC数据采集端调用写方法定时向COM服务器写入最新数据,Web服务器调用读方法定时从COM服务器读取数据.用ATL设计COM服务器步骤如下:
首先启动VC++6.0生成ATLCOMAppWizard项目DCOMService,选择Service(EXE)为ServerType,并单击Fin—ish,这样向导就生成了一个,只具有启动和停止功能的COM服
务器,在文件StdAfx.h中声明了一个CServerModule类,其提供了基本的服务器功能.
给CServerModule类增加读写数据的成员函数,读数据成
员函数为sGetData(BSTRbstrName,doublepV alue),写数
据成员函数为sSetData(BSTRbstrName,doubledV alue),
采用STL(标准模板库)中提供的标准map模板缓冲数据,这里需要在StdAfx.h开头增加下列语句:
#include<map>
#include<string>
typedefstd::map<std::string,double>DDA TA;
std::string类型作为项double类型作为相应项的值. CServiceModule说明中加入下列行:
DDA TAtheMap;
DDA TA::iteratorthelterator;
读数据成员函数代码:
voidCServiceModule::sGetData(BSTRbstrName,doublepV alue) {
USES—
CONVERSION;
std::stringstrName=W2A(bstrName);
thelterator=theQMap.find(strName);
If(thelterator!=d())
pV alue=(thelterator).second;
else
pV alue=0.O:
}
写数据成员函数代码:
voidCServiceModule::sSetData(BSTRbstrName,doubledV alue) f
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论