优化启动流程

master
lhiven 2 years ago
parent a0b14cef04
commit 04e3e394e4

@ -108,7 +108,7 @@ namespace Rs.MotionPlat.Commom
TestCenter.Instance.Init(); TestCenter.Instance.Init();
TrayPointManager.LoadPoint(); TrayPointManager.LoadPoint();
AxisControl.AllStop(); AxisControl.AllStop();
if (errNum==0) if (errNum == 0)
{ {
MessageQueue.Instance.Insert("Init finished"); MessageQueue.Instance.Insert("Init finished");
} }
@ -121,7 +121,7 @@ namespace Rs.MotionPlat.Commom
Ops.Off("下左相机光源触发"); Ops.Off("下左相机光源触发");
Ops.Off("下右相机光源触发"); Ops.Off("下右相机光源触发");
Ops.Off("上相机光源触发"); Ops.Off("上相机光源触发");
TurnoverSlotOffset.Init();
MonitorSystemButton.Instance.Start(); MonitorSystemButton.Instance.Start();
//}); //});
@ -130,17 +130,18 @@ namespace Rs.MotionPlat.Commom
public static void Start() public static void Start()
{ {
Task.Run(() => {
MachineManage.Instance.MachineStatus = EMachineStatus.Working;
TakeTrayFlow.Instance.Start(); TakeTrayFlow.Instance.Start();
StockManager.Instance.Start(); StockManager.Instance.Start();
Task.Run(() => {
MachineManage.Instance.MachineStatus = EMachineStatus.Working;
WorkEnvironment.Instance.Ready(); WorkEnvironment.Instance.Ready();
if (WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne()) if (WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne())
{ {
WorkFlow.Instance.Start(); WorkFlow.Instance.Start();
TurnoverFlow.Instance.Start(); TurnoverFlow.Instance.Start();
MachineManage.Instance.RunState = ERunState.Waiting; MachineManage.Instance.SetCenterMachineStatus(ERunStatus.Started);
MachineManage.Instance.MachineStatus = EMachineStatus.Working; MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
MachineManage.Instance.SetLocalMachineStatus(EMachineStatus.Working);
} }
}); });
} }

@ -365,7 +365,15 @@ namespace Rs.MotionPlat.Commom
/// <summary> /// <summary>
/// 多功能仓 /// 多功能仓
/// </summary> /// </summary>
Multifunction Multifunction,
/// <summary>
/// 待测空盘
/// </summary>
EmptyInput,
/// <summary>
/// 已测空盘料仓
/// </summary>
EmptyOutput
} }
public enum EMultifunctionType public enum EMultifunctionType
{ {
@ -431,7 +439,11 @@ namespace Rs.MotionPlat.Commom
/// <summary> /// <summary>
/// 切回上一个 /// 切回上一个
/// </summary> /// </summary>
Previous Previous,
/// <summary>
/// 回收料盘
/// </summary>
Recycle
} }
public enum ESiloStatus public enum ESiloStatus

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Flow
{
/// <summary>
/// 报警常量
/// </summary>
public class AlarmConstID
{
/// <summary>
/// Tray盘取料失败报警
/// </summary>
public const int TrayTakeFailAlarm = 1;
/// <summary>
/// 周转盘取料失败报警
/// </summary>
public const int TurnoverTakeFailAlarm = 2;
/// <summary>
/// 测试盘取料失败报警
/// </summary>
public const int TestTakeFailAlarm = 3;
/// <summary>
/// 周转盘放料失败报警
/// </summary>
public const int TurnoverDumpFailAlarm = 4;
/// <summary>
/// 测试盘放料失败报警
/// </summary>
public const int TestDumpFailAlarm = 5;
/// <summary>
/// Empty1满料报警
/// </summary>
public const int Empty1FullAlarm = 6;
/// <summary>
/// Input盘缺料报警
/// </summary>
public const int InputNullAlarm = 7;
/// <summary>
/// OK盘满料报警
/// </summary>
public const int OkFullAlarm = 8;
/// <summary>
/// NG盘满料报警
/// </summary>
public const int NgFullAlarm = 9;
/// <summary>
/// 多功能盘满料报警
/// </summary>
public const int MultiFullAlarm = 10;
/// <summary>
/// Empty2缺料报警
/// </summary>
public const int Empty2NullAlarm = 11;
}
}

@ -13,6 +13,7 @@ namespace Rs.MotionPlat.Flow
protected bool b_IsRun = false; protected bool b_IsRun = false;
protected bool b_IsStop = true; protected bool b_IsStop = true;
private Task mainTask; private Task mainTask;
protected string logInfo = "";
protected int stopWaitTime = 10; protected int stopWaitTime = 10;
protected int sleepTime = 10; protected int sleepTime = 10;
public BaseFlow() { public BaseFlow() {

@ -92,5 +92,32 @@ namespace Rs.MotionPlat.Flow
public EAssignMode AssignMode { get; set; } = EAssignMode.Normal; public EAssignMode AssignMode { get; set; } = EAssignMode.Normal;
public bool NeedRestoreMove { get; set; } = false; public bool NeedRestoreMove { get; set; } = false;
/// <summary>
/// 设置返回中控的运行状态
/// </summary>
/// <param name="status"></param>
public void SetCenterMachineStatus(ERunStatus status)
{
RunStatus= status;
}
/// <summary>
/// 设置本地运行状态
/// </summary>
/// <param name="status"></param>
public void SetLocalMachineStatus(EMachineStatus status)
{
MachineStatus= status;
}
/// <summary>
/// 设置上下料的状态
/// </summary>
/// <param name="status"></param>
public void SetLoadUnloadStatus(ERunState status)
{
RunState= status;
}
} }
} }

@ -12,6 +12,7 @@ namespace Rs.AutoDischarge.V3.Flow
enum ETrayTestStep enum ETrayTestStep
{ {
, ,
,
, ,
, ,
, ,
@ -99,7 +100,6 @@ namespace Rs.AutoDischarge.V3.Flow
IAxis StockFlow = null; IAxis StockFlow = null;
IAxis StockZ=null; IAxis StockZ=null;
Stopwatch timer = new Stopwatch(); Stopwatch timer = new Stopwatch();
string loginfo = "";
public override void Run() public override void Run()
{ {
@ -110,6 +110,7 @@ namespace Rs.AutoDischarge.V3.Flow
{ {
if (NeedUnload) if (NeedUnload)
{ {
logInfo = $"{stockNo} 料仓收到下料任务";
Status = ETrayStatus.Unloading; Status = ETrayStatus.Unloading;
//下料 //下料
IoManager.Instance.WriteOut($"{stockNo}号料仓斜推气缸", 0); IoManager.Instance.WriteOut($"{stockNo}号料仓斜推气缸", 0);
@ -119,7 +120,7 @@ namespace Rs.AutoDischarge.V3.Flow
Step = ETrayTestStep.; Step = ETrayTestStep.;
} }
else if (NeedLoad) else if (NeedLoad && (Status!= ETrayStatus.Loading))
{ {
if(!Ops.IsOn($"{stockNo}号料仓料盘到位光电检测") || m_bWholeLoad==false) if(!Ops.IsOn($"{stockNo}号料仓料盘到位光电检测") || m_bWholeLoad==false)
{ {
@ -137,6 +138,7 @@ namespace Rs.AutoDischarge.V3.Flow
} }
else else
{ {
NeedLoad = false;
Msg.ShowError($"检测到{stockNo}号料仓处有料盘,不能重复送料盘"); Msg.ShowError($"检测到{stockNo}号料仓处有料盘,不能重复送料盘");
MessageQueue.Instance.Warn($"检测到{stockNo}号料仓处有料盘,不能重复送料盘"); MessageQueue.Instance.Warn($"检测到{stockNo}号料仓处有料盘,不能重复送料盘");
LogHelper.Debug($"检测到{stockNo}号料仓处有料盘,不能重复送料盘"); LogHelper.Debug($"检测到{stockNo}号料仓处有料盘,不能重复送料盘");
@ -144,6 +146,9 @@ namespace Rs.AutoDischarge.V3.Flow
} }
} }
break;
case ETrayTestStep.:
break; break;
case ETrayTestStep.: case ETrayTestStep.:
StockFlow.MoveOffset(SysConfigParam.GetValue<double>("HighSpeedDistance"), GlobalVar.WholeSpeed); StockFlow.MoveOffset(SysConfigParam.GetValue<double>("HighSpeedDistance"), GlobalVar.WholeSpeed);
@ -315,10 +320,10 @@ namespace Rs.AutoDischarge.V3.Flow
else else
{ {
timer.Stop(); timer.Stop();
loginfo = $"料仓{stockNo}上料未到位,请手动处理后,点击确定"; logInfo = $"料仓{stockNo}上料未到位,请手动处理后,点击确定";
MessageQueue.Instance.Warn(loginfo); MessageQueue.Instance.Warn(logInfo);
LogHelper.Debug(loginfo); LogHelper.Debug(logInfo);
Msg.ShowError(loginfo); Msg.ShowError(logInfo);
timer.Restart(); timer.Restart();
} }
break; break;

@ -16,7 +16,7 @@ namespace Rs.MotionPlat.Flow
{ {
public class TestCenter public class TestCenter
{ {
TcpClientHelper client = new TcpClientHelper("127.0.0.1",2048); TcpClientHelper client = new TcpClientHelper("10.86.15.67",2048);
SchedulingResult schedulResult = new SchedulingResult(); SchedulingResult schedulResult = new SchedulingResult();
SchedulingMaterial sm; SchedulingMaterial sm;
public event Action<string> ReciveTaskEvent; public event Action<string> ReciveTaskEvent;
@ -80,25 +80,16 @@ namespace Rs.MotionPlat.Flow
switch (eInstructioneInstruction) switch (eInstructioneInstruction)
{ {
case EInstruction.InquireSiloStatus: case EInstruction.InquireSiloStatus:
InquireSiloStatus(json);
break;
case EInstruction.RequestSwitchTray:
break; break;
case EInstruction.InquireConnectionInfo: case EInstruction.InquireConnectionInfo:
SchedulingConnectionInfo info = JsonConvert.DeserializeObject<SchedulingConnectionInfo>(json); InquireConnectionInfo(json);
info.Type = SchedulingConnectionInfo.EType.Scheduling;
client.Send(info.ToString());
//LogHelper.Debug(info.ToString());
ReplayTaskEvent?.Invoke(info.ToString());
break; break;
case EInstruction.LoadAndUnload: case EInstruction.LoadAndUnload:
LogHelper.Debug("recive:" + json); LoadAndUnload(json);
MachineManage.Instance.RunState = ERunState.Busying;
sm = JsonConvert.DeserializeObject<SchedulingMaterial>(json);
schedulResult = new SchedulingResult() { Instruction = sm.Instruction, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
string buffer = schedulResult.ToString();
client.Send(buffer);
LogHelper.TestCenterLog(buffer);
LoadAndUnloadTask.Instance.Add(sm);
MessageQueue.Instance.Insert(sm.Instruction.ToString());
ReplayTaskEvent?.Invoke(schedulResult.ToString());
break; break;
case EInstruction.CancelLoadAndUnload: case EInstruction.CancelLoadAndUnload:
//schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID }; //schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
@ -184,8 +175,6 @@ namespace Rs.MotionPlat.Flow
client.Send(schedulResult.ToString()); client.Send(schedulResult.ToString());
ReplayTaskEvent?.Invoke(schedulResult.ToString()); ReplayTaskEvent?.Invoke(schedulResult.ToString());
break; break;
case EInstruction.RequestSwitchTray:
break;
case EInstruction.BeginSwitchTray: case EInstruction.BeginSwitchTray:
break; break;
case EInstruction.MoveScanner: case EInstruction.MoveScanner:
@ -221,6 +210,68 @@ namespace Rs.MotionPlat.Flow
} }
private void LoadAndUnload(string json)
{
LogHelper.Debug("recive:" + json);
MachineManage.Instance.RunState = ERunState.Busying;
sm = JsonConvert.DeserializeObject<SchedulingMaterial>(json);
schedulResult = new SchedulingResult() { Instruction = sm.Instruction, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
string buffer = schedulResult.ToString();
client.Send(buffer);
LoadAndUnloadTask.Instance.Add(sm);
//MessageQueue.Instance.Insert(sm.Instruction.ToString());
//ReplayTaskEvent?.Invoke(schedulResult.ToString());
}
/// <summary>
/// 查询 状态
/// </summary>
/// <param name="json"></param>
private void InquireConnectionInfo(string json)
{
SchedulingConnectionInfo info = JsonConvert.DeserializeObject<SchedulingConnectionInfo>(json);
info.Type = SchedulingConnectionInfo.EType.Scheduling;
TestCenter.instance.Send(info);
}
/// <summary>
/// 查询料仓状态
/// </summary>
/// <param name="json"></param>
private void InquireSiloStatus(string json)
{
SchedulingSilo inquireSilo = JsonConvert.DeserializeObject<SchedulingSilo>(json);
switch (inquireSilo.SiloType)
{
case SchedulingSiloBase.ESiloType.ToBeTested:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.Passed:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.Failed:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.Multifunction:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.EmptyInput:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;// StockManager.Instance.GetStockStatus(EStockType.Empty1);
break;
case SchedulingSiloBase.ESiloType.EmptyOutput:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
}
TestCenter.instance.Send(inquireSilo);
//查询料仓状态
}
/// <summary>
/// 请求切盘
/// </summary>
private void RequestSwitchTray(string json)
{
}
/// <summary> /// <summary>
/// 断开连接 /// 断开连接
/// </summary> /// </summary>
@ -282,6 +333,12 @@ namespace Rs.MotionPlat.Flow
return client.Send(content); return client.Send(content);
} }
public int Send(Scheduling scheduing)
{
string content = JsonConvert.SerializeObject(scheduing, new StringEnumConverter());
return Send(content);
}
public void EndInput() public void EndInput()
{ {
Scheduling s = new Scheduling(); Scheduling s = new Scheduling();

@ -38,6 +38,7 @@ namespace Rs.MotionPlat.Flow
} }
public void Ready() public void Ready()
{ {
step = EStockCheckStep.Input;
EnvReadyOkEvent.Reset(); EnvReadyOkEvent.Reset();
Task.Run(() => Task.Run(() =>
{ {

@ -121,7 +121,6 @@ namespace Rs.MotionPlat.Flow
int needGrabNum = 0;//需要拍照的吸嘴数量 int needGrabNum = 0;//需要拍照的吸嘴数量
int reGrabCount = 0;//重拍次数 int reGrabCount = 0;//重拍次数
ErrorCode errCode = ErrorCode.Ok; ErrorCode errCode = ErrorCode.Ok;
string logInfo = "";
List<TurnoverInfo> testLoadList = new List<TurnoverInfo>(); List<TurnoverInfo> testLoadList = new List<TurnoverInfo>();
List<TurnoverInfo> testUnLoadList = new List<TurnoverInfo>(); List<TurnoverInfo> testUnLoadList = new List<TurnoverInfo>();
public override void Run() public override void Run()
@ -129,7 +128,7 @@ namespace Rs.MotionPlat.Flow
switch (flowStep) switch (flowStep)
{ {
case EWorkFlowStep.: case EWorkFlowStep.:
if (LoadAndUnloadTask.Instance.Count > 0) if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk)
{ {
if(LoadAndUnloadTask.Instance.CanRunTask()) if(LoadAndUnloadTask.Instance.CanRunTask())
{ {
@ -179,7 +178,7 @@ namespace Rs.MotionPlat.Flow
curSlotPoint = null; curSlotPoint = null;
if (curTask.FromType == TurnoverType.Turnover) if (curTask.FromType == TurnoverType.Turnover)
{ {
logInfo = $"吸嘴{curTask.FromIndex + 1} 去周转盘 {curTask.FromIndex + 1} 号穴位取料"; logInfo = $"吸嘴 {curNozzle.NozzleIndex} 去周转盘 {curTask.FromIndex + 1} 号穴位取料";
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTask.FromIndex + 1, EPointType.RUN); curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTask.FromIndex + 1, EPointType.RUN);
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
LogHelper.Debug(logInfo); LogHelper.Debug(logInfo);

@ -152,6 +152,7 @@
<Compile Include="DebugMove.designer.cs"> <Compile Include="DebugMove.designer.cs">
<DependentUpon>DebugMove.cs</DependentUpon> <DependentUpon>DebugMove.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Flow\AlarmConstID.cs" />
<Compile Include="Flow\AxisControl.cs" /> <Compile Include="Flow\AxisControl.cs" />
<Compile Include="Flow\BaseFlow.cs" /> <Compile Include="Flow\BaseFlow.cs" />
<Compile Include="Flow\HomeFlow.cs" /> <Compile Include="Flow\HomeFlow.cs" />

Loading…
Cancel
Save