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