Пример #1
0
 /// <summary>
 /// Read attribute value.
 /// </summary>
 public object Read(GXDLMSObject it, int attributeIndex)
 {
     byte[] reply = ReadDataBlock(Client.Read(it.Name, it.ObjectType, attributeIndex)[0]);
     //Update data type.
     if (it.GetDataType(attributeIndex) == DataType.None)
     {
         it.SetDataType(attributeIndex, Client.GetDLMSDataType(reply));
     }
     return(Client.UpdateValue(reply, it, attributeIndex));
 }
 public void Write(GXDLMSObject obj, object target, int index, List <object> UpdatedObjects)
 {
     for (int it = 1; it != (obj as IGXDLMSBase).GetAttributeCount() + 1; ++it)
     {
         object value;
         if (obj.GetDirty(it, out value))
         {
             //Read DLMS data type if not known.
             DataType type = obj.GetDataType(it);
             if (type == DataType.None)
             {
                 byte[] data = m_Cosem.Read(obj.Name, obj.ObjectType, it)[0];
                 data = ReadDataBlock(data, "Write object type " + obj.ObjectType);
                 type = m_Cosem.GetDLMSDataType(data);
                 if (type == DataType.None)
                 {
                     throw new Exception("Failed to write value. Data type not set.");
                 }
                 obj.SetDataType(it, type);
             }
             try
             {
                 foreach (byte[] tmp in m_Cosem.Write(obj.Name, value, type, obj.ObjectType, it))
                 {
                     ReadDataBlock(tmp, "Write object");
                 }
                 obj.ClearDirty(it);
                 //Read data once again to make sure it is updated.
                 byte[] data = m_Cosem.Read(obj.Name, obj.ObjectType, it)[0];
                 data  = ReadDataBlock(data, "Read object " + obj.ObjectType);
                 value = m_Cosem.GetValue(data);
                 obj.SetValue(it, value);
             }
             catch (GXDLMSException ex)
             {
                 if (ex.ErrorCode == 3)
                 {
                     throw new Exception("Read/Write Failed.");
                 }
                 else
                 {
                     throw ex;
                 }
             }
         }
     }
 }