Sic.Framework/MECF.Framework.RT.Equipment.../HardwareUnits/Pumps/EdwardsPump/EdwardsPumpHandler.cs

376 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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","Parameters 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;
}
}
}