198 lines
7.5 KiB
C#
198 lines
7.5 KiB
C#
|
using Aitex.Core.Util;
|
|||
|
using MECF.Framework.Common.Communications;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Pumps.DRYVacuum
|
|||
|
{
|
|||
|
public class ErrorInfo
|
|||
|
{
|
|||
|
public int Index;
|
|||
|
public string ErrorName;
|
|||
|
public int Level;
|
|||
|
public bool IsError;
|
|||
|
public R_TRIG _trigError = new R_TRIG();
|
|||
|
}
|
|||
|
public class DRYVacuumPumpHandler : HandlerBase
|
|||
|
{
|
|||
|
public DRYVacuumPump Device { get; }
|
|||
|
|
|||
|
public string _command;
|
|||
|
protected string _parameter;
|
|||
|
|
|||
|
|
|||
|
protected DRYVacuumPumpHandler(DRYVacuumPump device, string command, string parameter)
|
|||
|
: base(BuildMessage(command, parameter))
|
|||
|
{
|
|||
|
Device = device;
|
|||
|
_command = command;
|
|||
|
_parameter = parameter;
|
|||
|
Name = command;
|
|||
|
}
|
|||
|
|
|||
|
private static byte STX = 2;//"0X02"
|
|||
|
private static byte ETX = 3;//"0X03"
|
|||
|
private static byte CR = 13;//"0X0D"
|
|||
|
private static byte[] BuildMessage(string command, string parameter)
|
|||
|
{
|
|||
|
var buffer = new byte[8];
|
|||
|
buffer[0] = STX;
|
|||
|
buffer[1] = Convert.ToByte(command[0]);
|
|||
|
buffer[2] = Convert.ToByte(command[1]);
|
|||
|
buffer[3] = Convert.ToByte(command[2]);
|
|||
|
buffer[4] = ETX;
|
|||
|
var CheckLow = SUMCHECK(command);
|
|||
|
buffer[5] = Convert.ToByte(CheckLow[0]);
|
|||
|
buffer[6] = Convert.ToByte(CheckLow[1]);
|
|||
|
buffer[7] = CR;
|
|||
|
return buffer;
|
|||
|
}
|
|||
|
public static string SUMCHECK(string command)
|
|||
|
{
|
|||
|
byte[] buffer = Encoding.ASCII.GetBytes(command);
|
|||
|
int sum = 0;
|
|||
|
for (int i = 0; i < buffer.Length; i++)
|
|||
|
{
|
|||
|
sum += Convert.ToInt16(buffer[i]);
|
|||
|
}
|
|||
|
var SUM = STX + sum + ETX;
|
|||
|
|
|||
|
return (SUM & 0xff).ToString("X2");
|
|||
|
}
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool handled)
|
|||
|
{
|
|||
|
DRYVacuumPumpMessage response = msg as DRYVacuumPumpMessage;
|
|||
|
ResponseMessage = msg;
|
|||
|
|
|||
|
if (response.IsAck)
|
|||
|
{
|
|||
|
SetState(EnumHandlerState.Acked);
|
|||
|
|
|||
|
if (msg.IsError)
|
|||
|
{
|
|||
|
// Device.NoteError($"Command '{_command}' Error: {response.Data}:{ErrorString(response.ErrorText)}");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
SetState(EnumHandlerState.Completed);
|
|||
|
handled = true;
|
|||
|
Device.NoteError(null);
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
handled = false;
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
public class DRYVacuumPumpQueryStatusHandler : DRYVacuumPumpHandler
|
|||
|
{
|
|||
|
public DRYVacuumPumpQueryStatusHandler(DRYVacuumPump pump)
|
|||
|
: base(pump, "M21", "")
|
|||
|
{
|
|||
|
Name = "Query DRY Pump Status";
|
|||
|
}
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool handled)
|
|||
|
{
|
|||
|
if (base.HandleMessage(msg, out handled))
|
|||
|
{
|
|||
|
DRYVacuumPumpMessage response = msg as DRYVacuumPumpMessage;
|
|||
|
var msgArry = response.Data;
|
|||
|
if (msgArry.Length == 19)
|
|||
|
{
|
|||
|
var str = Encoding.ASCII.GetString(msgArry);
|
|||
|
if (str[0] == 'N')
|
|||
|
Device.RunMode = "Normal operation mode";
|
|||
|
else Device.RunMode = " Power-saving operation mode";
|
|||
|
if (str[1] == 'R')
|
|||
|
{
|
|||
|
Device.MPOn = "being operated";
|
|||
|
Device.IsMPOn = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Device.MPOn = "being stopped";
|
|||
|
Device.IsMPOn = false;
|
|||
|
}
|
|||
|
if (str[2] == 'R')
|
|||
|
{
|
|||
|
Device.BPOn = "being operated";
|
|||
|
Device.IsBPOn = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Device.BPOn = "being stopped";
|
|||
|
Device.IsBPOn = false;
|
|||
|
}
|
|||
|
var warn = str.Substring(3, 8);
|
|||
|
var alarm = str.Substring(11, 8);
|
|||
|
if (!warn.Equals("00000000"))
|
|||
|
{
|
|||
|
Device.IsWarning = true;
|
|||
|
for (int i = warn.Length / 2; i > 0; i--)
|
|||
|
{
|
|||
|
var bt = Convert.ToByte(warn.Substring(i * 2 - 2, 2), 16);
|
|||
|
for (int j = 0; j < 8; j++)
|
|||
|
{
|
|||
|
var error = Device.errorInfo.FirstOrDefault(m => m.Index == j + (warn.Length / 2 - i) * 8);
|
|||
|
if (error != null)
|
|||
|
{
|
|||
|
var sbt = (byte)((bt >> j) & 0x1) == 1;
|
|||
|
if (sbt)
|
|||
|
{
|
|||
|
error.IsError = true;
|
|||
|
error._trigError.CLK = true;
|
|||
|
Device.NoteWarning(error);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
error.IsError = false;
|
|||
|
error._trigError.CLK = false;
|
|||
|
Device.NoteWarning(error);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}else Device.IsWarning = false;
|
|||
|
if (!alarm.Equals("00000000"))
|
|||
|
{
|
|||
|
Device.IsAlarm = true;
|
|||
|
for (int i = alarm.Length / 2; i > 0; i--)
|
|||
|
{
|
|||
|
var bt = Convert.ToByte(alarm.Substring(i * 2 - 2, 2), 16);
|
|||
|
for (int j = 0; j < 8; j++)
|
|||
|
{
|
|||
|
var error = Device.errorInfo.FirstOrDefault(m => m.Index == j + (alarm.Length / 2 - i) * 8 + 50);
|
|||
|
if (error != null)
|
|||
|
{
|
|||
|
var sbt = (byte)((bt >> j) & 0x1) == 1;
|
|||
|
if (sbt)
|
|||
|
{
|
|||
|
error.IsError = true;
|
|||
|
error._trigError.CLK = true;
|
|||
|
Device.NoteAlarm(error);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
error.IsError = false;
|
|||
|
error._trigError.CLK = false;
|
|||
|
Device.NoteAlarm(error);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else Device.IsAlarm = false;
|
|||
|
}
|
|||
|
Device.NoteSetParaCompleted();
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|