- .NET API: added properties for Quality flags

pull/143/head
Michael Zillgith 8 years ago
parent 70c311d433
commit b00fdfde3d

@ -169,9 +169,26 @@ namespace IEC61850
/// </summary>
public class Quality
{
private UInt16 value;
private const UInt16 QUALITY_DETAIL_OVERFLOW = 4;
private const UInt16 QUALITY_DETAIL_OUT_OF_RANGE = 8;
private const UInt16 QUALITY_DETAIL_BAD_REFERENCE = 16;
private const UInt16 QUALITY_DETAIL_OSCILLATORY = 32;
private const UInt16 QUALITY_DETAIL_FAILURE = 64;
private const UInt16 QUALITY_DETAIL_OLD_DATA = 128;
private const UInt16 QUALITY_DETAIL_INCONSISTENT = 256;
private const UInt16 QUALITY_DETAIL_INACCURATE = 512;
private const UInt16 QUALITY_SOURCE_SUBSTITUTED = 1024;
private const UInt16 QUALITY_TEST = 2048;
private const UInt16 QUALITY_OPERATOR_BLOCKED = 4096;
public override string ToString ()
{
return GetValidity ().ToString ();
}
public Quality (int bitStringValue)
{
value = (UInt16)bitStringValue;
@ -195,6 +212,133 @@ namespace IEC61850
value += (ushort)validity;
}
public Validity Validity
{
get {return GetValidity ();}
set { SetValidity (value); }
}
public bool Overflow
{
get { return ((this.value & QUALITY_DETAIL_OVERFLOW) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_OVERFLOW;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_OVERFLOW));
}
}
public bool OutOfRange
{
get { return ((this.value & QUALITY_DETAIL_OUT_OF_RANGE) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_OUT_OF_RANGE;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_OUT_OF_RANGE));
}
}
public bool BadReference
{
get { return ((this.value & QUALITY_DETAIL_BAD_REFERENCE) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_BAD_REFERENCE;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_BAD_REFERENCE));
}
}
public bool Oscillatory
{
get { return ((this.value & QUALITY_DETAIL_OSCILLATORY) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_OSCILLATORY;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_OSCILLATORY));
}
}
public bool Failure
{
get { return ((this.value & QUALITY_DETAIL_FAILURE) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_FAILURE;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_FAILURE));
}
}
public bool OldData
{
get { return ((this.value & QUALITY_DETAIL_OLD_DATA) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_OLD_DATA;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_OLD_DATA));
}
}
public bool Inconsistent
{
get { return ((this.value & QUALITY_DETAIL_INCONSISTENT) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_INCONSISTENT;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_INCONSISTENT));
}
}
public bool Inaccurate
{
get { return ((this.value & QUALITY_DETAIL_INACCURATE) != 0);}
set {
if (value)
this.value |= QUALITY_DETAIL_INACCURATE;
else
this.value = (ushort) ((int) this.value & (~QUALITY_DETAIL_INACCURATE));
}
}
public bool Substituted
{
get { return ((this.value & QUALITY_SOURCE_SUBSTITUTED) != 0);}
set {
if (value)
this.value |= QUALITY_SOURCE_SUBSTITUTED;
else
this.value = (ushort) ((int) this.value & (~QUALITY_SOURCE_SUBSTITUTED));
}
}
public bool Test
{
get { return ((this.value & QUALITY_TEST) != 0);}
set {
if (value)
this.value |= QUALITY_TEST;
else
this.value = (ushort) ((int) this.value & (~QUALITY_TEST));
}
}
public bool OperatorBlocked
{
get { return ((this.value & QUALITY_OPERATOR_BLOCKED) != 0);}
set {
if (value)
this.value |= QUALITY_OPERATOR_BLOCKED;
else
this.value = (ushort) ((int) this.value & (~QUALITY_OPERATOR_BLOCKED));
}
}
}
/// <summary>

@ -454,6 +454,33 @@ namespace tests
iedServer.Stop ();
}
[Test()]
public void Quality()
{
Quality q = new Quality ();
Assert.AreEqual (false, q.Overflow);
q.Overflow = true;
Assert.AreEqual (true, q.Overflow);
q.Overflow = false;
Assert.AreEqual (false, q.Overflow);
Assert.AreEqual (Validity.GOOD, q.Validity);
q.Substituted = true;
Assert.AreEqual (true, q.Substituted);
Assert.AreEqual (false, q.Overflow);
q.Validity = Validity.QUESTIONABLE;
Assert.AreEqual (Validity.QUESTIONABLE, q.Validity);
}
}
}

Loading…
Cancel
Save