(2010-03-09 10:38:00)
一、通过STEP7软件建立一个新项目OPC,在项目中添加SIMATIC300站和一个PC站,其中PLC站中第四个槽安装的CP343模块。PC站的第一个槽为OPCSERVER,第三个槽为IEGENERAL,然后在NETPRO下配置PLC和PC站的网络连接:(注意:是在PC站上新建的网络连接,连接类型选的S7连接)
二、通过stationconfigurator软件配置本机的PC站(要和STEP7中配置的相同),然后把PLC和PC站都下载下去(注意:下载PC站的时候要把S7ONLINE(STEP7)--->;PCinternal(local))。
三、打开OPCScout,(Start>;SIMATIC>;SIMATICNet>;OPCScout),双击“OPC
SimaticNet”在随之弹出的“ADDGroup”对话框中输入组名,本例命名为“OPC”。 点击OK确认;
;双击已添加的连接组(OPC),即弹出“OPCNavigator”对话框,此窗口中显示 所有的连接协议。双击“S7”,在PCStation组态NetPro中所建的连接名会被显示(S7 connection_1)。双击此连接,即可出现有可能被访问的对象树(objectstree),在PLC CPU中已存在的DB块也会出现
以上完成的OPCSERVER部分的配置。
四、四、用VB编写了OPC客户端应用程序。主要程序代码如下: (1)连接OPC服务器
DimWithEventsMyOPCServerAsOPCServer‘定义服务器对象变量MyOPCServer DimWithEventsMyOPCGroupAsOPCGroup‘定义OPC组对象变量MyOPCGroup SetMyOPCServer=NewOPCServer
MyOPCServer.Connect\"OPC.SimaticNET\"‘连接SIMATICNET的OPC服务器 (2)添加OPC组对象
SetMyOPCGroup=\"MyOPCServer\".OPCGroups.Add(\"Group1\") ‘添加OPC组对象
MyOPCGroup.IsSubscribed=True
‘设置该组数据为后台刷新 MyOPCGroup.IsActive=True ‘设置该组为激活状态
MyOPCGroup.UpdateRate=1000 ‘设置数据刷新时间为1000 (3)添加数据项
DimabItemIDs()AsString ‘项标识符
DimabClientHandles()AsLong ‘客户端句柄
DimabServerHandles()AsLong ‘服务器端句柄 DimabErrors()AsLong DimiAsLong ItemCount=3
abItemIDs(1)=\"S7:[S7connection_1]IB1\" abItemIDs(2)=\"S7:[S7connection_1]MB1\" abItemIDs(3)=\"S7:[S7connection_1]QB1\" fori=\"1\"t03 abClientHandles(i)=i ‘给客户端句柄赋值 Next
MyOPCGroup.OPCItems.AddItemsItemCount,abItemIDs,abClientHandles,abServerHandles,abErrors ‘添加数据项操作
(4)同步数据读写
OPC数据存取有同步方式和异步方式两种。异步读写数据复杂,需要与事件结合使用,与同步相比速度慢但准确性高。同步读写数据简单,直接使用OPCItem的方法即可。 DimOneAsOPCItem
DimIndexAsLong ‘Index为标签顺序号 DimOneReadAsString DimXieAsString
SetOne=MyOPCGroup.OPCItems(Index) One.ReadOPCCache OneRead=One.Value ‘读数据
MyOPCGroup.SyncWriteItemCount,ServerHandles,valuess,Errors ‘同步写数据
MyOPCGroup.SyncReadOPCCache,ItemCount,ServerHandles,ReadValue,Errors ‘同步读数据 One.Write(Xie) ‘写数据
若只读取数据,可以使用DataChange事件,当控制器中所要访问的数据一旦发生改变时将会触发该事件,并将该数据自动读到TxtValue文本框。
PrivateSubMyOPCGroup_DataChange(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate) ‘自动刷新数据 DimiAsLong Fori=1ToNumItems
txtValue(ClientHandles(i))=ItemValues(i) ‘获取项的值
txtTime(ClientHandles(i))=TimeStamps(i) ‘获取项的时间戳
txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i)) ‘获取项的品质 Nexti EndSub
(5)断开OPC服务器
MyOPCServer.OPCGroups.RemoveAll ‘移除所有OPCGroup,空出资源 SetMyOPCGroup=Nothing MyOPCServer.Disconnect ‘断开连接
在VB中还要引用siemensopcdaautomation2.0才行
因篇幅问题不能全部显示,请点此查看更多更全内容