123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 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 = "COM7";
- 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);
- }
- }
- }
- }
|