Sic.Framework/MECF.Framework.RT.Equipment.../HardwareUnits/TurboPumps/PfeifferHipace/HipaceHandler.cs

344 lines
9.4 KiB
C#

using MECF.Framework.Common.Communications;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TurboPumps.PfeifferHipace
{
public abstract class HipaceHandler : HandlerBase
{
protected const string QueryDataText = "=?";
public HipaceTurboPump PumpDevice { get; }
protected HipaceHandler(HipaceTurboPump pump, string deviceAddress, bool isQuery, string parameter, string data)
: base(BuildMessage(deviceAddress, isQuery, parameter, data))
{
PumpDevice = pump;
}
private static string BuildMessage(string deviceAddress, bool isQuery, string parameter, string data)
{
string msg = deviceAddress + (isQuery ? "00" : "10") + parameter + data.Length.ToString("D2") + data;
return msg + CalcSum(msg).ToString("D3") + "\r";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
ResponseMessage = msg;
handled = true;
return true;
}
private static int CalcSum(string value)
{
int sum = 0;
foreach (var item in value)
{
sum += (int)item;
}
return sum % 256;
}
}
//010
public class HipacePumpStationHandler : HipaceHandler
{
public HipacePumpStationHandler(HipaceTurboPump pump, string deviceAddress, bool isOn, bool isQuery)
: base(pump, deviceAddress, isQuery, "010", isQuery ? QueryDataText : (isOn ? "111111" : "000000"))
{
Name = "Pump " + (isOn ? "On" : "Off");
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (result.Data == "111111")
{
PumpDevice.NoteOnOff(true);
}
else if (result.Data == "000000")
{
PumpDevice.NoteOnOff(false);
}
else
{
PumpDevice.SetError(result.Data + " format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//023
public class HipaceMotorPumpHandler : HipaceHandler
{
public HipaceMotorPumpHandler(HipaceTurboPump pump, string deviceAddress, bool isOn)
: base(pump, deviceAddress, false, "023", isOn ? "111111" : "000000")
{
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (result.Data == "111111")
{
PumpDevice.NoteOnOff(true);
}
else if (result.Data == "000000")
{
PumpDevice.NoteOnOff(false);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//303
public class HipaceQueryErrorHandler : HipaceHandler
{
public HipaceQueryErrorHandler(HipaceTurboPump pump, string deviceAddress)
: base(pump, deviceAddress, true, "303", QueryDataText)
{
Name = "Query Error";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (int.TryParse(result.Data, out int code))
{
PumpDevice.SetErrorCode(code);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//398
public class HipaceQuerySpeedHandler : HipaceHandler
{
public HipaceQuerySpeedHandler(HipaceTurboPump pump, string deviceAddress)
: base(pump, deviceAddress, true, "398", QueryDataText)
{
Name = "Query Speed";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (int.TryParse(result.Data, out int value))
{
PumpDevice.SetSpeed(value);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//346
public class HipaceQueryTemperatureHandler : HipaceHandler
{
public HipaceQueryTemperatureHandler(HipaceTurboPump pump, string deviceAddress)
: base(pump, deviceAddress, true, "346", QueryDataText)
{
Name = "Query Temperature";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (int.TryParse(result.Data, out int value))
{
PumpDevice.SetTemperature(value);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//307
public class HipaceAccelerateHandler : HipaceHandler
{
public HipaceAccelerateHandler(HipaceTurboPump pump, string deviceAddress)
: base(pump, deviceAddress, true, "307", QueryDataText)
{
Name = "Query Accelerate";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (result.Data == "111111")
{
PumpDevice.SetIsAccelerate(true);
}
else if (result.Data == "000000")
{
PumpDevice.SetIsAccelerate(false);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//306
public class HipaceAtSpeedHandler : HipaceHandler
{
public HipaceAtSpeedHandler(HipaceTurboPump pump, string deviceAddress)
: base(pump, deviceAddress, true, "306", QueryDataText)
{
Name = "Query At Speed";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (result.Data == "111111")
{
PumpDevice.SetAtSpeed(true);
}
else if (result.Data == "000000")
{
PumpDevice.SetAtSpeed(false);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//305
public class HipaceOverTempHandler : HipaceHandler
{
public HipaceOverTempHandler(HipaceTurboPump pump, string deviceAddress)
: base(pump, deviceAddress, true, "305", QueryDataText)
{
Name = "Query over temp";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as HipaceMessage;
if (result.IsError)
{
PumpDevice.SetError(result.Data);
}
else
{
if (result.Data == "111111")
{
PumpDevice.SetOverTemp(true);
}
else if (result.Data == "000000")
{
PumpDevice.SetOverTemp(false);
}
else
{
PumpDevice.SetError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
}