using System; using System.Threading; using MECF.Framework.Simulator.Core.Driver; using CyberX8_Simulator.Instances; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.SCCore; using MECF.Framework.Common.DataCenter; using Aitex.Core.Util; using System.IO; namespace CyberX8_Simulator.Devices { class AIRSYSChillerMock : SerialPortDeviceSimulator { public enum AIRSYSChillerStatus { Open, Close, } public static AIRSYSChillerStatus _simPumpStatus; private const string EOF = "\r"; private const char MSG_DELIMITER = ' '; //private const string MOCKUP_PORT = "COM43"; private int _temperature = 0; public AIRSYSChillerMock(string port) : base(port, -1, EOF, MSG_DELIMITER) { _simPumpStatus = AIRSYSChillerStatus.Close; } protected override void ProcessUnsplitMessage(string message) { if (string.IsNullOrEmpty(message)) throw new ArgumentException("Hardware command message is invalid"); string sRes = string.Empty; string[] separatingStrings = { EOF }; string[] msgs = message.Trim().Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries); foreach (var msg in msgs) { if (msg.StartsWith("AA90")) { _simPumpStatus = AIRSYSChillerStatus.Open; sRes = "AA90\r"; int temp = Convert.ToInt32(msg.Substring(9, 8), 16); SetTemp(temp); } else if(msg.StartsWith("AA91")) { _simPumpStatus = AIRSYSChillerStatus.Close; sRes = "AA91\r"; } else if (msg.StartsWith("AA42")) { //QUERY STATUS _simPumpStatus = AIRSYSChillerStatus.Open; sRes = "AA4200DE\r"; } else if (msg.StartsWith("AA10")) { //QUERY TEMPERATURE sRes = string.Format("AA10{0:X4}\r", _temperature); } else if (msg.StartsWith("AAB0")) { //Set Temperature _temperature = Int32.Parse(msg.Substring(4, 4), System.Globalization.NumberStyles.HexNumber); sRes = "AAB0\r"; } } OnWriteMessage(sRes); } void SetTemp(int temp) { string module = PortName == "COM47" ? "PMA" : "PMB"; double _OffsetTemp = SystemConfig.Instance.GetValue($"{module}.Chiller.ChillerTemperatureOffset"); SimulatorSystem.Instance.SetCoolantOutletTemp(module, temp / 10 + (int)_OffsetTemp); } } }