using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace SA_LTT.Module { public class GR200 : ComPort { private char STX = Convert.ToChar(2); private char EXT = '\n'; private Dictionary _measuredValues; public float MainCDAPressure { get { return _measuredValues[1]; } } public float MainVacuumPressure { get { return _measuredValues[2]; } } public float N2PTPressure { get { return _measuredValues[3]; } } public float MainCDAFlow { get { return _measuredValues[4]; } } public float ChamberVacuumPressure { get { return _measuredValues[5]; } } private Equipment _equipment; private Thread t_statusUpdate; public GR200(Equipment equipment) { serialPort.PortName = "COM7"; serialPort.BaudRate = 57600; serialPort.Parity = System.IO.Ports.Parity.None; serialPort.DataBits = 7; serialPort.StopBits = System.IO.Ports.StopBits.One; serialPort.Handshake = System.IO.Ports.Handshake.RequestToSend; Terminator = "\r\n"; _measuredValues = new Dictionary(); for (int i = 1; i <= 12; i++) { _measuredValues.Add(i, 0f); } _equipment = equipment; t_statusUpdate = new Thread(statusUpdate); t_statusUpdate.Start(); } public void statusUpdate() { while (_equipment.IsDisposed == false) { try { Thread.Sleep(100); if (IsOpen) { ReadMeasuredValue(1); } else { if (_equipment.alarmManager.OccurredAlarms.Exists(x => x.Code == AlarmCode.AL_0058_GR200_DISCONNECTED)) { } else { if (Open() == false) { _equipment.alarmManager.Occur(AlarmCode.AL_0058_GR200_DISCONNECTED); } } } } catch (Exception e) { EquipmentLogManager.Instance.WriteExceptionLog(e.StackTrace); } } } private string GetCommand(int channel, int bitsCount, int registerNumber) { return $"{channel:D2}DRS,{(bitsCount):D2},{registerNumber:D4}"; } public void ReadMeasuredValue(int channel) { string command = GetCommand(channel, 24, 16); string receivedData = string.Empty; if(WriteRead(command, out receivedData)) { string[] datas = receivedData.Split(','); int register = 1; if (!datas[0].Contains("NG") && datas[0].Contains("DRS")) { for (int i = 2; i < datas.Length; i = i + 2) { float fl = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToInt64(datas[i] + datas[i + 1], 16)), 0); if (_measuredValues.ContainsKey(register)) { _measuredValues[register] = fl; } else { _measuredValues.Add(register, fl); } register++; } } else if (datas[0].Contains("NG")) throw new Exception($"Command NG, Address : {channel}, Command : DRS , Recv Data ="); else throw new Exception($"Error, Address : {channel}, Command : DRS , Recv Data ="); } } public bool WriteRead(string command, out string receivedData) { string data = base.WriteRead($"{STX}{command}\r{EXT}"); if (data.StartsWith($"{STX}")) { receivedData = data.Replace(STX, ' ').Replace("\r\n", ""); return true; } else { receivedData = string.Empty; return false; } } } }