Sic.Framework/MECF.Framework.RT.Equipment.../HardwareUnits/ThrottleValves/KITZ/KITZTHandler.cs

370 lines
11 KiB
C#

using Aitex.Core.Common.DeviceData;
using Aitex.Core.RT.SCCore;
using MECF.Framework.Common.Communications;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.ThrottleValves.KITZ
{
//PCH-C6
public abstract class KITZHandler : HandlerBase
{
public KITZThrottleValve ThrottleValveDevice { get; }
protected KITZHandler(KITZThrottleValve throttleValve, bool isQuery, string parameter, string data = "")
: base(BuildMessage(isQuery, parameter, data))
{
ThrottleValveDevice = throttleValve;
}
private static string BuildMessage(bool isQuery, string parameter, string data)
{
string msg = string.Empty;
if (isQuery)
msg = parameter.ToLower() + ":";
else
msg = parameter.ToUpper() + ":" + data;
return $"{msg}\r\n";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
ResponseMessage = msg;
handled = true;
return true;
}
}
//remote switch
public class RemoteHandler : KITZHandler
{
public RemoteHandler(KITZThrottleValve throttleValve)
: base(throttleValve, false, "REMOTE")
{
Name = "Remote";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//Calibration
public class CalibrationHandler : KITZHandler
{
public CalibrationHandler(KITZThrottleValve throttleValve)
: base(throttleValve, false, "CAL")
{
Name = "Cal";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//Close
public class CloseHandler : KITZHandler
{
public CloseHandler(KITZThrottleValve throttleValve)
: base(throttleValve, false, "C")
{
Name = "C";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//Open
public class OpenHandler : KITZHandler
{
public OpenHandler(KITZThrottleValve throttleValve)
: base(throttleValve, false, "O")
{
Name = "O";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//Position control
public class SetPositionHandler : KITZHandler
{
public SetPositionHandler(KITZThrottleValve throttleValve, float position)
: base(throttleValve, false, "POS", position.ToString("f1"))
{
Name = "POS";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//Pressure control
public class SetPressureHandler : KITZHandler
{
//PRS: (a), (b), (c), (d), (e)
//a:Map No.
//b:Table No.
//c:DB No.
//d:RAMP Mode No.
//e:Target pressure
public SetPressureHandler(KITZThrottleValve throttleValve, float pressure, int dbNo = 1)
: base(throttleValve, false, "PRS", $"1,1,{dbNo},1," + pressure.ToString("f3"))
{
Name = "PRS";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
//State
public class QueryStateHandler : KITZHandler
{
public QueryStateHandler(KITZThrottleValve throttleValve)
: base(throttleValve, true, "sts")
{
Name = "sts";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper() || string.IsNullOrEmpty(result.Parameter))
{
ThrottleValveDevice.SetError(result.RawMessage);
}
string[] parameters = Regex.Split(result.Parameter, ",");
if (parameters.Length < 4)
{
ThrottleValveDevice.SetError(result.RawMessage);
return false;
}
var accessMode = parameters[0];
var controlMode = parameters[1];
var warningInfo = parameters[2];
var cycleCounter = parameters[3];
if (controlMode.ToUpper() == "CLOSE")
{
ThrottleValveDevice.Mode = PressureCtrlMode.TVClose;
}
else if (controlMode.ToUpper() == "OPEN")
{
ThrottleValveDevice.Mode = PressureCtrlMode.TVOpen;
}
else if (controlMode.ToUpper() == "PRESS")
{
ThrottleValveDevice.Mode = PressureCtrlMode.TVPressureCtrl;
}
else if (controlMode.ToUpper() == "POS")
{
ThrottleValveDevice.Mode = PressureCtrlMode.TVPositionCtrl;
}
else if (controlMode.ToUpper() == "CALIB")
{
ThrottleValveDevice.Mode = PressureCtrlMode.TVCalib;
}
if (warningInfo.Contains("1") && ThrottleValveDevice.Mode != PressureCtrlMode.TVCalib)
{
ThrottleValveDevice.SetError(result.RawMessage);
return false;
}
ResponseMessage = msg;
handled = true;
return true;
}
}
public class QueryPressureHandler : KITZHandler
{
public QueryPressureHandler(KITZThrottleValve throttleValve)
: base(throttleValve, true, "prs")
{
Name = "prs";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper() || string.IsNullOrEmpty(result.Parameter))
{
ThrottleValveDevice.SetError(result.RawMessage);
}
if (!float.TryParse(result.Parameter, out float pressure))
{
//ThrottleValveDevice.SetErrorCode(1);
}
else
{
ThrottleValveDevice.PressureFeedback = pressure;
}
ResponseMessage = msg;
handled = true;
return true;
}
}
public class QueryPositionHandler : KITZHandler
{
public QueryPositionHandler(KITZThrottleValve throttleValve)
: base(throttleValve, true, "pos")
{
Name = "pos";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper() || string.IsNullOrEmpty(result.Parameter))
{
ThrottleValveDevice.SetError(result.RawMessage);
}
if (!float.TryParse(result.Parameter, out float position))
{
//ThrottleValveDevice.SetErrorCode(1);
}
else
{
ThrottleValveDevice.PositionFeedback = position;
}
ResponseMessage = msg;
handled = true;
return true;
}
}
public class CalbrationHandler : KITZHandler
{
public CalbrationHandler(KITZThrottleValve throttleValve)
: base(throttleValve, false, "CAL")
{
Name = "CAL";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as KITZMessage;
handled = false;
if (!result.IsResponse) return true;
if (result.IsError || result.IsFormatError || result.IsNak || result.Command.ToUpper() != Name.ToUpper())
{
ThrottleValveDevice.SetError(result.RawMessage);
}
ResponseMessage = msg;
handled = true;
return true;
}
}
}