/// <summary> /// Updates the metadata for a tag. /// </summary> private bool UpdateTagMetadata( UnderlyingSystemTag tag, Opc.Ua.Test.DataGenerator generator) { switch (tag.TagType) { case UnderlyingSystemTagType.Analog: { if (tag.EuRange != null) { double[] range = new double[tag.EuRange.Length]; for (int ii = 0; ii < tag.EuRange.Length; ii++) { range[ii] = tag.EuRange[ii]+1; } tag.EuRange = range; } break; } case UnderlyingSystemTagType.Digital: case UnderlyingSystemTagType.Enumerated: { if (tag.Labels != null) { string[] labels = new string[tag.Labels.Length]; for (int ii = 0; ii < tag.Labels.Length; ii++) { labels[ii] = generator.GetRandomString(); } tag.Labels = labels; } break; } default: { return false; } } return true; }
/// <summary> /// Updates the value of an tag. /// </summary> private bool UpdateTagValue( UnderlyingSystemTag tag, Opc.Ua.Test.DataGenerator generator) { // don't update writeable tags. if (tag.IsWriteable) { return false; } // check if a range applies to the value. int high = 0; int low = 0; switch (tag.TagType) { case UnderlyingSystemTagType.Analog: { if (tag.EuRange != null && tag.EuRange.Length >= 2) { high = (int)tag.EuRange[0]; low = (int)tag.EuRange[1]; } break; } case UnderlyingSystemTagType.Digital: { high = 1; low = 0; break; } case UnderlyingSystemTagType.Enumerated: { if (tag.Labels != null && tag.Labels.Length > 0) { high = tag.Labels.Length-1; low = 0; } break; } } // select a value in the range. int value = -1; if (high > low) { value = (generator.GetRandomUInt16()%(high - low + 1)) + low; } // cast value to correct type or generate a random value. switch (tag.DataType) { case UnderlyingSystemDataType.Integer1: { if (value == -1) { tag.Value = generator.GetRandomSByte(); } else { tag.Value = (sbyte)value; } break; } case UnderlyingSystemDataType.Integer2: { if (value == -1) { tag.Value = generator.GetRandomInt16(); } else { tag.Value = (short)value; } break; } case UnderlyingSystemDataType.Integer4: { if (value == -1) { tag.Value = generator.GetRandomInt32(); } else { tag.Value = (int)value; } break; } case UnderlyingSystemDataType.Real4: { if (value == -1) { tag.Value = generator.GetRandomFloat(); } else { tag.Value = (float)value; } break; } case UnderlyingSystemDataType.String: { tag.Value = generator.GetRandomString(); break; } } tag.Timestamp = DateTime.UtcNow; return true; }