using SHJX.Service.Model.Dao; using SHJX.Service.Model.Control; using SHJX.Service.Common.Extend; using SHJX.Service.Control.Modules; using SHJX.Service.Control.Interface; using SHJX.Service.Common.ReadXML; namespace SHJX.Service.Control.Route.RouteController { public class MotorZOperate : FlowControlOperateImp { private const string OpName = "MotorZ"; public static bool AxisZdownOrUp = false;//z轴上下状态 public virtual bool Operate(ReadConfigUtil config, DataEventArgs data) { var res = data.Task.RouteStep switch { "Z_Move_Down_From" => SetSerialPortData(data, data.Task.From), //Z轴下降 "Z_Move_Down_To" => SetSerialPortData(data, data.Task.To, isdeduct: true), "Z_Move_GoBack_From" or "Z_Move_GoBack_To" => MotorZGoBack(data), //Z轴上升 _ => false }; return res; } /// /// Z轴下降 /// /// /// 地址 /// 是否扣减 /// protected virtual bool SetSerialPortData(DataEventArgs data, string local, bool isdeduct = false) { //这里要做判断其实 //判断X、Y是否已经到达了该点,并且是否Z轴在原点的位置上 var movelenght = local.CalculateAreaPoint(OpName); if (isdeduct) { AxisZdownOrUp = true; movelenght += 10000; } else AxisZdownOrUp = false; var portArgs = new PortArgs() { WriteWay = WriteWay.Move, TypeName = OpName, Distance = movelenght }; return data.Client.Factory(OpName).Write(portArgs); } /// /// Z轴返回原点 /// /// public bool MotorZGoBack(DataEventArgs data) { PortArgs portArgs = new() { WriteWay = WriteWay.GoBack, TypeName = OpName, Distance = OpName.MotorFinal() }; var res = data.Client.Factory(OpName).Write(portArgs); AxisZdownOrUp = true; if (CancelCache.Contains(data.Task.OriginLocalName)&&data.Task.RouteType!="SP") { if (CancelCache.Get(data.Task.OriginLocalName).Equals("Cancel")) { var task = data.Task; task.Status = TaskState.Cancel; data.DataManager.Update(task); CancelCache.Remove(data.Task.OriginLocalName); } } return res; } } }