using System; using SHJX.Service.Model.Control; using SHJX.Service.Control.Modules; using SHJX.Service.Control.Interface; using System.Threading.Tasks; using SHJX.Service.Common.ReadXML; using System.Collections.Generic; namespace SHJX.Service.Control.Route.RouteController { /// /// 消解位移动 /// public class DissolveMoveOperate : FlowControlOperateImp { private const string Name = "DissolvePosition"; private const string OpName = "Dissolve"; public virtual bool Operate(ReadConfigUtil config, DataEventArgs data) { var clearPos = Name.GetEquipmentState(); var portArgs = new PortArgs { ManualOrAuto = "Auto", TypeName = OpName, Distance = -DataCentre.GetConfig.GetPositionDistance("Dissolve") }; switch (data.Task.RouteStep) { case "Clear_In": MotorSpeed itemSpeed = config.GetSpeed[0]; itemSpeed.Speed = 6; SetSpeed(itemSpeed); itemSpeed = config.GetSpeed[1]; itemSpeed.Speed = 6; SetSpeed(itemSpeed); List names = new() { "MotorZ", "MotorX", "MotorY" }; names.ForEach(async item => { var res = await XYZGoBack(item); }); itemSpeed = config.GetSpeed[0]; SetSpeed(itemSpeed); itemSpeed = config.GetSpeed[1]; SetSpeed(itemSpeed); portArgs.WriteWay = WriteWay.Normotopia; if (clearPos.EquipmentState.Equals(EquipmentEnum.Normotopia)) { clearPos.EquipmentState = EquipmentEnum.Antiposition; } break; case "Clear_Out": MotorSpeed itemSpeed1 = config.GetSpeed[0]; itemSpeed1.Speed = 6; SetSpeed(itemSpeed1); itemSpeed1 = config.GetSpeed[1]; itemSpeed1.Speed = 6; SetSpeed(itemSpeed1); List names1 = new() { "MotorZ", "MotorX", "MotorY" }; names1.ForEach(async item => { var res = await XYZGoBack(item); }); itemSpeed1 = config.GetSpeed[0]; SetSpeed(itemSpeed1); itemSpeed1 = config.GetSpeed[1]; SetSpeed(itemSpeed1); portArgs.WriteWay = WriteWay.Antiposition; if (clearPos.EquipmentState.Equals(EquipmentEnum.Antiposition)) { clearPos.EquipmentState = EquipmentEnum.Normotopia; } break; default: throw new ArgumentNullException(data.Task.RouteStep); } var res = data.Client.Factory(OpName).Write(portArgs); data.DataManager.Update(clearPos); return res; } private async Task XYZGoBack(string name) { var portArgs = new PortArgs() { ReadWay = "OriginalPosition", TypeName = name, WriteWay = WriteWay.GoBack }; var res= (bool)DataCentre.GetClient.Factory(name).Read(portArgs) || DataCentre.GetClient.Factory(name).Write(portArgs); name.UpdateMotorPoint(); return res; } public bool SetSpeed(MotorSpeed speed) { #region 速度 PortArgs speedArgs = new PortArgs() { TypeName = speed.NodeName, Distance = speed.Speed, WriteWay = WriteWay.Speed }; var res = DataCentre.GetClient.Factory(speed.NodeName).Write(speedArgs); #endregion return res; } } }