You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

333 lines
12 KiB
C#

using Rs.Controls;
using Rs.Framework;
using Rs.Motion;
using Rs.Motion.Base;
using Rs.MotionPlat.Commom;
using Rs.MotionPlat.Flow;
using System.Threading;
namespace Rs.AutoDischarge.V3.Flow
{
enum ETrayTestStep
{
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
}
public enum ETrayStatus
{
/// <summary>
/// 空闲
/// </summary>
IDLE,
/// <summary>
/// 上料中
/// </summary>
Loading,
/// <summary>
/// 上料完成
/// </summary>
Loaded,
/// <summary>
/// 下料中
/// </summary>
Unloading,
/// <summary>
/// 下料完成
/// </summary>
Unloaded,
/// <summary>
/// 未知
/// </summary>
UnKnown
}
public class TrayTest:BaseFlow
{
public ETrayStatus Status { get; set; } = ETrayStatus.IDLE;
public bool NeedUnload = false;
public bool NeedLoad = false;
private bool finished = false;
private bool m_bWholeLoad = true;
//double baseHeight = -1;
//private static StockTest instance;
int stockNo = -1;//料仓编号
//double trayHeight = -1;
//public static StockTest Instance
//{
// get
// {
// if(instance == null)
// instance = new StockTest();
// return instance;
// }
//}
public TrayTest(int _stockNo)
{
stockNo = _stockNo;
StockFlow = AxisControl.GetAxis($"StockFlow{stockNo}");
StockZ = AxisControl.GetAxis($"StockZ{stockNo}");
//baseHeight = GlobalVar.Instance.GetValue($"Stock{stockNo}BaseHeight");
//trayHeight = GlobalVar.Instance.GetValue("TrayHeight");
}
private ETrayTestStep Step= ETrayTestStep.;
bool bStop= false;
IAxis StockFlow = null;
IAxis StockZ=null;
public override void Run()
{
switch (Step)
{
case ETrayTestStep.:
if (StockZ.HomeStatus == EHomeStatus.Finished)
{
if (NeedUnload)
{
Status = ETrayStatus.Unloading;
//下料
IoManager.Instance.WriteOut($"{stockNo}号料仓斜推气缸", 0);
Thread.Sleep(200);
finished = false;
NeedUnload = false;
Step = ETrayTestStep.;
}
else if (NeedLoad)
{
//上料
finished = false;
NeedLoad = false;
if (m_bWholeLoad)
Step = ETrayTestStep.;
else
Step = ETrayTestStep.;
}
}
break;
case ETrayTestStep.:
StockFlow.MoveOffset(SysConfigParam.GetValue<double>("HighSpeedDistance"), GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockFlow.IsStop(out bStop);
if (bStop)
{
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockFlow.MoveOffset(SysConfigParam.GetValue<double>("LowSpeedDistance"), 3);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
if (IoManager.Instance.ReadIn($"{stockNo}号料仓上料位光电检测") == 1)
{
Thread.Sleep(1000);
StockFlow.Stop();
Thread.Sleep(200);
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockZ.MovePos(SysConfigParam.GetValue<double>($"Stock{stockNo}BaseHeight") - SysConfigParam.GetValue<double>("TrayHeight"), GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockZ.IsStop(out bStop);
if (bStop)
{
IoManager.Instance.WriteOut($"{stockNo}号料仓托盘气缸", 0);
Thread.Sleep(200);
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockZ.MoveOffset(10, GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockZ.IsStop(out bStop);
if (bStop)
{
IoManager.Instance.WriteOut($"{stockNo}号料仓托盘气缸", 1);
Thread.Sleep(200);
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockZ.MovePos(0, GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockZ.IsStop(out bStop);
if (bStop)
{
Status = ETrayStatus.Unloaded;
finished = true;
Step = ETrayTestStep.;
StockZ.Home();
Thread.Sleep(200);
}
break;
case ETrayTestStep.:
//把料盘顶起一点点
Status = ETrayStatus.Loading;
StockZ.MovePos(SysConfigParam.GetValue<double>($"Stock{stockNo}BaseHeight"), GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockZ.IsStop(out bStop);
if (bStop)
{
IoManager.Instance.WriteOut($"{stockNo}号料仓托盘气缸",0);
Thread.Sleep(500);
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockZ.MovePos(SysConfigParam.GetValue<double>($"Stock{stockNo}BaseHeight") - (SysConfigParam.GetValue<double>("TrayHeight")), GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockZ.IsStop(out bStop);
if (bStop)
{
Thread.Sleep(500);
IoManager.Instance.WriteOut($"{stockNo}号料仓托盘气缸", 1);
Thread.Sleep(500);
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockZ.MovePos(0, GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockZ.IsStop(out bStop);
if (bStop)
{
StockZ.Home();
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockFlow.MoveOffset(SysConfigParam.GetValue<double>("HighSpeedDistance")*-1, GlobalVar.WholeSpeed);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
StockFlow.IsStop(out bStop);
if (bStop)
{
Step = ETrayTestStep.;
}
break;
case ETrayTestStep.:
StockFlow.MoveOffset(-1* SysConfigParam.GetValue<double>("LowSpeedDistance"), 3);
Step = ETrayTestStep.;
break;
case ETrayTestStep.:
if (IoManager.Instance.ReadIn($"{stockNo}号料仓料盘到位光电检测") == 1)
{
switch (stockNo)
{
case 1:
GlobalTray.Empty1Tray.ResetTray();
GlobalTray.Empty1Tray.Clear();
break;
case 2:
GlobalTray.InputTray.ResetTray();
GlobalTray.InputTray.Fill();
break;
case 3:
GlobalTray.OkTary.ResetTray();
GlobalTray.OkTary.Clear();
break;
case 4:
GlobalTray.NgTray.ResetTray();
GlobalTray.NgTray.Clear();
break;
case 5:
GlobalTray.MultiTray.ResetTray();
GlobalTray.MultiTray.Clear();
break;
case 6:
GlobalTray.Empty2Tray.ResetTray();
GlobalTray.Empty2Tray.Clear();
break;
default:
break;
}
Thread.Sleep(500);
StockFlow.Stop();
Thread.Sleep(200);
IoManager.Instance.WriteOut($"{stockNo}号料仓斜推气缸", 1);
Thread.Sleep(200);
finished = true;
Status = ETrayStatus.Loaded;
Step = ETrayTestStep.;
Thread.Sleep(200);
}
break;
}
}
public void Unload()
{
finished = false;
NeedUnload = true;
}
public void Load(bool bWholeLoad)
{
m_bWholeLoad = bWholeLoad;
finished = false;
NeedLoad = true;
}
public bool Finished()
{
return finished;
}
public bool IsLastTray()
{
if(IoManager.Instance.ReadIn($"{stockNo}号料仓最后一盘")==1)
{
return true;
}
return false;
}
public ETrayStatus GetStatus()
{
return Status;
}
}
}