OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx

上传人:b****4 文档编号:16906224 上传时间:2022-11-27 格式:DOCX 页数:18 大小:95.34KB
下载 相关 举报
OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx_第1页
第1页 / 共18页
OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx_第2页
第2页 / 共18页
OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx_第3页
第3页 / 共18页
OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx_第4页
第4页 / 共18页
OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx

《OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

OPC工具箱作OPC客户端的应用研究Word文档下载推荐.docx

hostInfo=

Host:

'

ServerID:

{1x4cell}

ServerDescription:

OPCSpecification:

{'

DA2'

}

ObjectConstructor:

其中,Host:

表明搜索到的OPC服务器在本地计算机上;

ServerID:

{1x4cell}表明在本地计算机上搜索到四个OPC服务器。

四个OPC服务器所遵循的OPC规范都是DA2.0。

ObjectConstructor是指四个OPC服务器的制造商。

2)验证返回的OPC详细信息:

将OPC服务器ID信息赋值给allSevers数组

allServers=hostInfo.ServerID'

执行结果如下:

allServers=

Matrikon.OPC.TI5.1'

KEPware.KEPServerEx.V4'

Takebishi.Melsec.1'

'

OPC.SimaticHMI.HmiRTm.1'

本次仿真所用的OPC服务器是'

(2)创建一个OPC数据访问客户端对象

获得主机名称和OPC服务器ID后与OPC服务器进行连接,需要创建一个与服务器相对应的opcda(OPC数据访问)对象,其代码如下:

da=opcda('

'

这样就建立了一个与KEPware.KEPServerEx.V4对应的OPC数据访问对象。

da=

SummaryofOPCDataAccessClientObject:

localhost/KEPware.KEPServerEx.V4

ServerParameters

Host:

localhost

ServerID:

KEPware.KEPServerEx.V4

Status:

disconnected

Timeout:

10seconds

从上面执行结果可以看到Status:

disconnected,也就是还没有与OPC服务器建立连接。

(3)建立MATLAB与指定OPC服务器之间的连接

1)连接服务器

connect(da)

2)显示客户端信息,确认客户端已经建立了连接

da

执行结果如下:

connected

ObjectParameters

Group:

0-by-1dagroupobject

EventLog:

0of1000events

从执行结果Status:

connected可以看出,OPC客户端,也就是matlab与服务器建立了连接。

(4)浏览服务器的命名空间

1)依据KEPware.KEPServerEx.V4服务器中已经存在的项,通过部分匹配查找出所有需要的OPC项。

KepItems=serveritems(da,'

*Channel_1.Device_1.Tag*'

KepItems=

Channel_1.Device_1.Tag_1'

Channel_1.Device_1.Tag_2'

Channel_1.Device_1.Tag_3'

执行结果显示了所有包含Channel_1.Device_1.Tag字符串的OPC变量。

2)将需要的OPC项名存储到数组itmIDs中

itmIDs={'

Channel_1.Device_1.Tag1'

Channel_1.Device_1.Tag2'

Channel_1.Device_1.Tag3};

本次仿真的三个项模拟PLC的模拟量,是整型数据。

(5)创建一个OPC数据访问组对象

grp=addgroup(da,'

Group1'

(6)将项添加到组对象中

创建组后才能够添加项,下面将步骤四中定义的项(itmIDs)全部添加到创建的组对象(grp)中。

itmCollection=additem(grp,itmIDs)

执行后itmCollection数组中存放着Group1中所有项的集合。

(7)配置OPC工具箱的属性

用SET命令配置OPC工具箱的属性,用GET命令取回其属性。

下面的代码是在两分钟内,每隔0.2秒登入一次数据,numRecords是登入数据的次数。

logDuration=2*60;

logRate=0.2;

numRecords=ceil(logDuration./logRate)

配置组对象属性,使其能获取所有的数据。

set(grp,'

UpdateRate'

logRate,'

RecordsToAcquire'

numRecords);

(8)从OPC服务器中获取数据

调用START函数获取数据。

为了在程序继续往下执行前得到所有的数据,调用WAIT函数。

start(grp)

wait(grp)

上面语句执行后,数据都登入到了内存里面,需要从OPC工具箱引擎里取回。

因为读取上来的数据是时间序列数据,需要将读取上来的数据存储到各个独立的数组中。

[logIDs,logVal,logQual,logTime,logEvtTime]=getdata(grp,'

double'

);

查看工作区间中各个数据的大小

whoslog*

(9)绘制数据图形

下列代码将数据图形绘制在一条坐标轴上,数据格式标记(DATETICK)函数将X轴标记转换成格式化数据字符串。

plot(logTime,logVal);

axistight

datetick('

x'

keeplimits'

legend(logIDs)

图1模拟量数据绘制结果

上图注释框控标出红线是Tag1的数据值变化曲线,绿线是Tag2的数据值变化曲线,蓝线是Tag3的数据值变化曲线。

通过上图尚不能判断所得数据的品质,所以通过下面的一段代码将品质不好的数据点用红色标出,品质不确定的数据用橙色标出。

holdon

isBadQual=strncmp(logQual,'

Bad'

3);

isRepeatQual=strncmp(logQual,'

Repeat'

6);

fork=1:

size(logQual,2)

badInd=isBadQual(:

k);

plot(logTime(badInd,k),logVal(badInd,k),'

ro'

...

MarkerFaceColor'

'

r'

MarkerEdgeColor'

k'

repInd=isRepeatQual(:

plot(logTime(repInd,k),logVal(repInd,k),'

[0.80.50],'

end

holdoff

图2数据品质标志结果

由于所有的数据品质良好,所以没有显示标识红点或橙色点。

(10)清除

结束OPC工具箱对象后必须将其从OPC工具箱引擎中删除,并自动删除组对象和项对象。

disconnect(da)

delete(da)

清除组对象

isvalid(grp)

从工作区间清除项的集合

cleardagrpitmCollection

以上分析的是MATLAB从OPC服务器读取某个组中所有项的字段值,并用图形显示ItemID、Value、Quality、TimeStamp的全过程,及其使用的底层代码的分析。

其M文件代码见附录1。

3.OPC工具箱的数据交换

3.1同步读写

用OPC工具箱的同步读写操作与OPC服务器交换数据。

(1)与OPC服务器建立连接并建立相关对象

connect(da);

grp=addgroup(da,'

Group1'

itmIDs={'

...

};

itmCollection=additem(grp,itmIDs);

(2)执行同步读操作

默认读操作从OPC服务器的高速缓存中获取数据。

1)读一个值

r=read(itmCollection

(1))

r=

ItemID:

Value:

1004

Quality:

Good:

Non-specific'

TimeStamp:

[2010611184539.4680]

Error:

2)读全部值

r=read(itmCollection)

r=

3x1structarraywithfields:

ItemID

Value

Quality

TimeStamp

Error

查看项的具体数值

r

(1).Value

执行结果为:

ans=

3305

当OPC服务器在网络上或不在本地上时,从设备读取数据将花费更多的时间。

从设备被读取数据时,要将数据源指定为’device’。

r=read(itm1,'

device'

(3)执行同步写操作

1)给一个项赋值0

write(itmCollection

(1),0)

再将数据读取回来

r=read(itmCollection

(1))

执行结果:

6

[201061184933.4060]

从执行结果可以看到其Value值由3350这样的大数值变成了6,这是因为这个项的值是自动线性增长,当写入值0再读回来的间隙增长到6了,但是仍可判断出写操作是成功执行了的。

2)给多个项赋值

write(itmCollection,{0,0,0})

(4)清除

disconnect(da)

delete(da)

cleardagrpitmCollection

3.2从OPC服务器采集数据

(1)创建OPC工具箱对象层次结构

itmCollection=additem(grp,itmIDs);

(2)配置数据采集持续时间

Set(grp,’UpdateRate’,0.2);

Set(grp,’RecordsToAcquire’,40);

(3)配置数据采集目标

数据被采集到磁盘和内存。

磁盘文件名是LoggingExample.olf,如果该文件名已存在,那么该文件原有的数据会被OPC工具箱引擎采集上来的数据覆盖。

set(grp,'

LoggingMode'

disk&

memory'

set(grp,'

LogFileName'

LoggingExample.olf'

LogToDiskMode'

overwrite'

(4)开始采集数据

启动组对象,等待两秒钟,并显示最后获取的数据值。

pause

(2)

sPeek=peekdata(grp,1)

显示项的ID和值

disp({sPeek.Items.ItemID;

sPeek.Items.Value});

等待数据采集完成后,才继续执行后面的代码。

wait(grp,inf)

(5)获取数据

whoslog*;

(6)清除

4OPC工具箱的事件

4.1查看事件

(2)开始数据采集

将数据采集数设定为10条,并开始采集

grp.RecordsToAcquire=10;

start(grp)

等待数据采集完毕

(3)查看事件日志

在组对象采集数据时产生了两个事件:

开始和停止。

客户端的时间日志属性值是一行二列的事件型数组。

events=da.EventLog

列出记录在事件日志中的事件类型

{events.Type}

使用事件结构中的字段获取特定事件的信息。

下面代码显示了停止事件的信息。

stopdata=events

(2).Data

用停止时间减去开始时间,得到采集数据用掉的时间。

loggingDuration=datenum(events

(2).Data.LocalEventTime)-...

datenum(events

(1).Data.LocalEventTime);

loggingSeconds=loggingDuration*24*60*60

4.2使用默认回传

da=opcda('

(2)配置数据采集参数

grp.RecordsToAcquire=20;

grp.UpdateRate=0.5;

(3)配置回传

用默认数据回传显示在数据采集过程中的开始、数据获取、停止事件。

grp.StartFcn=@opccallback;

grp.StopFcn=@opccallback;

grp.RecordsAcquiredFcn=@opccallback;

grp.RecordsAcquiredFcnCount=5;

(4)开始数据采集

OPCStarteventoccurredatlocaltime15:

35:

47

Group'

:

0recordsacquired.

等待数据采集完毕

(5)清除

4.3使用自定义回传

使用自定义回传,用display_opcdata函数将获取的数据实时绘制在图形窗口中。

(2)设置相关参数值

设置数据更新速率为0.2秒,要获取的数据为200条,每5秒钟执行一次回传。

0.5);

200);

RecordsAcquiredFcnCount'

5);

RecordsAcquiredFcn'

@display_opcdata);

(3)获取数据

执行结果为动态绘制变量曲线的图形窗口,下图是执行结束时的图片。

图3自定义数据回传结束时数据图

5.使用OPC工具箱模块读写数据

在MATLAB的Simulink工具箱中,已经有OPC配置模块、OPC读取数据模块、OPC写入数据模块。

OPCWrite模块将输入信号写入到OPC服务器中,OPCRead模块将数据从OPC服务器中读取上来,并在Scope中显示。

另外,数据品质显示在Display模块中,如果数值为192就说明数据品质好。

只要建立适当的模型就可以完成对OPC服务器中数据的读写操作,并可以利用其他仿真工具完成复杂的控制。

首先设置“OPC配置模块参数”,选择OPC服务器KEPWare.KEPServerEx.V4。

图4OPC服务器配置

(1)数字量写与读

使用KEPWare.KEPServerEx.V4中的数字量Channel_1.Device_1.K0.0作为数字量变量。

首先利用“OPC写模块”将数值在0、1间变换的方波信号写入OPC服务器中并赋值给Channel_1.Device_1.K0.0,然后再将该变量的值从OPC服务器重读取出来,如图5所示。

图5数字量写与读

图6数字量读取结果

运行图5所示模型后会得到图6所示结果。

图6显示,OPC服务器中的变量值随着方波信号改变了,并且写进去1后,变量值变为-1。

其中,0值表示False,-1表示True。

(2)短整型数据写与读

首先在OPC服务器中建立一个Short型变量Channel_1.Device_1.TagK2。

然后将一个整型常量20写入给该项,再将该项的值读取出来。

图7短整型数据写与读

图8短整型数据读取结果

运行后,可以从图8中看到该整型变量的值已经变成了20。

(3)浮点型数据写与读

首先在OPC服务器中建立一个浮点型变量Channel_1.Device_1.TagK4Float。

然后将一个正弦信号写入到该项,再将该项的值读取上来,并将原正弦信号与采集上来

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1