using System; using SHJX.Service.Model.Control; using SHJX.Service.Control.Modules; using SHJX.Service.Control.Interface; using SHJX.Service.Common.ReadXML; namespace SHJX.Service.Control.Route.RouteController { public class MotorTOperate : FlowControlOperateImp { private const string OpName = "MotorT"; public virtual bool Operate(ReadConfigUtil config, DataEventArgs data) { try { var res = data.Task.RouteStep switch { "T_Move_L" or "T_Move_W" => SendMove(data), "T_Move_GoBack_L" or "T_Move_GoBack_W" => SendGoBack(data), _ => throw new ArgumentNullException(data.Task.RouteStep), }; return res; } catch (Exception) { throw; } } private bool SendMove(DataEventArgs data) { var portArgs = GetArg(data.Task.To); portArgs.WriteWay = WriteWay.Move; return data.Client.Factory(OpName).Write(portArgs); } private bool SendGoBack(DataEventArgs data) { var portArgs = GetArg(data.Task.To); portArgs.WriteWay = WriteWay.GoBack; portArgs.Distance = OpName.MotorFinal(); return data.Client.Factory(OpName).Write(portArgs); } protected virtual PortArgs GetArg(string to) { return new() { TypeName = OpName, Distance = to.CalculateAreaPoint(OpName) }; } } }