h-opc icon indicating copy to clipboard operation
h-opc copied to clipboard

GetDataType always returns Int16

Open mtorre-hal opened this issue 6 years ago • 3 comments

I am using h-opc under DA only. It's working fine, but calling GetDataType(tag) always returns Int16, regardless of the Data Type defined at server side. Am I doing something wrong? Please advise. Regards

mtorre-hal avatar Mar 01 '18 14:03 mtorre-hal

Considering that my unit test only tests to see if we can get back a short, this seems entirely possible. I'll put this on my todo list to test.

jmbeach avatar Mar 02 '18 14:03 jmbeach

I Wrote a correction in my fork.

public System.Type GetDataType(string tag)
    {
      var item = new OpcDa.Item { ItemName = tag };
      OpcDa.ItemProperty result;
      try
      {
        var propertyCollection = _server.GetProperties(new[] { item }, new[] { new OpcDa.PropertyID(1) }, true)[0];
        result = propertyCollection[0];
      }
      catch (NullReferenceException)
      {
        throw new OpcException("Could not find node because server not connected.");
      }
      return (System.Type)result.Value;
    }

The last parameter in _server.GetProperties is changed to "true". This perform the read of the value of property.

The second change is to return the value of the property. The original implementation returns the type of the property (the cannonical data type), this property is an Int16 value. This value determines the data type.

Hope this can help you.

MartinPicciana avatar Aug 28 '18 19:08 MartinPicciana

@MartinPicciana Cool, it works!

gc87 avatar Sep 04 '23 10:09 gc87