紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 4198|回复: 0

[其他] VB如何通过西门子OPC通讯方式连接S7PLC

[复制链接]
冰糖 发表于 2010-7-13 13:03:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一、通过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才行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-5-17 13:43 , Processed in 0.546879 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表