Professional OPC
Development Tools

logos

Online Forums

Technical support is provided through Support Forums below. Anybody can view them; you need to Register/Login to our site (see links in upper right corner) in order to Post questions. You do not have to be a licensed user of our product.

Please read Rules for forum posts before reporting your issue or asking a question. OPC Labs team is actively monitoring the forums, and replies as soon as possible. Various technical information can also be found in our Knowledge Base. For your convenience, we have also assembled a Frequently Asked Questions page.

Do not use the Contact page for technical issues.

VB.NET example - OPC data with ListView

More
11 Aug 2014 07:10 #2151 by support
You are welcome :-)

Please Log in or Create an account to join the conversation.

More
10 Aug 2014 13:53 #2150 by neilcooley
Hi

Many thanks for the demo, I have now integrated the code into my own project and all I can say is what an improvement it is using your SDK over other companies.

Many thanks for the demo and I hope to do business with you in coming days.


Neil

Please Log in or Create an account to join the conversation.

More
08 Aug 2014 07:51 #2142 by support
Here is an updated example. It keeps the old (explicit Read) functionality, and also adds OPC Subscribe/Unsubscribe. I have added code comments to explain what's going on inside.

VS project (zipped):


File Attachment:

File Name: ListView1_...8-08.zip
File Size:13 KB



Screen snapshot:





Relevant code parts:
Code:
Option Explicit On Option Strict On Imports OpcLabs.EasyOpc.DataAccess Public Class Form1 ' Called whenever one or more subscribed items change Private Shared Sub EasyDAClient1_MultipleItemsChanged(sender As Object, e As EasyDAMultipleItemsChangedEventArgs) Handles EasyDAClient1.MultipleItemsChanged Dim count As Integer = e.ArgsArray.Length For i As Integer = 0 To count - 1 Dim eventArgs As EasyDAItemChangedEventArgs = e.ArgsArray(i) ' We have passed the reference to the associated ListVeiwItem in a State argument when subscribing Dim listViewItem As ListViewItem = CType(eventArgs.State, ListViewItem) UpdateListViewItem(listViewItem, eventArgs.Exception, eventArgs.Vtq) Next End Sub ' Updates ListViewItem (from reading or change notification) with exception and value/timestamp/quality Private Shared Sub UpdateListViewItem(ByVal listViewItem As ListViewItem, ByVal exception As Exception, ByVal vtq As DAVtq) Dim vtqText As String = "" Dim exceptionText As String = "" If (Exception Is Nothing) Then vtqText = vtq.ToString() Else exceptionText = Exception.Message End If listViewItem.SubItems(1).Text = vtqText listViewItem.SubItems(2).Text = exceptionText End Sub ' IsSubscribed setter takes care of enabling/disabling the user interface elements Protected Property IsSubscribed As Boolean Get Return _subscribed End Get Set(value As Boolean) Dim oldValue As Boolean = _subscribed _subscribed = value If (_subscribed <> oldValue) Then UpdateButtons() End If End Set End Property Private Sub ReadButton_Click(sender As Object, e As EventArgs) Handles ReadButton.Click ' Prepare an array describing what we want to read and how Dim count As Integer = ItemsListView.Items.Count Dim argumentsArray(count - 1) As DAReadItemArguments For i As Integer = 0 To count - 1 Dim listViewItem As ListViewItem = ItemsListView.Items(i) Dim itemId As String = listViewItem.Text argumentsArray(i) = New DAReadItemArguments("OPCLabs.KitServer.2", itemId, 50) Next ' Execute the Read operation Dim resultsArray() As DAVtqResult = EasyDAClient1.ReadMultipleItems(argumentsArray) ' Go through the result array, and update the list view items For i As Integer = 0 To count - 1 UpdateListViewItem(ItemsListView.Items(i), resultsArray(i).Exception, resultsArray(i).Vtq) Next End Sub Private Sub SubscribeButton_Click(sender As Object, e As EventArgs) Handles SubscribeButton.Click IsSubscribed = True ' Prepare an array describing what we want to subscribe to and how Dim count As Integer = ItemsListView.Items.Count Dim argumentsArray(count - 1) As DAItemGroupArguments For i As Integer = 0 To count - 1 Dim listViewItem As ListViewItem = ItemsListView.Items(i) Dim itemId As String = listViewItem.Text ' We use the last argument (State) to provide a reference to the associated ListViewItem argumentsArray(i) = New DAItemGroupArguments("OPCLabs.KitServer.2", itemId, 100, listViewItem) Next ' Execute the Subscribe operation EasyDAClient1.SubscribeMultipleItems(argumentsArray) End Sub Private Sub UnsubscribeButton_Click(sender As Object, e As EventArgs) Handles UnsubscribeButton.Click IsSubscribed = False ' Execute the Unsubscribe operation EasyDAClient1.UnsubscribeAllItems() End Sub Private Sub UpdateButtons() ReadButton.Enabled = Not IsSubscribed SubscribeButton.Enabled = Not IsSubscribed UnsubscribeButton.Enabled = IsSubscribed End Sub Private _subscribed As Boolean End Class
Attachments:

Please Log in or Create an account to join the conversation.

More
08 Aug 2014 07:45 #2141 by support
N.,

In your request you wrote “reading”, so I interpreted as an explicit Read operation, that’s what it usually means.
No problem though, I will supply an example with a subscription and callback.

Best regards,

Please Log in or Create an account to join the conversation.

More
08 Aug 2014 07:44 #2140 by support
From: N.
Sent: Thursday, August 07, 2014 7:01 PM
To: Zbynek Zahradnik
Subject: RE: OPC Labs Contact Form - opc to listview

[...]

I found the example but I was expecting a call back when values changed, is this possible?

I have approx. 500 tags so I need a method with a call back when data changes.


N.

Please Log in or Create an account to join the conversation.

More
01 Aug 2014 12:12 - 01 Aug 2014 12:24 #2123 by support
I have prepared an example in VB.NET which reads OPC data and populates the ListView.

There are three items pre-populated in the ListView, with their Item IDs. Each item also has sub-items, for the VTQ (value-quality-timestamp), and a possible exception (error indication).
When the Read button is pressed, the code takes the OPC item IDs from the list view, assembles an array of arguments which allows all items be read in a single operation (for good performance), and then calls EasyDAClient.ReadMultipleItems. The resulting array is then used to update the sub-items in the list view.



The relevant pieces of code are here:
Code:
Private Sub ReadButton_Click(sender As Object, e As EventArgs) Handles ReadButton.Click Dim count As Integer = ItemsListView.Items.Count Dim argumentsArray(count - 1) As DAReadItemArguments For i = 0 To count - 1 Dim listViewItem As ListViewItem = ItemsListView.Items(i) Dim itemId As String = listViewItem.Text argumentsArray(i) = New DAReadItemArguments("OPCLabs.KitServer.2", itemId, 50) Next Dim resultsArray() As DAVtqResult = EasyDAClient1.ReadMultipleItems(argumentsArray) For i = 0 To count - 1 Dim listViewItem As ListViewItem = ItemsListView.Items(i) Dim vtqResult As DAVtqResult = resultsArray(i) Dim vtqText As String = "" Dim exceptionText As String = "" If (vtqResult.Exception Is Nothing) Then vtqText = vtqResult.Vtq.ToString() Else exceptionText = vtqResult.Exception.Message End If listViewItem.SubItems(1).Text = vtqText listViewItem.SubItems(2).Text = exceptionText Next End Sub

The project (zipped) is attached.

File Attachment:

File Name: ListView1.zip
File Size:15 KB


We probably have to do this iteratively: If this is not quite what you wanted and does not give you enough to start on your own, let me know which parts are missing, and I will provide further examples or guidance.
One thing that may not be addressed in this version: You mentioned that you want it to operate “asynchronously”.

There are at least two possible interpretations:
1. You want that OPC methods for asynchronous reading/writing are used, between the OPC client and the OPC server. This is already taken care: We use asynchronous methods whenever possible, by default (can be changed by a parameters passed to EasyDAClient).
2. You want the OPC operation appears asynchronous to your application – e.g. the Read would be performed while the user interface stays responsive, and the list view is updates upon the arrival of the data. Currently we do not give you API to do this (besides subscriptions which is a bit of different story), but it can be done using a separate thread. Is this what you wanted?

Best regards
Attachments:
Last edit: 01 Aug 2014 12:24 by support.

Please Log in or Create an account to join the conversation.

More
01 Aug 2014 12:11 #2122 by support
From: N.
Sent: Monday, July 28, 2014 10:05 PM
To: Zbynek Zahradnik
Subject: Re: OPC Labs Contact Form - opc to listview

Hi

It's a list view for windows form !

Basically if you could do a simple example involving multiple tags reading async and value/quality/time stamp into a list view that would be nice, also several items writing async to the data source!

...

Please Log in or Create an account to join the conversation.

More
01 Aug 2014 12:10 - 01 Aug 2014 12:10 #2121 by support
On 28 Jul 2014, at 20:56, "Zbynek Zahradnik" <...> wrote:
Dear Sir,
Thank you for your interest in our products.

We probably do not have a ready-made example directly with a ListView (BTW, is that a ListView for Windows Forms, or Web Forms?), but I am ready to work with you to resolve any issues you run into, or even perhaps create an example for you, if you can describe a bit more about the requirements.

...

Best regards,
Last edit: 01 Aug 2014 12:10 by support.

Please Log in or Create an account to join the conversation.

More
01 Aug 2014 12:10 #2120 by support
From: OPC Labs Contact Form - n.
Sent: Sunday, July 27, 2014 9:50 PM
...
Subject: OPC Labs Contact Form - opc to listview

...

I am wondering fdo you have any VB.Net examples showing your SDK working with a ListView and reading/writing asynchronous ?

Please Log in or Create an account to join the conversation.

Moderators: supportvaclav.zaloudek
Time to create page: 0.155 seconds