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<int, float> _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<int, float>();
|
|
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;
|
}
|
}
|
}
|
}
|