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;
}
}
}