/// <summary> /// Read attribute value. /// </summary> /// <param name="it">COSEM object to read.</param> /// <param name="attributeIndex">Attribute index.</param> /// <returns>Read value.</returns> public object Read(GXDLMSObject it, int attributeIndex) { if ((it.GetAccess(attributeIndex) & AccessMode.Read) != 0) { GXReplyData reply = new GXReplyData(); if (!ReadDataBlock(Client.Read(it, attributeIndex), reply)) { if (reply.Error != (short)ErrorCode.Rejected) { throw new GXDLMSException(reply.Error); } reply.Clear(); Thread.Sleep(1000); if (!ReadDataBlock(Client.Read(it, attributeIndex), reply)) { throw new GXDLMSException(reply.Error); } } //Update data type. if (it.GetDataType(attributeIndex) == DataType.None) { it.SetDataType(attributeIndex, reply.DataType); } return(Client.UpdateValue(it, attributeIndex, reply.Value)); } return(null); }
public byte[] Read(GXDLMSObject it, int attributeOrdinal) { lastTransaction = DateTime.Now; byte[] tmp = client.Read(it, attributeOrdinal)[0]; GXLogWriter.WriteLog(string.Format("Reading object {0} from interface {1}", it.LogicalName, it.ObjectType), tmp); return(tmp); }
/// <summary> /// This method is used to update meter firmware. /// </summary> /// <param name="target"></param> public void ImageUpdate(GXDLMSImageTransfer target, byte[] identification, byte[] data) { //Check that image transfer ia enabled. GXReplyData reply = new GXReplyData(); ReadDataBlock(Client.Read(target, 5), reply); Client.UpdateValue(target, 5, reply.Value); if (!target.ImageTransferEnabled) { throw new Exception("Image transfer is not enabled"); } //Step 1: Read image block size. ReadDataBlock(Client.Read(target, 2), reply); Client.UpdateValue(target, 2, reply.Value); // Step 2: Initiate the Image transfer process. ReadDataBlock(target.ImageTransferInitiate(Client, identification, data.Length), reply); // Step 3: Transfers ImageBlocks. int imageBlockCount; ReadDataBlock(target.ImageBlockTransfer(Client, data, out imageBlockCount), reply); //Step 4: Check the completeness of the Image. ReadDataBlock(Client.Read(target, 3), reply); Client.UpdateValue(target, 3, reply.Value); // Step 5: The Image is verified; ReadDataBlock(target.ImageVerify(Client), reply); // Step 6: Before activation, the Image is checked; //Get list to images to activate. ReadDataBlock(Client.Read(target, 7), reply); Client.UpdateValue(target, 7, reply.Value); bool bFound = false; foreach (GXDLMSImageActivateInfo it in target.ImageActivateInfo) { if (it.Identification == identification) { bFound = true; break; } } //Read image transfer status. ReadDataBlock(Client.Read(target, 6), reply); Client.UpdateValue(target, 6, reply.Value); if (target.ImageTransferStatus != Gurux.DLMS.Objects.Enums.ImageTransferStatus.VerificationSuccessful) { throw new Exception("Image transfer status is " + target.ImageTransferStatus.ToString()); } if (!bFound) { throw new Exception("Image not found."); } //Step 7: Activate image. ReadDataBlock(target.ImageActivate(Client), reply); }
public byte[] Read(GXDLMSObject it, int attributeOrdinal) { byte[] tmp = client.Read(it, attributeOrdinal)[0]; return(tmp); }
public byte[] Read(GXDLMSObject it, int attributeOrdinal) { byte[] tmp = client.Read(it, attributeOrdinal)[0]; GXLogWriter.WriteLog(string.Format("Reading object {0}, interface {1}", it.LogicalName, it.ObjectType), tmp); return(tmp); }