Access InTouch Data from VB
-
Introduction
This article is born out of several projects I have had extending Wonderware by calling VB.NET applications. Wonderware is an HMI/SCADA front end made by Wonderware. Wonderware is fairly easy to use, although I am not a huge fan of it, I don't have much against it either. It is just a common program in the SCADA industry. This will show you how to write applications that communicate with Wonderware. I usually have to do this to extend the functionality or to fill in the gaps between what Wonderware can do and what the customer requires.
Background
I write HMI/SCADA software mostly for the oil and gas industry. In this industry, many companies use a product called Wonderware. I have also come across it in waste water plants as well as food processing plants (Cheese Cake to be exact!!!). At most of these facilities, they need a function in the Wonderware application, but Wonderware can't do it. This will give you another option. I have seen other options using DDE. However, DDE is no longer supported so we will be using the Wonderware Toolkit. This code will contact the Wonderware running on the same computer.
Using the Code
Using the code will be pretty easy. We will create 2 VB files that are required to call the Wonderware toolkit (ptacc.dll and wwheap.dll). After that, all that will be left is your application to call the read/write functions of the Wonderare Toolkit. These files were created based on information from Wonderware West and my experience with using the 2 DLLs.
To do this, you need to copy the Intouch.vb and the Ptacc.vb into your project as well as reference the wwheap.dll and the ptacc.dll. Doing this will allow you to communicate with the Wonderware database.
The Ptacc.vb file will contain everything necessary to communicate with Wonderware. However it isn't very pretty, so that is why we use the Intouch.vb file. It is just the basic level.
The Intouch.vb file is going to contain our commands for reading and writing values with the Wonderware database. This will allow you to read/write Strings, Floats, Booleans(Discrete), and Integers.
So if you want to read the first 132 characters from the
string
variable with the tagSBuffer
, then you callIntouchToolkit.ReadString("SBuffer", 132)
or you can useReadInteger
,ReadDiscrete
andReadFloat
for the respective types. Also, the similar istrue
but the functions isWriteString
,WriteFloat
,WriteInteger
andWriteDiscrete
. TheTag
name is always astring
.Now that we got the basics out of the way, you need to call this from your application. This is pretty simple. In your main VB file, whether it is Windows Form or console application doesn't matter. I have not tried this with a web form, but I would like to hear your experience with it if you do try it.
Hide Copy CodePublic Class Form1 Dim accid As Integer Dim hPt As Integer Dim SB As String Dim IntouchToolkit As Intouch '------------------------------------------------ 'Form1_Load '------------------------------------------------ Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load IntouchToolkit = New Intouch(0, 0) SB = IntouchToolkit.ReadString("SBuffer", 132) 'SBuffer is the Tag 'I want to read in Wonderware End Sub Private Sub btnOpen_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOpen.Click IntouchToolkit = New Intouch(0, 0) IntouchToolkit.WriteDiscrete("SomeTag", 1) End Sub End Class
These are the write functions available to call:
- Hide Copy Code
IntouchToolkit.WriteString("SomeTag", "FooBar")
This is to write a
string
value. - Hide Copy Code
IntouchToolkit.WriteFloat("SomeTag", 3.1415)
This is to write a
float
value. - Hide Copy Code
IntouchToolkit.WriteInteger("SomeTag", 10)
This is to write an
integer
value. - Hide Copy Code
IntouchToolkit.WriteDiscrete("SomeTag", 1)
This is to write a
boolean
value.
These are the read functions available to call:
- Hide Copy Code
IntouchToolkit.ReadString("SomeTag")
This is to read a
string
value. - Hide Copy Code
IntouchToolkit.ReadFloat("SomeTag")
This is to read a
float
value. - Hide Copy Code
IntouchToolkit.ReadInteger("SomeTag")
This is to read a
integer
value. - Hide Copy Code
IntouchToolkit.ReadDiscrete("SomeTag")
This is to read a
boolean
value.
*NOTE: Replace "
SomeTag
" with thetagname
you want to read or write from. -