Professional OPC
Development Tools

logos

Server Auto Tag Creation Doesn't Work with QuickOPC

More
04 Mar 2018 08:37 #6101 by support
Yes, this is the right way

Best regards

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

More
03 Mar 2018 23:57 #6100 by jgyenese
It is our own OPC server for our SCADA application. It is built using SlikDA5 and is very simple - it is used primarily for inter-application sharing of data, not for reading from any field devices. That's why we wanted to add tags dynamically.

I was able to get it working after reviewing your code. The only problem was I am using VB6 which doesn't support initializers, so I had to set the value directly. However, I could not set the requested data type this way:
Dim arg as DAItemValueArguments
arg.ItemDescriptor.RequestedDataType = VarTypes.VarTypes_R8

I had to go down an another step like this:
Dim arg as DAItemValueArguments
arg.ItemDescriptor.RequestedDataType.InternalValue = VarTypes.VarTypes_R8

It does work. Is this the proper way to do this?

Thank you.

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

More
02 Mar 2018 13:00 #6098 by support
Hello,
this should be possible.

For single item write:
// This example shows how to write a value into a single item, specifying its requested data type.
 
using OpcLabs.BaseLib.ComInterop;
using OpcLabs.EasyOpc.DataAccess;
 
namespace DocExamples
{
    namespace _EasyDAClient
    {
        partial class WriteItemValue
        {
            public static void RequestedDataType()
            {
                var client = new EasyDAClient();
 
                client.WriteItemValue("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 12345,
                    VarTypes.I4);   // <-- the requested data type
            }
        }
    }
}

For multiple-items write:
// Shows how to write into multiple OPC items using a single method call, specifying their requested data types.
 
using System;
using System.Diagnostics;
using OpcLabs.BaseLib.ComInterop;
using OpcLabs.BaseLib.OperationModel;
using OpcLabs.EasyOpc.DataAccess;
using OpcLabs.EasyOpc.DataAccess.OperationModel;
 
namespace DocExamples
{
    namespace _EasyDAClient
    {
        partial class WriteMultipleItemValues
        {
            public static void RequestedDataType()
            {
                var client = new EasyDAClient();
 
                Console.WriteLine("Writing multiple item values...");
                OperationResult[] resultArray = client.WriteMultipleItemValues(new[] { 
                    new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I2", 12345) 
                        { ItemDescriptor = { RequestedDataType = VarTypes.I2}}, // <-- the requested data type
                    new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R4", 234.56)
                        { ItemDescriptor = { RequestedDataType = VarTypes.R4}}  // <-- the requested data type 
                });
 
 
                for (int i = 0; i < resultArray.Length; i++)
                {
                    Debug.Assert(resultArray[i] != null);
                    if (resultArray[i].Succeeded)
                        Console.WriteLine("Result {0}: success", i);
                    else
                    {
                        Debug.Assert(resultArray[i].Exception != null);
                        Console.WriteLine("Result {0}: {1}", i, resultArray[i].Exception.GetBaseException().Message);
                    }
                }
 
                Console.WriteLine("Reading multiple item values...");
                ValueResult[] valueResultArray = client.ReadMultipleItemValues("OPCLabs.KitServer.2",
                    new DAItemDescriptor[] { "Simulation.Register_I2", "Simulation.Register_R4" });
 
                for (int i = 0; i < valueResultArray.Length; i++)
                {
                    Debug.Assert(valueResultArray[i] != null);
                    Console.WriteLine("valueResultArray[{0}]: {1}", i, valueResultArray[i]);
                }
            }
        }
    }
}

Which OPC server are you using please?

Best regards

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

More
01 Mar 2018 23:56 #6095 by jgyenese
I have an OPC server that will automatically create new tags if the client requests it in one of two ways:
1. By calling the server Tag Validation method.
2. By calling the server Add Tag method.

I send an array of values to the server using DAClient.WriteMultipleItemValues. According to the server logs, QuickOPC is indeed calling the Add Tag method, but it doesn't include a requested Data Type. The server then creates a tag using a default type which is a long integer. But I need to send more than just integers.

Is there some way I can tell QuickOPC to send Data Type information to the server? Or can I make some other call to accomplish this goal?

Thank you.

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

Moderators: support
Time to create page: 0.184 seconds

      

 Recommend this on Google