QuerySystemStatusReportResponse.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Text;
  6. namespace VeederRoot_ATG_Console.MessageEntity.Incoming
  7. {
  8. /// <summary>
  9. /// i|I101
  10. /// </summary>
  11. public class QuerySystemStatusReportResponse : IncomingMessageBase
  12. {
  13. public enum Alarm_Warning_Category
  14. {
  15. AllFunctionNormal = 00,
  16. SystemAlarm = 01,
  17. TankAlarm = 02,
  18. LiquidSensorAlarm = 03,
  19. VaporSensorAlarm = 04,
  20. InputAlarm = 05,
  21. VolumetricLineLeakAlarm = 06,
  22. GroundwaterSensorAlarm = 07,
  23. TypeASensorAlarm = 08,
  24. TypeBSensorAlarm = 12,
  25. UniversalSensorAlarm = 13,
  26. AutoDialFaxAlarm = 14,
  27. MechanicalDispenserInterfaceAlarm = 18,
  28. ELectronicDispenserInterfaceAlarm = 19,
  29. ProductAlarm = 20,
  30. PressureLineLeakAlarm = 21,
  31. WirelessPlldAlarm = 26,
  32. ExternallyDetectedAlarm_NOT_REPORTED_BY_CONSOLE = 99,
  33. }
  34. public DateTime? CurrentDateAndTime
  35. {
  36. get
  37. {
  38. if (base.FunctionCode.Item1 == MessageFormat.Display)
  39. return null;
  40. return DateTime.ParseExact(
  41. Encoding.ASCII.GetString(base.DataFieldAndOptionalCheckSumAndETX.Take(10).ToArray()),
  42. "yyMMddHHmm", CultureInfo.InvariantCulture);
  43. }
  44. }
  45. public List<QuerySystemStatusReportData> QuerySystemStatusReportDatas
  46. {
  47. get
  48. {
  49. //6 is the length `&&` and 4 bytes check sum
  50. var howMany = (base.DataFieldAndOptionalCheckSumAndETX.Skip(10).Count() - 6) % 6;
  51. var datas = new List<QuerySystemStatusReportData>();
  52. for (int i = 0; i < howMany; i++)
  53. {
  54. datas[i] =
  55. new QuerySystemStatusReportData(
  56. base.DataFieldAndOptionalCheckSumAndETX.Skip(10).Skip(3 * i).Take(3).ToArray());
  57. }
  58. return datas;
  59. }
  60. }
  61. public class QuerySystemStatusReportData
  62. {
  63. private static List<Tuple<int[], List<Tuple<int, string>>>> alarm_Type_Number_Mapping
  64. = new List<Tuple<int[], List<Tuple<int, string>>>>();
  65. static QuerySystemStatusReportData()
  66. {
  67. var aa01 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 1 }, new List<Tuple<int, string>>());
  68. aa01.Item2.Add(new Tuple<int, string>(1, "Printer Out Of Paper"));
  69. aa01.Item2.Add(new Tuple<int, string>(2, "Printer Error"));
  70. aa01.Item2.Add(new Tuple<int, string>(3, "EEPROM Configuration Error"));
  71. aa01.Item2.Add(new Tuple<int, string>(4, "Battery Off"));
  72. aa01.Item2.Add(new Tuple<int, string>(5, "Too Many Tanks"));
  73. aa01.Item2.Add(new Tuple<int, string>(6, "System Security Warning"));
  74. aa01.Item2.Add(new Tuple<int, string>(7, "ROM Revision Warning"));
  75. aa01.Item2.Add(new Tuple<int, string>(8, "Remote Display Communications Error"));
  76. aa01.Item2.Add(new Tuple<int, string>(9, "Autodial Error"));
  77. aa01.Item2.Add(new Tuple<int, string>(10, "Software Module Warning"));
  78. aa01.Item2.Add(new Tuple<int, string>(11, "Tank Test Shutdown Warning"));
  79. aa01.Item2.Add(new Tuple<int, string>(12, "Protective Cover Alarm"));
  80. aa01.Item2.Add(new Tuple<int, string>(13, "BIR Shift Close Pending"));
  81. aa01.Item2.Add(new Tuple<int, string>(14, "BIR Daily Close Pending"));
  82. aa01.Item2.Add(new Tuple<int, string>(15, "PC(H8) Revision Warning"));
  83. aa01.Item2.Add(new Tuple<int, string>(16, "System Self Test Error"));
  84. aa01.Item2.Add(new Tuple<int, string>(17, "System Clock Incorrect Warning"));
  85. aa01.Item2.Add(new Tuple<int, string>(18, "System Device Poll Timeout"));
  86. alarm_Type_Number_Mapping.Add(aa01);
  87. var aa02 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 2 }, new List<Tuple<int, string>>());
  88. aa02.Item2.Add(new Tuple<int, string>(1, "Tank Setup Data Warning"));
  89. aa02.Item2.Add(new Tuple<int, string>(2, "Tank Leak Alarm"));
  90. aa02.Item2.Add(new Tuple<int, string>(3, "Tank High Water Alarm"));
  91. aa02.Item2.Add(new Tuple<int, string>(4, "Tank Overfill Alarm"));
  92. aa02.Item2.Add(new Tuple<int, string>(5, "Tank Low Product Alarm"));
  93. aa02.Item2.Add(new Tuple<int, string>(6, "Tank Sudden Loss Alarm"));
  94. aa02.Item2.Add(new Tuple<int, string>(7, "Tank High Product Alarm"));
  95. aa02.Item2.Add(new Tuple<int, string>(8, "Tank Invalid Fuel Level Alarm"));
  96. aa02.Item2.Add(new Tuple<int, string>(9, "Tank Probe Out Alarm"));
  97. aa02.Item2.Add(new Tuple<int, string>(10, "Tank High Water Warning"));
  98. aa02.Item2.Add(new Tuple<int, string>(11, "Tank Delivery Needed Warning"));
  99. aa02.Item2.Add(new Tuple<int, string>(12, "Tank Maximum Product Alarm"));
  100. aa02.Item2.Add(new Tuple<int, string>(13, "Tank Gross Leak Test Fail Alarm"));
  101. aa02.Item2.Add(new Tuple<int, string>(14, "Tank Periodic Leak Test Fail Alarm"));
  102. aa02.Item2.Add(new Tuple<int, string>(15, "Tank Annual Leak Test Fail Alarm"));
  103. aa02.Item2.Add(new Tuple<int, string>(16, "Tank Periodic Test Needed Warning"));
  104. aa02.Item2.Add(new Tuple<int, string>(17, "Tank Annual Test Needed Warning"));
  105. aa02.Item2.Add(new Tuple<int, string>(18, "Tank Periodic Test Needed Alarm"));
  106. aa02.Item2.Add(new Tuple<int, string>(19, "Tank Annual Test Needed Alarm"));
  107. aa02.Item2.Add(new Tuple<int, string>(20, "Tank Leak Test Active"));
  108. aa02.Item2.Add(new Tuple<int, string>(21, "Tank No CSLD Idle Time Warning"));
  109. aa02.Item2.Add(new Tuple<int, string>(22, "Tank Siphon Break Active Warning"));
  110. aa02.Item2.Add(new Tuple<int, string>(23, "Tank CSLD Rate Increase Warning"));
  111. aa02.Item2.Add(new Tuple<int, string>(24, "Tank AccuChart Calibration Warning"));
  112. aa02.Item2.Add(new Tuple<int, string>(25, "Tank HRM Reconciliation Warning"));
  113. aa02.Item2.Add(new Tuple<int, string>(26, "Tank HRM Reconciliation Alarm"));
  114. aa02.Item2.Add(new Tuple<int, string>(27, "Tank Clod Temperature Warning"));
  115. aa02.Item2.Add(new Tuple<int, string>(28, "Tank Missing Delivery Ticket Warning"));
  116. aa02.Item2.Add(new Tuple<int, string>(29, "Tank or Line Gross Leak Alarm"));
  117. alarm_Type_Number_Mapping.Add(aa02);
  118. var aa03_04_07_08_12_13 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 3, 4, 7, 8, 12, 13 },
  119. new List<Tuple<int, string>>());
  120. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(2, "Sensor Setup Data Warning"));
  121. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(3, "Sensor Fuel Alarm"));
  122. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(4, "Sensor Out Alarm"));
  123. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(5, "Sensor Short Alarm"));
  124. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(6, "Sensor Water Alarm"));
  125. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(7, "Sensor Water Out Alarm"));
  126. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(8, "Sensor High Liquid Alarm"));
  127. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(9, "Sensor Low Liquid Alarm"));
  128. aa03_04_07_08_12_13.Item2.Add(new Tuple<int, string>(10, "Sensor Liquid Warning"));
  129. alarm_Type_Number_Mapping.Add(aa03_04_07_08_12_13);
  130. var aa05 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 5 },
  131. new List<Tuple<int, string>>());
  132. aa05.Item2.Add(new Tuple<int, string>(1, "Input Setup Data Warning"));
  133. aa05.Item2.Add(new Tuple<int, string>(2, "Input Normal"));
  134. aa05.Item2.Add(new Tuple<int, string>(3, "Input Alarm"));
  135. alarm_Type_Number_Mapping.Add(aa05);
  136. var aa06 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 6 }, new List<Tuple<int, string>>());
  137. aa06.Item2.Add(new Tuple<int, string>(1, "VLLD "));
  138. aa06.Item2.Add(new Tuple<int, string>(2, "Tank Leak Alarm"));
  139. aa06.Item2.Add(new Tuple<int, string>(3, "Tank High Water Alarm"));
  140. aa06.Item2.Add(new Tuple<int, string>(4, "Tank Overfill Alarm"));
  141. aa06.Item2.Add(new Tuple<int, string>(5, "Tank Low Product Alarm"));
  142. aa06.Item2.Add(new Tuple<int, string>(6, "Tank Sudden Loss Alarm"));
  143. aa06.Item2.Add(new Tuple<int, string>(7, "Tank High Product Alarm"));
  144. aa06.Item2.Add(new Tuple<int, string>(8, "Tank Invalid Fuel Level Alarm"));
  145. aa06.Item2.Add(new Tuple<int, string>(9, "Tank Probe Out Alarm"));
  146. aa06.Item2.Add(new Tuple<int, string>(10, "Tank High Water Warning"));
  147. aa06.Item2.Add(new Tuple<int, string>(11, "Tank Delivery Needed Warning"));
  148. aa06.Item2.Add(new Tuple<int, string>(12, "Tank Maximum Product Alarm"));
  149. aa06.Item2.Add(new Tuple<int, string>(13, "Tank Gross Leak Test Fail Alarm"));
  150. aa06.Item2.Add(new Tuple<int, string>(14, "Tank Periodic Leak Test Fail Alarm"));
  151. aa06.Item2.Add(new Tuple<int, string>(15, "Tank Annual Leak Test Fail Alarm"));
  152. aa06.Item2.Add(new Tuple<int, string>(16, "Tank Periodic Test Needed Warning"));
  153. aa06.Item2.Add(new Tuple<int, string>(17, "Tank Annual Test Needed Warning"));
  154. aa06.Item2.Add(new Tuple<int, string>(18, "Tank Periodic Test Needed Alarm"));
  155. aa06.Item2.Add(new Tuple<int, string>(19, "Tank Annual Test Needed Alarm"));
  156. aa06.Item2.Add(new Tuple<int, string>(20, "Tank Leak Test Active"));
  157. aa06.Item2.Add(new Tuple<int, string>(21, "Tank No CSLD Idle Time Warning"));
  158. aa06.Item2.Add(new Tuple<int, string>(22, "Tank Siphon Break Active Warning"));
  159. aa06.Item2.Add(new Tuple<int, string>(23, "Tank CSLD Rate Increase Warning"));
  160. aa06.Item2.Add(new Tuple<int, string>(24, "Tank AccuChart Calibration Warning"));
  161. aa06.Item2.Add(new Tuple<int, string>(25, "Tank HRM Reconciliation Warning"));
  162. aa06.Item2.Add(new Tuple<int, string>(26, "Tank HRM Reconciliation Alarm"));
  163. aa06.Item2.Add(new Tuple<int, string>(27, "Tank Clod Temperature Warning"));
  164. aa06.Item2.Add(new Tuple<int, string>(28, "Tank Missing Delivery Ticket Warning"));
  165. alarm_Type_Number_Mapping.Add(aa06);
  166. var aa14 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 14 },
  167. new List<Tuple<int, string>>());
  168. aa14.Item2.Add(new Tuple<int, string>(1, "Autodial Setup Data Warning"));
  169. aa14.Item2.Add(new Tuple<int, string>(2, "Autodial Failed Alarm"));
  170. aa14.Item2.Add(new Tuple<int, string>(3, "Autodial Service Report Warning"));
  171. aa14.Item2.Add(new Tuple<int, string>(4, "Autodial Alarm Clear Warning"));
  172. aa14.Item2.Add(new Tuple<int, string>(5, "Autodial Delivery Report Warning"));
  173. alarm_Type_Number_Mapping.Add(aa14);
  174. var aa18_19 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 18, 19 },
  175. new List<Tuple<int, string>>());
  176. aa18_19.Item2.Add(new Tuple<int, string>(2, "DIM Disabled Alarm"));
  177. aa18_19.Item2.Add(new Tuple<int, string>(3, "DIM Communication Failure Alarm"));
  178. aa18_19.Item2.Add(new Tuple<int, string>(4, "DIM Transaction Alarm"));
  179. alarm_Type_Number_Mapping.Add(aa18_19);
  180. var aa20 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 20 },
  181. new List<Tuple<int, string>>());
  182. aa20.Item2.Add(new Tuple<int, string>(1, "BIR Setup Data Warning"));
  183. aa20.Item2.Add(new Tuple<int, string>(2, "BIR Threshold Alarm"));
  184. aa20.Item2.Add(new Tuple<int, string>(3, "BIR Close Shift Warning"));
  185. aa20.Item2.Add(new Tuple<int, string>(4, "BIR Close Daily Warning"));
  186. alarm_Type_Number_Mapping.Add(aa20);
  187. var aa21 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 21 },
  188. new List<Tuple<int, string>>());
  189. aa21.Item2.Add(new Tuple<int, string>(1, "PLLD Setup Data Warning"));
  190. aa21.Item2.Add(new Tuple<int, string>(2, "PLLD Gross Test Fail Alarm"));
  191. aa21.Item2.Add(new Tuple<int, string>(3, "PLLD Anuual Test Fail Alarm"));
  192. aa21.Item2.Add(new Tuple<int, string>(4, "PLLD Periodic Test Needed Warning"));
  193. aa21.Item2.Add(new Tuple<int, string>(5, "PLLD Periodic Test Needed Alarm"));
  194. aa21.Item2.Add(new Tuple<int, string>(6, "PLLD Sensor Open Alarm"));
  195. aa21.Item2.Add(new Tuple<int, string>(7, "PLLD High Pressure Alarm"));
  196. aa21.Item2.Add(new Tuple<int, string>(8, "PLLD Shutdown Alarm"));
  197. aa21.Item2.Add(new Tuple<int, string>(9, "PLLD High Pressure Warning"));
  198. aa21.Item2.Add(new Tuple<int, string>(10, "PLLD Continuous Handle On Warning"));
  199. aa21.Item2.Add(new Tuple<int, string>(11, "PLLD Periodic Test Fail Alarm"));
  200. aa21.Item2.Add(new Tuple<int, string>(12, "PLLD Annual Test Needed Warning"));
  201. aa21.Item2.Add(new Tuple<int, string>(13, "PLLD Annual Test Needed Alarm"));
  202. aa21.Item2.Add(new Tuple<int, string>(14, "PLLD Low Pressure Alarm"));
  203. aa21.Item2.Add(new Tuple<int, string>(15, "PLLD Sensor Short Alarm"));
  204. aa21.Item2.Add(new Tuple<int, string>(16, "PLLD Continuous Handle On Alarm"));
  205. aa21.Item2.Add(new Tuple<int, string>(17, "PLLD Fuel Out Alarm"));
  206. aa21.Item2.Add(new Tuple<int, string>(18, "PLLD Line Equipment Alarm"));
  207. alarm_Type_Number_Mapping.Add(aa21);
  208. var aa26 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 26 },
  209. new List<Tuple<int, string>>());
  210. aa26.Item2.Add(new Tuple<int, string>(1, "WPLLD Setup Data Warning"));
  211. aa26.Item2.Add(new Tuple<int, string>(2, "WPLLD Gross Test Fail Alarm"));
  212. aa26.Item2.Add(new Tuple<int, string>(3, "WPLLD Anuual Test Fail Alarm"));
  213. aa26.Item2.Add(new Tuple<int, string>(4, "WPLLD Periodic Test Needed Warning"));
  214. aa26.Item2.Add(new Tuple<int, string>(5, "WPLLD Periodic Test Needed Alarm"));
  215. aa26.Item2.Add(new Tuple<int, string>(6, "WPLLD Sensor Open Alarm"));
  216. aa26.Item2.Add(new Tuple<int, string>(7, "WPLLD High Pressure Alarm"));
  217. aa26.Item2.Add(new Tuple<int, string>(8, "WPLLD Shutdown Alarm"));
  218. aa26.Item2.Add(new Tuple<int, string>(9, "WPLLD High Pressure Warning"));
  219. aa26.Item2.Add(new Tuple<int, string>(10, "WPLLD Continuous Handle On Warning"));
  220. aa26.Item2.Add(new Tuple<int, string>(11, "WPLLD Periodic Test Fail Alarm"));
  221. aa26.Item2.Add(new Tuple<int, string>(12, "WPLLD Annual Test Needed Warning"));
  222. aa26.Item2.Add(new Tuple<int, string>(13, "WPLLD Annual Test Needed Alarm"));
  223. aa26.Item2.Add(new Tuple<int, string>(14, "WPLLD Low Pressure Alarm"));
  224. aa26.Item2.Add(new Tuple<int, string>(15, "WPLLD Sensor Short Alarm"));
  225. aa26.Item2.Add(new Tuple<int, string>(16, "WPLLD Continuous Handle On Alarm"));
  226. aa26.Item2.Add(new Tuple<int, string>(17, "WPLLD Fuel Out Alarm"));
  227. aa26.Item2.Add(new Tuple<int, string>(18, "WPLLD Line Equipment Alarm"));
  228. alarm_Type_Number_Mapping.Add(aa26);
  229. var aa99 = new Tuple<int[], List<Tuple<int, string>>>(new int[] { 99 },
  230. new List<Tuple<int, string>>());
  231. aa99.Item2.Add(new Tuple<int, string>(1, "Externally Dectected Communication Alarm"));
  232. aa99.Item2.Add(new Tuple<int, string>(2, "Communications - Data Reception Timeout"));
  233. aa99.Item2.Add(new Tuple<int, string>(3, "Communications - Failed Checksum"));
  234. aa99.Item2.Add(new Tuple<int, string>(4, "Communications - Parity Error"));
  235. aa99.Item2.Add(new Tuple<int, string>(5, "Modem - Line Busy"));
  236. aa99.Item2.Add(new Tuple<int, string>(6, "Modem - No Answer"));
  237. aa99.Item2.Add(new Tuple<int, string>(7, "Modem - No Carrier"));
  238. aa99.Item2.Add(new Tuple<int, string>(8, "Modem - No Dial Tone"));
  239. aa99.Item2.Add(new Tuple<int, string>(9, "Modem - Modem Error"));
  240. aa99.Item2.Add(new Tuple<int, string>(10, "Modem - Modem Not Responding"));
  241. aa99.Item2.Add(new Tuple<int, string>(11, "Modem - Port Not Available"));
  242. aa99.Item2.Add(new Tuple<int, string>(12, "Polling - Could Not Update Queue"));
  243. aa99.Item2.Add(new Tuple<int, string>(13, "Polling - Invalid Data Type Requested"));
  244. alarm_Type_Number_Mapping.Add(aa99);
  245. }
  246. private byte[] bytes;
  247. public QuerySystemStatusReportData(byte[] bytes)
  248. {
  249. this.bytes = bytes;
  250. }
  251. public int? TankNumber
  252. {
  253. get
  254. {
  255. var r = int.Parse(Encoding.ASCII.GetString(this.bytes.Skip(4).Take(2).ToArray()));
  256. return r;
  257. }
  258. }
  259. public Alarm_Warning_Category? Alarm_Warning_Category
  260. {
  261. get
  262. {
  263. var r = (Alarm_Warning_Category)Enum.Parse(
  264. typeof(Alarm_Warning_Category),
  265. Encoding.ASCII.GetString(this.bytes.Take(2).ToArray()));
  266. return r;
  267. }
  268. }
  269. public string AlarmInfo
  270. {
  271. get
  272. {
  273. var alarmTypeNumberInt = int.Parse(Encoding.ASCII.GetString(this.bytes.Skip(2).Take(2).ToArray()));
  274. return alarm_Type_Number_Mapping.FirstOrDefault(m => m.Item1.Contains((int)this.Alarm_Warning_Category))
  275. ?.Item2.FirstOrDefault(f => f.Item1 == alarmTypeNumberInt).Item2;
  276. }
  277. }
  278. }
  279. }
  280. }