西门子WinAC Computing和NET OPC
WinAC提供了一套组件:WinAC Computing。WinAC Computing提供了访问WinAC控制器的接口,它包含如下的部分:
• 一组ActiveX控件。它提供了对WinAC控制引擎中数据的访问。
• 一个OPC 服务器。它允许OPC客户端程序与WinAC控制器进行数据交换。即WinAC支持两种OPC服务器:WinAC Computing OPC服务器和SIMATIC NET OPC 服务器。
• 一个变量表编辑器TagFile Configurator。借助TagFile,访问WinAC控制器数据时可以使用符号名。
• 一个设置程序。它用于对远程访问数据进行设置。
• 一个OLE 容器 Computing SoftContainer。
尽管WinAC Computing使用更简单,但由于WinAC新版本支持SIMATIC NET OPC,而且NET OPC具有更好的性能和更强的功能,我们推荐使用NET OPC来访问WinAC控制器的数据。安装WinAC Basis 4.1和WinAC Slot 3.4时,并不会自动安装WinAC Computing,如果需要安装WinAC Computing,可打开WinAC安装盘上的“WinCP”文件夹,运行此文件夹下的“Setup.exe”进行安装。
3.1 WinAC Computing设置
1. 设置Computing的访问接口
使用WinAC Computing前,应对Computing的访问点进行设置。启动SIMATIC NET下的设置程序“Configuration Console”,选择“Access points”,双击右边数据窗口的“Computing”行,从打开的对话框中选择“PC internal(local)”,单击“OK”关闭对话框,结果如图3.1所示。
WinAC控制器和WinAC Computing可以安装在不同的PC机上,以支持远程访问WinAC 控制器的数据。不论WinAC控制器与WinAC Computing是否安装在同一PC机上,都要将Computing的访问接口设成“PC internal(local)”。
2. Computing Configuration
使用WinAC Computing OPC Server前应设置OPC服务器。
点击“start”->“Simatic”->“PC Based Control”->“Computing Configuration”
打开Computing的设置程序,在“OPC”选项卡上有一连接选择项,选择是通过变量文件连接还是直接连接,如图3.2所示。如果通过标签文件连接,在这之前还应使用“Computing TagFile Configurator”创建标签文件。选择直接连接有两项内容要求输入:
• Computer name: 此处输入的是被访问的WinAC控制器的计算机名,也可以是计算机的IP地址,如果访问本机WinAC控制器的数据,“Computer name”的值也可以是“<Local>”。
• Control Engine: WinAC控制器的类型。
WinAC Basis: 输入 “WinLC”。
WinAC RTX: 输入“wcS7=2”。
WinAC Slot: 输入“wcS7=3”。
图3.1 设置WinAC Computing的访问接口
图3.2设置OPC 的连接选项
图3.2的设置值表示:通过Computing OPC方式访问WinAC数据时,它访问的是本机上的WinAC Basis控制器中的数据。
“Computing Configuration”程序的选项卡“Computing”在新的版本中已不使用。
3.2 组态标签文件
使用标签文件不但可以采用符号的方式访问WinAC控制器中的数据,还可以使用OPC客户端程序访问多个WinAC控制器中的数据。我们举一个例子,首先在Step7中定义了如图3.3所示的符号表。
图3.3 Step7 的符号表
然后,在WinAC中建立组态标签。单击“PC Based Control”下的“Computing TagFile Configurator”,打开WinAC的符号表编辑器,程序自动新建一个标签文件。右键单击此标签文件视图窗口的左边,从弹出菜单中选择“Insert Program”,打开选择step7源程序的对话框,从中选择要进行WinAC符号标定的程序,单击按钮将文件选入右边窗口。结果如图3.4的底层窗口所示,从中可以看到Step7符号表中的变量已包含其中。右键单击窗口左边的文件“COC-SLOT34_WinLC”,从菜单中选择“Edit”,打开“control Engine Configuration”对话框,按照3.1节描述的方法设置计算机名和控制器,如图3.4中的顶层窗口所示的。
图3.4 组态标签文件
如有需要可以添加新的文件(在同一标签文件下)并进行设置,完成后存盘退出。标签文件的扩展名为.tsd。标签文件创建后便可与图3.2中的标签源文件连接,之后可以通过符号的方式访问WinAC控制器中的数据。
为了说明本章后面部分的内容,我们举一个例子,其中系统组态同第二章。在Step7中编写一段代码,其完成的功能是:当I0.0为1(true)时,每一秒钟将mw10的值加1。当mw10=10000时,将mw100清零。
OB1循环中的代码:
3.3 Computing SoftContainer
Computing SoftContainer为一OLE容器,在它的窗体上只能放置WinAC Computing提供的ActiveX控件。使用Computing SoftContainer可以生成简单实用的HMI界面窗口。
运行程序组“PC Based Control”下的程序Computing SoftContainer。在Computing SoftContainer的工具栏上除了常规的按钮以外还有WinAC Computing所带的ActiveX控件图标,这些ActiveX控件还可用在可作为OLE容器的程序上,如Visual Basic、WinCC等。
• S7WCPanel: WinAC操作面板控件。
• S7Data: WinAC控制器数据访问控件。
• Dbuffer: 诊断缓冲区。
此外还有用于显示和操作数据的控件。下面的步骤描述如何在窗体上显示上节的i0.0和
mw10两个数据。
(1) 在窗体上添加一个S7Data,一个Button和一个Edit。
(2) 双击窗体上的S7Data1对象,从弹出的窗口中选择“Engine”选项卡。
(3) 选中通过标签文件进行连接,并选择上节保存的文件名作为标签文件。如图3.5所
示。
图3.5 选择连接方式为标签连接
图3.6 设置对象的value属性值
(5) 鼠标单击工具栏上的按钮,运行程序,结果如图3.7所示。
在Edit1对象中显示MW10的计数值,Button1对象表示I0.0的状态,还可以用鼠标操作改变I0.0的状态,用键盘输入更改MW10的值。
其它控件的使用方法可参考WinAC Computing手册。
图3.7 Computing SoftContainer的运行效果
3.4通过OPC方式访问WinAC中的数据
OPC即基于过程控制的OLE。从2.0版本开始,OLE基于微软的COM(组件对象模型)技术,所以OPC也基于COM技术。WinAC支持WinAC Computing OPC 和SIMATIC NET OPC。编写同一功能不同OPC服务器的OPC客户端程序大体相同。SIMATIC NET OPC提供DA(数据访问)、A & E(报警和事件)服务;Computing OPC提供DA服务。SIMATIC的这两个OPC服务器都支持定制接口和自动化接口,定制接口只支持用C/C++编写的客户应用程序,自动化接口则支持更上层的应用,如Visual Basic以及Excel等支持VBA的所有应用程序。两种接口的数据访问服务都支持用同步和异步的方法读取数据。
在下面的三节中,我们将分别介绍如何使用WinAC Computing控件,WinAC Net OPC控件,以及通过编写WinAC Computing和WinAC Net OPC客户端程序代码(不调用控件)访问WinAC的数据。
3.5在Visual Basic中使用WinAC Computing的控件
WinAC Computing的ActiveX有许多方法和属性,在高级语言中可很容易的使用这些控件。
本节描述如何在Visual Basic 6.0中使用WinAC的数据访问控件。
打开Visual Basic 6.0,右键单击控件工具栏的空白处,从弹出菜单中选择“Component”,打开“Components”对话框,选择如图3.8所示的Computing控件。
图3.8在VB中安装ActiveX控件
单击“OK”关闭对话框后在控件栏上将添加刚才所选的控件。在窗体上添加一个S7Data对象,以及一些按钮、文本框,和一个列表框来实现下列例子程序,设计窗体见图3.9。在编写代码前,还必须设置S7Data1对象的属性,在图3.5所示的“Engine”选项卡上,我们这一次选择直接连接。PC Name设为“<Local>”,Control Engine设为“WinLC”。
图3.9 VB的设计窗体
例1. 读变量的操作
Private Sub btnRead_Click()
Dim r1, state1 As Long
'下面的语句为读变量,第一参数为变量的地址,第二个参数存放结果
r1 = S7Data1.ReadVariable("mw10:int", v1, state1, 0)
'txtRead为TextBox的对象
txtRead.Text = v1
End Sub
例2. 写变量的操作
Private Sub btnWrite_Click()
Dim r1 As Long
v1 = txtWrite.Text
'第一参数为变量的地址,第二个参数存放结果
r1 = S7Data1.WriteVariable("mw10:int", v1, 0)
End Sub
例3. 读取多个在step7中有连续存储位置的操作
Private Sub btnArrayRead_Click()
Dim r1, state1 As Long
'读3个实数
r1 = S7Data1.ReadVariable("md100:real[3]", v1, state1, 0)
List1.Clear
For i = 0 To 2
List1.AddItem ("md" & 100 + i * 4 & "= " & v1(i))
Next i
End Sub
例4. 读取多个在step7中有连续存储位置的操作
Private Sub btnArrayWrite_Click()
Dim r1 As Long
Dim v1(3) As Variant
For i = 0 To 2
v1(i) = txtArrayWrite.Text
Next i
'写3个实数
r1 = S7Data1.WriteVariable("md100:real[3]", v1, 0)
End Sub
例5. 一次读多个不连续的变量
Private Sub btnReadMul_Click()
Dim name1(3) As String
name1(0) = "m0.0:bool"
name1(1) = "mw10:int"
name1(2) = "md100:real"
'一次读多个变量函数
r1 = S7Data1.ReadMultiVariables(name1, v1, state1)
List1.Clear
For i = 0 To 2
List1.AddItem (name1(i) & "=" & v1(i))
Next I
例6. 一次写多个不连续的变量
Private Sub btnWriteMul_Click()
Dim r1 As Long
Dim v1(3) As Variant
Dim name1(3) As String
name1(0) = "i0.0:bool"
name1(1) = "mw10:int"
name1(2) = "md100:real"
v1(0) = False
v1(1) = 100
v1(2) = 9.999
r1 = S7Data1.WriteMultiVariables(name1, v1, state1)
End Sub
例7. 变量有变化时作出反映
步骤1. 右键单击窗体上的S7Data1对象,从弹出菜单中选择“Properties”。打开S7Data1对象的属性设置对话框,选择“Event”选项卡上的“S7Data1”,单击按钮“Add”,添加一变量的别名,回到“Event”选项卡,选择刚创建的变量别名,在窗口右边的“Assigned Variable”编辑框中输入要监控变量的地址,如“mw12”,如有需要可修改刷新时间和死区。按同样的方法添加另一监控的变量,结果如图3.10所示。单击“OK”关闭对话框。
图3.10 监控变量值变化事件
步骤2. 在代码窗口的对象组合框中选择“S7Data1”,事件组合框中选择“ValueChanged”,添加事件处理程序代码如下。
Private Sub S7Data1_ValueChanged(ByVal Property As String, ByVal VarName As String,
ByVal Value As Variant, ByVal Quality As Integer)
If VarName = "mw12" Then
MsgBox "mw12 changed"
ElseIf VarName = "mw14" Then
MsgBox "mw14 changed"
End If
End Sub
3.6 SIMATIC NET OPC控件
可以使用相同的接口来访问S7-300/400和WinAC控制器,即SIMATIC NET OPC。通过NET OPC来访问WinAC的数据不需要另外的授权和硬件。NET OPC除了提供定制和自动化接口来访问控制器的数据外,还提供一个ActiveX控件方便使用。
SIMATIC NET提供一个工具OPC Scout,它是一个简单的SIMATIC OPC客户端工具软件,可浏览存在的SIMATIC OPC服务器名称、添加OPC组、添加项、监控项值等功能。
在图3.8所示的添加控件窗口中添加名称为“SMIATIC NET OPC DATA”控件。
在窗体上添加一个DatCon对象DatCon1以及若干按钮、文本编辑框对象、列表框。打开DatCon1的属性设置窗口,选择“OPC Server”选项卡,Server编辑框中输入OPC服务器名称“OPC.SimaticNet”(“OPC.SimaticNet”是SIMATIC NET作为OPC SERVER的服务器主件的名称), 在Node编辑框中输入计算名“COC-SLOT34”,如图3.11所示。
图3.11 设置NET OPC DATA控件的服务器和计算机名
例1. 读数据
Private Sub btnRead_Click()
Dim r1, q1 As Long
Dim strname(2) As String
Dim time1 As Date
‘读单个变量
r1 = DatCon1.ReadVariable("S7:[S7 connection_1]MINT10,1", v1, q1, time1)
Text1.Text = v1
‘读多个变量
strname(0) = "S7:[S7 connection_1]MINT10,3"
strname(1) = "S7:[S7 connection_1]db1,REAL0,3"
r1 = DatCon1.ReadMultiVariables(strname, v2, e2, q2, time1)
for i=0 to 2
for j=0 to 2
list1.AddItem(v2(i)(j))
Next j
Next i
End Sub
读取变量的格式为“S7:[连接名]数据区 数据类型 起始地址,数量”
连接名在网络组态时已确定,在图2.18中的连接名为“S7 connection_1”。
"S7:[S7 connection_1]MINT10,3" 表示读取mw10开始的3个整数值。
"S7:[S7 connection_1]db1,REAL0,3" 表示读取db1.dbd0 开始的3个浮点数值。
例2.写数据
Private Sub Command2_Click()
Dim r1 As Long
Dim e2, q2 As Variant
Dim strname(2) As String
Dim v2(2) As Variant
strname(0) = "S7:[S7 connection_1]MINT10,1"
strname(1) = "S7:[S7 connection_1]DB1,REAL0,1"
v2(0) = 100
v2(1) = 2.2
r1 = DatCon1.WriteMultiVariables(strname, v2, e2)
End Sub
3.7 编写WinAC Computing OPC和SIMATIC NET OPC客户端程序
要编写OPC客户端程序,先引用OPC的DLL文件。单击Visual Basic 6.0菜单“Project”->“Reference”,打开引用对话框,将“Siemens OPC DAAutomation 2.0”选中。如图3.12所示。如果这个组件没有在列表框出现,可能的原因是组件没有注册,可以使用Windows附带的程序regsvr32.exe进行注册,SIMENS OPC自动化组件包含在SOPCDAAuto.DLL库中。
编写这两种OPC的客户端程序只有两项不同,一个是服务器名称,另一个是项名称(可以认为是变量名”)。
Computing OPC的服务器名称为“OPCServer.WinAC”。
Simatic NET OPC的服务器名称为“OPC.SimaticNET”。
Simatic NET OPC的项名称和在3.6节中描述的类似,形如:
Set ItemObj1 = GroupObj.OPCItems.AddItem("S7:[S7 connection_1]MINT10", 1)
Set ItemObj2 = GroupObj.OPCItems.AddItem("S7:[S7 connection_1]DB1,REAL0", 2)
Computing OPC的项名称在3.5节有介绍,形如:
Set ItemObj1 = GroupObj.OPCItems.AddItem("MW10:INT", 1)
Set ItemObj2 = GroupObj.OPCItems.AddItem("DB1.DBD0:REAL", 2)
图3.12 引用SIEMENS OPC 数据访问自动化组件
在安装Simatic NET的目录下(如 c:\programfiles\siemens\simatic.net\opc2\samples)下有如何编写OPC客户端程序的例子程序。