147 lines
4.1 KiB
C#
147 lines
4.1 KiB
C#
|
using Aitex.Core.RT.Device;
|
|||
|
using MECF.Framework.Common.Communications;
|
|||
|
using Newtonsoft.Json.Linq;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Pumps.SkyPump
|
|||
|
{
|
|||
|
public abstract class SkyPumpHandler : HandlerBase
|
|||
|
{
|
|||
|
public SkyPump Device { get; }
|
|||
|
|
|||
|
public string _command;
|
|||
|
protected string _completeEvent;
|
|||
|
|
|||
|
|
|||
|
protected SkyPumpHandler(SkyPump device, string command,string completeEvent)
|
|||
|
: base(BuildMessage(device.Address, command))
|
|||
|
{
|
|||
|
Device = device;
|
|||
|
_command = command;
|
|||
|
_completeEvent = completeEvent;
|
|||
|
Name = command;
|
|||
|
}
|
|||
|
|
|||
|
private static string _startLine = "@";
|
|||
|
private static string _endLine = "\r";
|
|||
|
private static string BuildMessage(string address, string command)
|
|||
|
{
|
|||
|
return _startLine + address + command + _endLine;
|
|||
|
}
|
|||
|
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
|
|||
|
{
|
|||
|
SkyPumpMessage response = msg as SkyPumpMessage;
|
|||
|
ResponseMessage = msg;
|
|||
|
|
|||
|
if (response.IsAck)
|
|||
|
{
|
|||
|
SetState(EnumHandlerState.Acked);
|
|||
|
|
|||
|
if (response.Address != Device.Address)
|
|||
|
{
|
|||
|
Device.NoteError("Invalid address");
|
|||
|
msg.IsFormatError = true;
|
|||
|
}
|
|||
|
else if (!response.Data.Contains(_completeEvent))
|
|||
|
{
|
|||
|
Device.NoteError("Invalid response, no expected command feedback");
|
|||
|
msg.IsFormatError = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
SetState(EnumHandlerState.Completed);
|
|||
|
transactionComplete = true;
|
|||
|
Device.NoteError(null);
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
transactionComplete = false;
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public class SkyPumpRawCommandHandler : SkyPumpHandler
|
|||
|
{
|
|||
|
public SkyPumpRawCommandHandler(SkyPump device, string command, string completeEvent)
|
|||
|
: base(device, command, completeEvent)
|
|||
|
{
|
|||
|
}
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool handled)
|
|||
|
{
|
|||
|
if(base.HandleMessage(msg, out handled))
|
|||
|
{
|
|||
|
var result = msg as SkyPumpMessage;
|
|||
|
Device.NoteRawCommandInfo(_command, result.RawMessage);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public class SkyPumpStartHandler : SkyPumpHandler
|
|||
|
{
|
|||
|
public SkyPumpStartHandler(SkyPump device)
|
|||
|
: base(device, "CON_FDP_ON", "FDP_ONOK")
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool handled)
|
|||
|
{
|
|||
|
if(base.HandleMessage(msg, out handled))
|
|||
|
{
|
|||
|
Device.NoteStart(true);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
public class SkyPumpStopHandler : SkyPumpHandler
|
|||
|
{
|
|||
|
public SkyPumpStopHandler(SkyPump device)
|
|||
|
: base(device, "CON_FDP_OFF", "FDP_OFFOK")
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool handled)
|
|||
|
{
|
|||
|
if (base.HandleMessage(msg, out handled))
|
|||
|
{
|
|||
|
Device.NoteStart(false);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
public class SkyPumpReadRunParaHandler : SkyPumpHandler
|
|||
|
{
|
|||
|
public SkyPumpReadRunParaHandler(SkyPump device)
|
|||
|
: base(device, "READ_RUN_PARA", "RUN_PARA")
|
|||
|
{
|
|||
|
}
|
|||
|
public override bool HandleMessage(MessageBase msg, out bool handled)
|
|||
|
{
|
|||
|
if (base.HandleMessage(msg, out handled))
|
|||
|
{
|
|||
|
var result = msg as SkyPumpMessage;
|
|||
|
|
|||
|
if(result.Data.Length != 40)
|
|||
|
{
|
|||
|
Device.NoteError("Invalid 'RunParameter'response, the length is not 40");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Device.NoteRunPara(result.Data);
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|