370 lines
11 KiB
C#
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|