using System; using System.Threading; using MECF.Framework.Simulator.Core.Driver; using Venus_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 Venus_Simulator.Devices { class SMCChillerMock : SerialPortDeviceSimulator { public enum SMCChillerStatus { Open, Close, } public static SMCChillerStatus _simPumpStatus; private const string EOF = "\r\n"; private const char MSG_DELIMITER = ' '; //private const string MOCKUP_PORT = "COM43"; public SMCChillerMock(string port) : base(port, -1, EOF, MSG_DELIMITER) { _simPumpStatus = SMCChillerStatus.Close; } protected override void ProcessUnsplitMessage(string message) { if (string.IsNullOrEmpty(message)) throw new ArgumentException("Hardware command message is invalid"); string[] separatingStrings = { EOF }; string[] msgs = message.Trim().Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries); foreach (var msg in msgs) { if(msg.StartsWith(":0106000B")) { int temp = Convert.ToInt32(msg.Substring(9, 8), 16); Console.WriteLine($"Chiller Set Temp: {temp}"); SetTemp(temp); } else if(msg.StartsWith(":0106000C0001")) { _simPumpStatus = SMCChillerStatus.Open; } else if(msg.StartsWith(":0106000C0000")) { _simPumpStatus = SMCChillerStatus.Close; } } } void SetTemp(int temp) { string module;//= PortName == "COM43" ? "PMA" : "PMB"; switch (PortName) { case "COM43": case "COM53": module = "PMA"; break; case "COM45": module = "PMB"; break; case "COM86": module = "PMC"; break; case "COM28": module = "PMD"; break; default: module = "PMB"; break; } double _OffsetTemp = SystemConfig.Instance.GetValue($"{module}.Chiller.ChillerTemperatureOffset"); SimulatorSystem.Instance.SetCoolantOutletTemp(module, temp / 10 + (int)_OffsetTemp); } } }