hylasoft-usa / h-opc

OPC client made simpler, for UA and DA
MIT License
300 stars 144 forks source link

GetDataType always returns Int16 #79

Open mtorre-hal opened 6 years ago

mtorre-hal commented 6 years ago

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

jmbeach commented 6 years ago

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.

MartinPicciana commented 6 years ago

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.

gc87 commented 1 year ago

@MartinPicciana Cool, it works!