376 lines
12 KiB
C#
376 lines
12 KiB
C#
using Aitex.Core.RT.Device;
|
||
using MECF.Framework.Common.Communications;
|
||
using Newtonsoft.Json.Linq;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Runtime.InteropServices;
|
||
using System.Text;
|
||
|
||
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Pumps.EdwardsPump
|
||
{
|
||
public abstract class EdwardsPumpHandler : HandlerBase
|
||
{
|
||
public EdwardsPump Device { get; }
|
||
|
||
public string _command;
|
||
protected string _parameter;
|
||
|
||
|
||
protected EdwardsPumpHandler(EdwardsPump device, string command,string parameter)
|
||
: base(BuildMessage(command, parameter))
|
||
{
|
||
Device = device;
|
||
_command = command;
|
||
_parameter = parameter;
|
||
Name = command;
|
||
}
|
||
|
||
private static string _endLine = "\r";
|
||
private static string BuildMessage(string command, string parameter)
|
||
{
|
||
if(string.IsNullOrEmpty(parameter))
|
||
return command + _endLine;
|
||
else
|
||
return command + parameter + _endLine;
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
EdwardsPumpMessage response = msg as EdwardsPumpMessage;
|
||
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;
|
||
}
|
||
|
||
private static Dictionary<string, string> ErrorDict = new Dictionary<string, string>()
|
||
{
|
||
{"1","Invalid message" },
|
||
{"2","Number not found" },
|
||
{"3","Number Invalid" },
|
||
{"4","Parameter’s value not received" },
|
||
{"5","Command not possible" }
|
||
};
|
||
private static string ErrorString(string errorCode)
|
||
{
|
||
if (ErrorDict.ContainsKey(errorCode))
|
||
return ErrorDict[errorCode];
|
||
else
|
||
return "NotDefined error";
|
||
}
|
||
|
||
}
|
||
|
||
public class EdwardsPumpRawCommandHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsPumpRawCommandHandler(EdwardsPump device, string command, string parameter)
|
||
: base(device, command, parameter)
|
||
{
|
||
}
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if(base.HandleMessage(msg, out handled))
|
||
{
|
||
var result = msg as EdwardsPumpMessage;
|
||
Device.NoteRawCommandInfo(_command, result.RawMessage);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
public class EdwardsPumpSimpleSwitchHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsPumpSimpleSwitchHandler(EdwardsPump device, string command, string parameter)
|
||
: base(device, command, parameter)
|
||
{
|
||
|
||
}
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if(base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSwitchCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class PfeifferPumpSetPumpParameterHandler : EdwardsPumpHandler
|
||
{
|
||
public PfeifferPumpSetPumpParameterHandler(EdwardsPump device, string parameter)
|
||
: base(device, "SET", parameter)
|
||
{
|
||
|
||
}
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsPumpReadAlarmStatusHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsPumpReadAlarmStatusHandler(EdwardsPump device, string parameter)
|
||
: base(device, "?A", parameter)
|
||
{
|
||
}
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
var result = msg as EdwardsPumpMessage;
|
||
|
||
Device.NoteAlarmStatus(_parameter, result.Data);
|
||
}
|
||
return true;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
public class EdwardsQueryPumpStatusHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsQueryPumpStatusHandler(EdwardsPump pump)
|
||
: base(pump, "?P","")
|
||
{
|
||
Name = "Query Pump Status";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
EdwardsPumpMessage response = msg as EdwardsPumpMessage;
|
||
var msgArry = response.Data.Split(',');
|
||
if(msgArry.Length == 7)
|
||
{
|
||
//0=Switched off
|
||
//1=Off, switching on
|
||
//2=On, switching off (shut down after fault)
|
||
//3=On, switching off (normal shut down)
|
||
//4=on
|
||
var statusLevel = msgArry[0];
|
||
if (statusLevel == "4")
|
||
Device.IsOn = true;
|
||
else
|
||
Device.IsOn = false;
|
||
|
||
//0=Indication only; no warning or alarm.
|
||
//1=Warning condition exists
|
||
//2=Alarm condition exists: shut down the pump unless run til crash is set.
|
||
//3=Alarm condition exists: shut down the pump.
|
||
var priorityLevel = msgArry[1];
|
||
//if (priorityLevel == "0")
|
||
// Device.IsError = false;
|
||
//else
|
||
// Device.IsError = true;
|
||
|
||
//0=No alarm
|
||
//1= Digital alarm
|
||
//9= Low warning
|
||
//10=Low alarm
|
||
//11=High warning
|
||
//12=High alarm
|
||
//13=Device error
|
||
//14=Device not present
|
||
var alarmType = msgArry[2];
|
||
if (alarmType == "0" && priorityLevel == "0")
|
||
Device.IsError = false;
|
||
else
|
||
Device.IsError = true;
|
||
|
||
//0=Module missing
|
||
//1=Sensor present at switch-on, but now disconnected
|
||
//2=Wrong gas module fitted
|
||
//3=Voltage above valid maximum voltage
|
||
//4=Voltage below valid minimum voltage
|
||
//5=ADC (analogue to digital convertor) not operating
|
||
//6=Electrical supply has been interrupted
|
||
//7=Watchdog reset has occurred
|
||
//8=Sensor missing at switch on
|
||
//9=Module switching on
|
||
//10=No current consumption at pump switch-on
|
||
//11=Wrong phase input to pump
|
||
//12=EMS (emergency stop) has been activated
|
||
//13=Flow sensor zero out of range
|
||
//14=Cannot zero sensors
|
||
//15=Configuration set read error
|
||
var bitfieldStatus = msgArry[3];
|
||
|
||
//1=run til crash is selected
|
||
//0=run til crash is not selected
|
||
var runTilCrashStatus = msgArry[4];
|
||
|
||
//1=On process flag is set
|
||
//0=On process flag is not set
|
||
var onProcessStatus = msgArry[5];
|
||
|
||
//0=No module has control
|
||
//91=Single Pumpset Monitor has control
|
||
//101=Pump Display Module has control
|
||
//102=Remote Display has control
|
||
//121=Parallel (tool) interface has control
|
||
//181=Serial interface has control
|
||
var controlObject = msgArry[6];
|
||
}
|
||
if(msgArry.Length == 1)
|
||
{
|
||
var statusLevel = msgArry[0];
|
||
}
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsExitSimulationModeHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsExitSimulationModeHandler(EdwardsPump pump)
|
||
: base(pump, "!M0", "")
|
||
{
|
||
Name = "Command Simulation Mode";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
public class EdwardsEnterSimulationModeHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsEnterSimulationModeHandler(EdwardsPump pump)
|
||
: base(pump, "!M1", "")
|
||
{
|
||
Name = "Command Simulation Mode";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsFormatModeHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsFormatModeHandler(EdwardsPump pump, bool isLongReplay)
|
||
: base(pump, $"!F{(isLongReplay ? "1" : "0")}", "")
|
||
{
|
||
Name = "Format mode";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsGetControlHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsGetControlHandler(EdwardsPump pump)
|
||
: base(pump, "!C1", "")
|
||
{
|
||
Name = "Get control";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsSwitchOnPumpHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsSwitchOnPumpHandler(EdwardsPump pump)
|
||
: base(pump, "!P1", "")
|
||
{
|
||
Name = "Switch On Pump";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsSwitchOffPumpHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsSwitchOffPumpHandler(EdwardsPump pump)
|
||
: base(pump, "!P0", "")
|
||
{
|
||
Name = "Switch Off Pump";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public class EdwardsFastSwitchOffPumpHandler : EdwardsPumpHandler
|
||
{
|
||
public EdwardsFastSwitchOffPumpHandler(EdwardsPump pump)
|
||
: base(pump, "!P2", "")
|
||
{
|
||
Name = "Switch Off Pump";
|
||
}
|
||
|
||
public override bool HandleMessage(MessageBase msg, out bool handled)
|
||
{
|
||
if (base.HandleMessage(msg, out handled))
|
||
{
|
||
Device.NoteSetParaCompleted();
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
}
|
||
|