Sic04/FrameworkLocal/RTEquipmentLibrary/HardwareUnits/TurboPumps/Pfeiffer/PumpMagpowerHandler.cs

305 lines
7.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MECF.Framework.Common.Communications;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TurboPumps.Pfeiffer
{
public abstract class PumpMagpowerHandler : HandlerBase
{
protected const string QueryDataText = "=?";
protected PumpMagpower _pump;
protected PumpMagpowerHandler(PumpMagpower pump, string command, string parameter = null)
: base(BuildMessage(pump.DeviceAddress, command, parameter))
{
_pump = pump;
}
private static string BuildMessage(string deviceAddress, string command, string parameter)
{
string msg = parameter == null ? $"#{deviceAddress}{command}" : $"#{deviceAddress}{command} {parameter}";
return msg + "\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;
}
}
public class MagpowerPumpStationHandler : PumpMagpowerHandler
{
public MagpowerPumpStationHandler(PumpMagpower pump, bool isOn)
: base(pump, isOn ? "TMPON" : "TMPOFF")
{
Name = "Pump " + (isOn ? "On" : "Off");
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.NoteError(result.Data);
}
else
{
_pump.NoteOnOff(Name == "Pump On");
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//023
public class MagpowerSwitchSpeedHandler : PumpMagpowerHandler
{
public MagpowerSwitchSpeedHandler(PumpMagpower pump, bool isNormal)
: base(pump, isNormal ? "NSP" : "SBY")
{
Name = "SwitchSpeed " + (isNormal ? "Normal" : "Standby");
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.NoteError(result.Data);
}
else
{
_pump.NoteNormalSpeed(Name.Contains("Normal"));
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//303
public class MagpowerQueryErrorHandler : PumpMagpowerHandler
{
public MagpowerQueryErrorHandler(PumpMagpower pump)
: base(pump, "DEF")
{
Name = "Query Error";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.SetErrorCode(result.Data);
}
else
{
_pump.SetErrorCode("");
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//398
public class MagpowerQuerySpeedHandler : PumpMagpowerHandler
{
public MagpowerQuerySpeedHandler(PumpMagpower pump)
: base(pump, "SPD")
{
Name = "Query Speed";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.NoteError(result.Data);
}
else
{
var dataArray = result.Data.Split(' ');
if (dataArray.Count() == 2 && int.TryParse(dataArray[0], out int value))
{
_pump.SetSpeed(value);
}
else
{
_pump.NoteError(result.Data + "format error");
}
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//346
public class MagpowerQueryStatusHandler : PumpMagpowerHandler
{
public MagpowerQueryStatusHandler(PumpMagpower pump)
: base(pump, "STA")
{
Name = "Query Status";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
//sss, rrrrr, vvv, www, xxx, yyy, zzz, aa, bbbbb, ccc, ddd, ggggggggggggggggggggggggg
ResponseMessage = msg;
handled = true;
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.NoteError(result.Data);
return true;
}
var dataArray = result.Data.Split(',');
bool isFormat = dataArray.Count() == 12;
if (!isFormat)
{
_pump.NoteError(result.Data + "format error");
return true;
}
string sss = dataArray[0].Trim();
isFormat = sss.Length == 3;
if (!isFormat)
{
_pump.NoteError(result.Data + "format error");
return true;
}
int pumpStatus = sss.ElementAt(1);
_pump.NoteStable((pumpStatus & 0b_0000_1000) > 0);
_pump.NoteAccelerate((pumpStatus & 0b_0000_0100) > 0);
int valveStatus = sss.ElementAt(2);
_pump.SetAtSpeed((valveStatus & 0b_0100_0000) > 0);
string ccc = dataArray[9].Trim();
_pump.SetTemperature(int.Parse(ccc));
return true;
}
}
public class MagpowerQueryOptionHandler : PumpMagpowerHandler
{
public MagpowerQueryOptionHandler(PumpMagpower pump)
: base(pump, "SEL10")
{
Name = "Query Status";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
//a,u,1,b,r
ResponseMessage = msg;
handled = true;
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.NoteError(result.Data);
return true;
}
var dataArray = result.Data.Split(',');
bool isFormat = dataArray.Count() == 5;
if (!isFormat)
{
_pump.NoteError(result.Data + "format error");
return true;
}
string r = dataArray[4].Trim();
if(r == "1")
{
_pump.NoteRemote(true);
}
else if(r == "0")
{
_pump.NoteRemote(false);
}
else
{
_pump.NoteError(result.Data + "format error");
}
return true;
}
}
public class MagpowerEchoHandler : PumpMagpowerHandler
{
public MagpowerEchoHandler(PumpMagpower pump, bool isOn)
: base(pump, isOn ? "ECHON" : "ECHOFF")
{
Name = "Echo " + (isOn ? "On" : "Off");
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as MagpowerMessage;
if (result.IsError)
{
_pump.NoteError(result.Data);
}
else
{
_pump.NoteInfo(Name);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
}