LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

LabVIEW DSC 2011 / OPC Client IO Server / Can I write to the OPC Server using OPC Groups?

Hi

 

I am using LabVIEW DSC module as a OPC client. My Shared Variables are binded to automation system OPC Server via "OPC Client IO Server".

 

On the OPC Server side it seems that the every write commands comes like one item at time, not like grouped.

 

Now I have tested this with the NI OPC Server as server and KepServer and LabVIEW DSC IO Server as OPC Clients.

 

When I use the NI OPC Server : OPC Diagnostics there are different events messages when the update request comes from KepServer or LabVIEW DSC.

 

 

There are log files on attachements for both write events.

0 Kudos
Message 1 of 12
(4,755 Views)

Here description of the test example.

0 Kudos
Message 2 of 12
(4,718 Views)

On the LabVIEW Help there is description for the Update rate (ms) like below:

 

"Update rate (ms)—Determines the amount of time that passes, in milliseconds, before the OPC server communicates updated values to the Shared Variable Engine (SVE). If the Update rate (ms) is less than the actual update rate of the OPC server, the OPC server communicates updated values using the actual update rate. Entering a value of 0 returns the fastest update rate possible from the OPC server. The default is 1,000. "

 

Is this parameter ONLY for data from OPC Server to SVE. Write values from the SVE to OPC Server are sended when the data value is changed?

0 Kudos
Message 3 of 12
(4,709 Views)

Hello Pentsi,

 

Unfortunately, there is no way to write OPC items in a block in LabVIEW at present.

 

Writes using shared variables or the OPC Tag API (from in the DSC Module) perform writes individually.

If the main issue is the DSC read/write performance, then this Knowledge Base may be helpful:

http://digital.ni.com/public.nsf/allkb/63C043359F1E12538625726E005BCD0C?OpenDocument

Kind Regards,
Thierry C - CLA, CTA - Senior R&D Engineer (Former Support Engineer) - National Instruments
If someone helped you, let them know. Mark as solved and/or give a kudo. 😉
0 Kudos
Message 4 of 12
(4,683 Views)

Hello!

 

On the"LabVIEW DSC Module OPC Client Performance Considerations" page there descriptio like below:

 

"For example, if you configure an update rate of 200 ms, then the OPC client will receive updates from the OPC server no faster than 200 ms.  If any OPC data items have updated in the OPC server during the 200 ms interval, those updates will be combined together in a single message and sent to the OPC client (in this case, the DSC OPC client I/O server). "

 

This is OK and that way the data is updated from the OPC Server to where the OPC Client IO Server is linked.

 

Problem in my case is that "How I can make same same for write command from the OPC Client IO Server to OPC Server?".

 

Because every time when I write new value to the Shared Variable the new message is sended by OPC Client IO Server to the OPC Server.

 

My wish is that I can update values to several Shared Variables and after that say to the OPC Client IO Server that send changes to the OPC Server.

 

But I thinks so that this is not possible at a moment? Or How?

 

- pentsi -

0 Kudos
Message 5 of 12
(4,675 Views)

Hello Pentsi,

 

Group writes are at this moment not possible with the DSC Module.

Can you provide me some more information about why (or for which purpose) you exactly need this?

 

This way we can search for a possible work-around.

Kind Regards,
Thierry C - CLA, CTA - Senior R&D Engineer (Former Support Engineer) - National Instruments
If someone helped you, let them know. Mark as solved and/or give a kudo. 😉
0 Kudos
Message 6 of 12
(4,643 Views)

Hello

The backround of this it that the Automation System OPC Server slowdown bacause of our client.



Our software sturture is like below:

LabVIEW application

There is about 50 OPC Tags (Booleans and Doubles) that we need to write.
We have done this using Shared Variable (Scalar items NO Vector) that are binded via OPC Client IO Server to the Automation System OPC Server.

From the LabVIEW application we writes SetPoints and RunCommands to these Shared Variables and OPC Client IO Server sends it the Automation System OPC Server.

Because I have not found the way write data to the Shared Variables from the LabVIEW "simultaneously" I have do this like in sequence (using Loop).

Because of this there occurs 50 update events on the Shared Variable & OPC Client IO Server and thats why there is 50 update messages sended to the Automation System OPC Server and only ONE item in message.

I wish is at I can set values to the Shared Variables and NO Events is generated every time and there is one update rate paremeter
what limits the updating value to the OPC Server.


Below is specification of the Honeywell OPC Server and the is limit that one client can update values only once /second.
I our case the the is "50" update command / second and that is cause of slow down the Honeywell system.



The Experion OPC Data Access Server provides OPC Data Access Clients with the capability to view Experion point data for the purposes of control and plant-wide historization.

"OPC Client Write Support"
Number of list writes to OPC server per second = 1
Maximum no. of items per list supported (write) = 2000
Sustained write rate (items/second) = 500


If we slow down our update rate to the 50 seconds, this is help for this problem but that way our software is "inapplicable".

Another way is use the OPC Server <--> OPC Server link software (LinkMaster), but is again new software to the system.
LabVIEW DSC paggage is that why acquired to handle OPC communication easier to use.


- Pentsi -

0 Kudos
Message 7 of 12
(4,639 Views)

Hello Pentsi,

 

I have received confirmation (from the PSE in the US) that DSC doesn't support group writes

 

There however work-arounds that might provide a solution:

- The first solution I had in mind was like this. Update the 50 OPC items as fast as possible.

Then use a 51st item as synchronization OPC item to check/indicate if new data has arrived/has been set/is available.


So LabVIEW sets 50 OPC values as fast as possible. The 51st value becomes goes from false to true when the first 50 values are written.
When this (51st) value is true on the OPC server you can read out the first 50 values (from the non-LabVIEW side). When you've read out these values, then you can set the 51st value back to false (from the non-LabVIEW side).

In the meanwhile at the LabVIEW side you wait until the 51st value goes back from true to false.

When it becomes false, then you write again those 50 values and afterwards set the 51st synchronization value from false to true.

And this keeps on going...

 

Note: Keep in mind that you only have to monitor one event at the side of the Automation System OPC Server in this case (the 51st) and based on an event occuring over there you can just do a group read of the 50 others. Also keep in mind that the maximum rate (6500 updates per second) from inside LabVIEW with the DSC Module OPC client I/O server was also mentioned in this document (http://digital.ni.com/public.nsf/allkb/63C043359F1E12538625726E005BCD0C?OpenDocument).

 

Could this be a possible solution for your problem?

 

If you're using one of the OPC servers in this list (http://zone.ni.com/devzone/cda/tut/p/id/6417#toc19), then you can also use NI OPC Servers to update tags instead, which supports a faster update rate.

Kind Regards,
Thierry C - CLA, CTA - Senior R&D Engineer (Former Support Engineer) - National Instruments
If someone helped you, let them know. Mark as solved and/or give a kudo. 😉
0 Kudos
Message 8 of 12
(4,624 Views)

Been a long time since I've done any DSC work, have you tried using a single tag as an array variable that contains all of your data values. I've also used clusters that contain many data values as a package of info, flatten that into a binary string and write that to a singe string tag configured as a binary string. This causes you to have to decode the binary package when you read the values back, but it contains all of the info in one tag.

Message 9 of 12
(4,602 Views)

Hi

 

Normally on the automation systems there is more that 10 000 OPC TAGs. Boolean, Floats ja Arrays (Vectors).

 

But when our software have to adapt to the customer system and thats why we have OPC Server and OPC Client interfaces available.

 

Also we have support for many data types. In this case the problem is the automation system OPC TAG structure. It is NOT easy to say for them that change

your system variable sturcture and after that you can by our application add on to your system.

 

Thats why we try to find fastest and low cost solution to make this project to goal.

 

At a moment I am testing the own client application what is made with LabVIEW using opcauto.dll & ActiveX interface...

0 Kudos
Message 10 of 12
(4,597 Views)