Skip to content

Commit cc31bb3

Browse files
authored
Merge pull request #126 from lily-maxfield/master
Adding alarm messages 1000, 1001
2 parents 458e558 + b23ac62 commit cc31bb3

File tree

5 files changed

+189
-1
lines changed

5 files changed

+189
-1
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using OpenProtocolInterpreter.Alarm;
3+
4+
namespace MIDTesters.Alarm
5+
{
6+
[TestClass]
7+
[TestCategory("Alarm")]
8+
public class TestMid1000 : DefaultMidTests<Mid1000>
9+
{
10+
[TestMethod]
11+
[TestCategory("Revision 1"), TestCategory("ASCII")]
12+
public void Mid1000Revision1()
13+
{
14+
string pack = "00911000001 ABCDE2017-12-01:20:12:4500201700009040000000ALARMTEXT017010010100000001";
15+
var mid = _midInterpreter.Parse<Mid1000>(pack);
16+
17+
Assert.IsNotNull(mid.AlarmCode);
18+
Assert.IsNotNull(mid.Time);
19+
Assert.IsNotNull(mid.AlarmDataFields);
20+
Assert.AreEqual(2, mid.NumberOfDataFields);
21+
AssertEqualPackages(pack, mid);
22+
}
23+
24+
[TestMethod]
25+
[TestCategory("Revision 1"), TestCategory("ByteArray")]
26+
public void Mid1000ByteRevision1()
27+
{
28+
string pack = "00911000001 ABCDE2017-12-01:20:12:4500201700009040000000ALARMTEXT017010010100000001";
29+
byte[] bytes = GetAsciiBytes(pack);
30+
var mid = _midInterpreter.Parse<Mid1000>(bytes);
31+
32+
Assert.IsNotNull(mid.AlarmCode);
33+
Assert.IsNotNull(mid.Time);
34+
Assert.IsNotNull(mid.AlarmDataFields);
35+
Assert.AreEqual(2, mid.NumberOfDataFields);
36+
AssertEqualPackages(bytes, mid);
37+
}
38+
}
39+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using OpenProtocolInterpreter.Alarm;
3+
4+
namespace MIDTesters.Alarm
5+
{
6+
[TestClass]
7+
[TestCategory("Alarm")]
8+
public class TestMid1001 : DefaultMidTests<Mid1001>
9+
{
10+
[TestMethod]
11+
[TestCategory("ASCII")]
12+
public void Mid1001AllRevisions()
13+
{
14+
string pack = @"00201001 ";
15+
var mid = _midInterpreter.Parse(pack);
16+
17+
Assert.AreEqual(typeof(Mid1001), mid.GetType());
18+
AssertEqualPackages(pack, mid, true);
19+
}
20+
21+
[TestMethod]
22+
[TestCategory("ByteArray")]
23+
public void Mid1001ByteAllRevisions()
24+
{
25+
string pack = @"00201001 ";
26+
byte[] bytes = GetAsciiBytes(pack);
27+
var mid = _midInterpreter.Parse(bytes);
28+
29+
Assert.AreEqual(typeof(Mid1001), mid.GetType());
30+
AssertEqualPackages(bytes, mid, true);
31+
}
32+
}
33+
}

src/OpenProtocolInterpreter/Alarm/AlarmMessages.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public AlarmMessages() : base()
2222
{ Mid0076.MID, new MidCompiledInstance(typeof(Mid0076)) },
2323
{ Mid0077.MID, new MidCompiledInstance(typeof(Mid0077)) },
2424
{ Mid0078.MID, new MidCompiledInstance(typeof(Mid0078)) },
25+
{ Mid1000.MID, new MidCompiledInstance(typeof(Mid1000)) },
26+
{ Mid1001.MID, new MidCompiledInstance(typeof(Mid1001)) },
2527
};
2628
}
2729

@@ -35,6 +37,6 @@ public AlarmMessages(InterpreterMode mode) : this()
3537
FilterSelectedMids(mode);
3638
}
3739

38-
public override bool IsAssignableTo(int mid) => mid > 69 && mid < 79;
40+
public override bool IsAssignableTo(int mid) => mid > 69 && mid < 79 || mid > 999 && mid < 1002;
3941
}
4042
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
5+
namespace OpenProtocolInterpreter.Alarm
6+
{
7+
/// <summary>
8+
/// Alarm
9+
/// <para>An alarm has appeared in the controller. The current alarm is uploaded from the controller to the integrator.
10+
/// This MID replace the old alarm MID 0071.</para>
11+
/// <para>Message sent by: Controller</para>
12+
/// <para>Answer: <see cref="Mid0071"/> Alarm status acknowledge</para>
13+
/// </summary>
14+
public class Mid1000 : Mid, IAlarm, IController, IAcknowledgeable<Mid1001>
15+
{
16+
public const int MID = 1000;
17+
18+
public string AlarmCode
19+
{
20+
get => GetField(1, DataFields.AlarmCode).Value;
21+
set => GetField(1, DataFields.AlarmCode).SetValue(value);
22+
}
23+
public DateTime Time
24+
{
25+
get => GetField(1, DataFields.Time).GetValue(OpenProtocolConvert.ToDateTime);
26+
set => GetField(1, DataFields.Time).SetValue(OpenProtocolConvert.ToString, value);
27+
}
28+
public int NumberOfDataFields => AlarmDataFields.Count;
29+
public List<VariableDataField> AlarmDataFields { get; set; }
30+
31+
public Mid1000() : this(DEFAULT_REVISION)
32+
{
33+
34+
}
35+
36+
public Mid1000(Header header) : base(header)
37+
{
38+
AlarmDataFields = [];
39+
}
40+
41+
public Mid1000(int revision) : this(new Header()
42+
{
43+
Mid = MID,
44+
Revision = revision
45+
})
46+
{
47+
48+
}
49+
50+
public override string Pack()
51+
{
52+
GetField(1, DataFields.NumberOfDataFields).SetValue(OpenProtocolConvert.ToString, AlarmDataFields.Count);
53+
GetField(1, DataFields.EachAlarmDataField).Value = OpenProtocolConvert.ToString(AlarmDataFields);
54+
return base.Pack();
55+
}
56+
57+
public override Mid Parse(string package)
58+
{
59+
Header = ProcessHeader(package);
60+
var dataFieldsField = GetField(1, DataFields.EachAlarmDataField);
61+
dataFieldsField.Size = Header.Length - dataFieldsField.Index;
62+
ProcessDataFields(package);
63+
AlarmDataFields = VariableDataField.ParseAll(dataFieldsField.Value).ToList();
64+
return this;
65+
}
66+
67+
protected override Dictionary<int, List<DataField>> RegisterDatafields()
68+
{
69+
return new Dictionary<int, List<DataField>>()
70+
{
71+
{
72+
1, new List<DataField>()
73+
{
74+
DataField.String(DataFields.AlarmCode, 20, 5, PaddingOrientation.RightPadded, false),
75+
DataField.Timestamp(DataFields.Time, 25, false),
76+
DataField.Number(DataFields.NumberOfDataFields, 44, 3, false),
77+
DataField.Volatile(DataFields.EachAlarmDataField, 47, false)
78+
}
79+
}
80+
};
81+
}
82+
83+
protected enum DataFields
84+
{
85+
AlarmCode,
86+
Time,
87+
NumberOfDataFields,
88+
EachAlarmDataField
89+
}
90+
}
91+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace OpenProtocolInterpreter.Alarm
2+
{
3+
/// <summary>
4+
/// Alarm status acknowledge
5+
/// <para>Acknowledge for <see cref="Mid1000"/> Alarm</para>
6+
/// <para>Message sent by: Integrator</para>
7+
/// <para>Answer : None</para>
8+
/// </summary>
9+
public class Mid1001 : Mid, IAlarm, IIntegrator, IAcknowledge
10+
{
11+
public const int MID = 1001;
12+
13+
public Mid1001() : base(MID, DEFAULT_REVISION)
14+
{
15+
16+
}
17+
18+
public Mid1001(Header header) : base(header)
19+
{
20+
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)