|
@@ -0,0 +1,103 @@
|
|
|
+using System;
|
|
|
+using MECF.Framework.Simulator.Core.Driver;
|
|
|
+using System.Linq;
|
|
|
+
|
|
|
+namespace Venus_Simulator.Devices
|
|
|
+{
|
|
|
+
|
|
|
+ class TurboPumpMockPMB : SerialPortDeviceSimulator
|
|
|
+ {
|
|
|
+ public enum TurboPumpStatus
|
|
|
+ {
|
|
|
+ Unknown,
|
|
|
+ OFF,
|
|
|
+ ON,
|
|
|
+ ERROR
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private readonly byte PUMP_ON_FLAG = 0x02;
|
|
|
+ private readonly byte RESERVE_FLAG = 0x80;
|
|
|
+ private readonly byte ISO_VALVE_OPEN_FLAG = 0x01;
|
|
|
+ private readonly byte WATER_VALVE_OEPN_FLAG = 0x08;
|
|
|
+ private readonly byte VALVE_AT_SPEED_FLAG = 0x40;
|
|
|
+
|
|
|
+ private byte pumpStatus
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return (byte)((_simTurboPumpStatus == TurboPumpStatus.ON ? PUMP_ON_FLAG : 0) + RESERVE_FLAG);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private byte valveStatus
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return (byte)(ISO_VALVE_OPEN_FLAG + WATER_VALVE_OEPN_FLAG + VALVE_AT_SPEED_FLAG + RESERVE_FLAG);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private const string EOF = "\r";
|
|
|
+ private const char MSG_DELIMITER = '_';
|
|
|
+ private const string MOCKUP_PORT = "COM1";
|
|
|
+
|
|
|
+ private int _speed = 200;
|
|
|
+ private int _temperature = 80;
|
|
|
+ private Random _rd = new Random();
|
|
|
+
|
|
|
+ TurboPumpStatus _simTurboPumpStatus;
|
|
|
+ public TurboPumpMockPMB() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
|
|
|
+ {
|
|
|
+ _simTurboPumpStatus = TurboPumpStatus.Unknown;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void ProcessUnsplitMessage(string message)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(message))
|
|
|
+ throw new ArgumentException("Hardware command message is invalid");
|
|
|
+
|
|
|
+ string[] strs = message.Trim().Split('\r');
|
|
|
+ foreach (string msg in strs)
|
|
|
+ {
|
|
|
+ string sRes = string.Empty;
|
|
|
+ string str = msg.Trim();
|
|
|
+ if (str.Length == 0)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (str.Contains("STA"))
|
|
|
+ {
|
|
|
+ if (_simTurboPumpStatus == TurboPumpStatus.ON)
|
|
|
+ {
|
|
|
+ _speed = 200;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _speed = 0;
|
|
|
+ }
|
|
|
+ string strData = string.Format("#000,000,{0:D5},000,000,000,000,000,00,00000,{1:D3},099,0123456789012345678901234\r", _speed + _rd.Next(0, 5), _temperature + _rd.Next(-5, 5));
|
|
|
+ byte[] byteArray = System.Text.Encoding.Default.GetBytes(strData);
|
|
|
+ byteArray[6] = pumpStatus;
|
|
|
+ byteArray[7] = valveStatus;
|
|
|
+
|
|
|
+ OnWriteMessage(byteArray);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if (str.Contains("TMPON"))
|
|
|
+ {
|
|
|
+ sRes = "#000,OK\r";
|
|
|
+ _simTurboPumpStatus = TurboPumpStatus.ON;
|
|
|
+ }
|
|
|
+ else if (str.Contains("TMPOFF"))
|
|
|
+ {
|
|
|
+ sRes = "#000,OK\r";
|
|
|
+ _simTurboPumpStatus = TurboPumpStatus.OFF;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ continue;
|
|
|
+
|
|
|
+ OnWriteMessage(sRes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|