搜档网
当前位置:搜档网 › 组态王与OPC技术的MATLAB的数据交换步骤

组态王与OPC技术的MATLAB的数据交换步骤

组态与OPC技术的MATLAB的数据交换步骤:

1、下载matlab7.0以上版本,最好别用7.0,matlab7.0虽然有opc工具箱,但没有opc仿真模块,我用的是matlab2010。

2、下载组态王6.53,我是在亚控科技官网下载的组态王6.53。


3、为保证OPC Toolbox 中对象和OPC 服务器对象连接起来,下载并安装客户端开发工具包OPC Core
Components 2.00 Redistributable 2.20.msi控件。打开matlab安装路径D:\ProgramFiles\MATLAB\R2010b\toolbox\opc\opc\private,
找到该文件双击安装。(有些版本这个控件已经损坏了,考一下别人的也可以安装)


4、打开matlab,在command window 输入命令opcregister('install'),注册OPC 服务器和
客户端用到的来安装能在网络上浏览其他计算机并能与之通讯的核心组件,分别是:
OPC 通讯接口组件OPCcomn_ps.dll
OPC 自动化接口组件OPCdaAuto.dll
OPC 代理占位组件OPCProxy.dll
还有opc_aeps.dll。

这个很关键!好多破解版本不能注册成功的,我分别用了matlab7.1 ,matlab,7.6都注册不成功,若注册不成功的话,可以试一下自己手动注册,点击开始--运行,分别注册:
opcenum.exe /service
regsvr32 opc_aeps.dll
regsvr32 opcproxy.dll
regsvr32 opcdaauto.dll
regsvr32 opccomn_ps.dll
还是不行就用matlab2010,我用这个能注册。


5、在OPC 服务器和OPC 客户端进行分布式COM的环境设置,这个步骤有些麻烦,有个名为“dcom配置”
的文件步骤很详细,上面有好几个系统的dcom配置,看准了我们需要的XP系统的。这一步目的同样是为使
OPC Too lbox 中的对象和OPC 服务器对象之间建立连接。(见附文件“dcom配置”)


6、本地安全策略设置
打开控制面板--管理工具--本地安全策略--安全选项--网络访问--本地账户的共享和安全模式-
--属性--选择“经典本地用户以自己的是身份验证”。








可能遇到的问题:

1、组件服务打不开?;依次打开组件服务-计算机-我的电脑会出现红色向下箭头右键找不到属性选项?
解决办法如下:

在“服务”里找到这三个服务,都启动就行了

Distributed Transaction Coordinator

Remote Procedure Call (RPC)

Security Accounts Manager

2、matlab能读到组态王的数据,但不能将数据写入组态王?
如果上面的设置都正确的话,很可能就是组态王软件的问题了,当运行组态王时,组态王会提示:
“您将进入演示方式,程序将在两个小时后关闭”然后按“确定”,若果不安确定,组态王运行时OPC服务器
不会工作,数据交换就会出现问题。
如果组态王在运行系统是没有出现上面的提示,或者是组态王总是提示“**设备无法识别”,
那定是组态王软件出现了问题,我有段时间没发现这个问题,一直用那

个有问题的组态王,郁闷了好久,
现在知道了,一些破解版的组态王用的久了就会出现问题,直接到亚控科技官网下载组态王6.53,重新安装就
行了。

3、下面就是写程序了,matlab的OPC toolbox 里面有很多函数,直接套用就行了,就在matlab帮助文档中的OPC TOOLBOX里面,
大家好好看看,下面是我摘抄的一些函数:






下面三个程序是摘抄论文上的格式,验证过,都能运行成功。两个变量都能读写数据,前两个完成读取组态王OPC服务器数据,运行时只运行第一个,第二个是调用的;后一个完成写入组态王OPC服务器数据。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%matlab读取OPC服务器的数据

da = opcda('localhost', 'KingView.View.1'); %组态王运行时,默认OPC服务器名称为KingView.View.1
connect(da); %与OPC服务端相连

grp=addgroup(da) %创建组对象
itm1=additem(grp,'water_level.Value') %变量元素添加到组中
itm2=additem(grp,'u_motor.Value')

itmVec=[itm1,itm2] %创建向量

%设置保存间隔和次数
set(grp,'UpdateRate', 0.2); %0.2秒保存一次
set(grp,'RecordsToAcquire', 15); %设置共记录15个数据,15个后,程序自动停止
set(grp,'RecordsAcquiredFcnCount',1); %Number of records to acquire before RecordsAcquired event occurs,当数据 %改变一次是记录事件发生一次。
set(grp,'RecordsAcquiredFcn',@mydisplay); %当获得记录时间发生一次是时:回调M函数display显示数据及图形


set(grp,'LoggingMode','disk&memory'); %设置保存位置和类型
set(grp,'LogFileName','ei.olf');
set(grp,'LogToDiskMode','overwrite');
set(grp,'LogToDiskMode','append');
%至此将实时变量a1,a2?an读取到a.olf文件中。
%然后MATLAB就可以利用这些数据进行相应的运算处理,
%并处理结果存放于b。

start(grp); %记录开始
wait(grp);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% matlab显示程序
function mydisplay(obj,event)
numRecords = min(obj.RecordsAvailable, 60);
lastRecords = peekdata(obj, numRecords)
[i,v,q,t,et] = opcstruct2array(lastRecords);
v
plot(t,v(:,1) , t,v(:,2));
grid on
legend('水箱液位变化曲线','电机电压变化曲线')
set(gca,'YLim',[0, 10])
datetick('x', 'keeplimits')
eventTime = event.Data.LocalEventTime;
title( sprintf('Event occured at %s',datestr (eventTime ,15)));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%matlab将数据写入组态王OPC服务器
clear
da=

opcda('localhost','KingView.View.1');
connect(da);
grp = addgroup(da); %创建项目组
itm1 = additem ( grp, 'water_level.Value')
itm2 = additem ( grp, 'u_motor.Value')
a = 53;
a1=double(a);
b = 15;
b1=double(b);
writeasync ( itm1, a1)
writeasync ( itm2, b1)
disconnect(da)
delete(da)
clear da grp itm1 itm2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

提示:多看看matlab帮助文档中的OPC TOOLBOX,上面还有另外一种图形(GUI)方式同样可以完成数据交换而且简单,
懒得写程序的就用那种方法!



%%%%%%%%%%%%%%%%%%%%%GUI方式(图形用户界面)实现数据交换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GUI方式主要用到三个OPC模块,分别是OPC read、OPC write、OPC configuration

由于程序命令方式的回调函数中的控制算法不易编写,在用到一般的PID控制时,完全可以用GUI方式完成matlab和组态王的数据交换(注:复杂控制GUI方式中没有相应的模块,就需要自己编写控制算法了),在本论文中就用GUI方式来完成数据交换。
下面是几个必需模块的简介:
OPC configuration模块: 设置matlab需要连接的服务器KingView.View.1,选中服务器,然后确定即可。
OPC Read模块: matlab从组态王中读数据。注意:组态王中的数据变量必须是英文名,在matlab 的OPC Read 模块中加载项目item时,格式是:water_level.Value,点的前面是组态王的变量名,点的后面代表数据交换的数幅值。
OPC Write 模块: matlab写数据到组态王。注意事项和OPC Read 相同。
Demux 模块:OPC Read 模块输出到Demux中,OPC Read 中的变量和Demux输出一一对应。











相关主题