优化重排取料失败时,点击弹框按钮没有动作

master
lhiven 1 year ago
parent 426da01482
commit d8dd84ebe4

@ -243,7 +243,6 @@ namespace Rs.MotionPlat.Flow
{
logInfo = $"检测到还有条任务未执行,继续执行";
MessageQueue.Instance.Insert(logInfo);
LogHelper.Debug(logInfo);
flowStep = ERearrangeFlowStep.;
}
else
@ -262,7 +261,7 @@ namespace Rs.MotionPlat.Flow
if (FetchNum >= GlobalVar.DischargeRetakeNum)
{
DischargeDumpFlow.Instance.Start(curTask.FromType, curNozzle.NozzleIndex, curNozzle.FromIndex);
alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.tray), curNozzle.NozzleIndex, curNozzle.FromIndex + 1);
alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.tray), curNozzle.NozzleIndex, curTask.FromIndex + 1);
flowStep = ERearrangeFlowStep.;
}
else
@ -285,14 +284,14 @@ namespace Rs.MotionPlat.Flow
case ETipButton.Retry:
logInfo = GetClassName() + $"选择了重试,继续取料";
MessageQueue.Instance.Insert(logInfo);
if (curTask.FromType == TurnoverType.ToBeTested)
//if (curTask.FromType == TurnoverType.ToBeTested)
{
//检测料盘是否在上料位,在上料位则继续取料,不在上料位,则通知料仓把料盘送到上料位
if (!StockManager.Instance.GetStock(ETrayType.Input).HasTray())
if (!StockManager.Instance.GetStock(traytype).HasTray())
{
logInfo = GetClassName() + $"检测到料盘不在就绪状态,上料盘";
MessageQueue.Instance.Insert(logInfo);
StockManager.Instance.GetStock(ETrayType.Input).Load(EStockTrayLoadMode.AfterBacked, null);//.Load(EStockType.Input, EStockTrayLoadMode.AfterBacked);
StockManager.Instance.GetStock(traytype).Load(EStockTrayLoadMode.AfterBacked, null);//.Load(EStockType.Input, EStockTrayLoadMode.AfterBacked);
}
}
FetchNum = 0;
@ -310,50 +309,48 @@ namespace Rs.MotionPlat.Flow
logInfo = GetClassName() + $"上料完成,通知相机拍照,检测产品是否已拿走";
MessageQueue.Instance.Insert(logInfo);
}
haveProduct = UpCameraCheckFlow.Instance.CheckStockTrayHasProduct(traytype, curNozzle.FromIndex + 1, true);
haveProduct = UpCameraCheckFlow.Instance.CheckStockTrayHasProduct(traytype, curTask.FromIndex + 1, true);
if (!haveProduct.HasProduct)
{
logInfo = GetClassName() + "检测到产品已拿走,流程继续";
MessageQueue.Instance.Insert(logInfo);
FetchNum = 0;
curTask.Dealed= true;
//执行料仓Tray取料NG时的处理流程流程处理结束后流程继续
GlobalTray.GetTray(traytype).ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave);
GlobalTray.GetTray(traytype).ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave);
if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
{
flowStep = ERearrangeFlowStep.;
}
else
{
flowStep = ERearrangeFlowStep.;
if(NozzleManager.GetToUnloadNozzle()!=null)
{
flowStep = ERearrangeFlowStep.;
}
else
{
flowStep = ERearrangeFlowStep.;
}
}
}
else
{
alarmInfo = $"检测到{curNozzle.FromIndex + 1}号穴位产品未取出,请处理";
alarmInfo = $"检测到{curTask.FromIndex + 1}号穴位产品未取出,请处理";
flowStep = ERearrangeFlowStep.;
}
break;
case ETipButton.Yes://移动到安全位
//通知料仓把料盘退回到安全位
if (curTask.FromType == TurnoverType.ToBeTested)
{
logInfo = GetClassName() + $"通知料仓把料盘退回到安全位";
MessageQueue.Instance.Insert(logInfo);
StockManager.Instance.GetStock(ETrayType.Input).Unload(EStockTrayUnLoadMode.Back, null);//.UnLoad(EStockType.Input, EStockTrayUnLoadMode.Back);
//StockManager.Instance.Wait(EStockType.Input);
logInfo = GetClassName() + $"料仓已退回到安全位";
MessageQueue.Instance.Insert(logInfo);
}
else if (curTask.FromType == TurnoverType.Turnover)
{
logInfo = GetClassName() + $"通知排料头回安全位";
MessageQueue.Instance.Insert(logInfo);
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
logInfo = GetClassName() + $"排料头已回到安全位";
MessageQueue.Instance.Insert(logInfo);
}
alarmInfo = $"已运动到安全位,{curNozzle.NozzleIndex}号排料吸嘴取{curNozzle.FromIndex}号穴位产品次失败,请处理";
logInfo = GetClassName() + "选择了移动到安全位";
MessageQueue.Instance.Insert(logInfo);
logInfo = GetClassName() + $"通知料仓把料盘退回到安全位";
MessageQueue.Instance.Insert(logInfo);
StockManager.Instance.GetStock(traytype).Unload(EStockTrayUnLoadMode.Back, null);//.UnLoad(EStockType.Input, EStockTrayUnLoadMode.Back);
logInfo = GetClassName() + $"料仓已退回到安全位";
MessageQueue.Instance.Insert(logInfo);
alarmInfo = $"已运动到安全位,{curNozzle.NozzleIndex}号排料吸嘴取{curTask.FromIndex+1}号穴位产品次失败,请处理";
flowStep = ERearrangeFlowStep.;
break;
default:

@ -116,159 +116,164 @@ namespace Rs.MotionPlat.Flow
private void Client_DataRecived(System.Net.Sockets.Socket socket, byte[] data)
{
string msg = Encoding.UTF8.GetString(data);
foreach (string json in Scheduling.GetJsons(msg))
try
{
Scheduling schedule = JsonConvert.DeserializeObject<Scheduling>(json);
EInstruction eInstructioneInstruction = schedule.Instruction;
if(eInstructioneInstruction!= EInstruction.InquireStatus)
{
LogHelper.Debug(" >>> " +json);
}
switch (eInstructioneInstruction)
foreach (string json in Scheduling.GetJsons(msg))
{
case EInstruction.TransferSiloTray:
ReportToTestCenter(schedule);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying);
NgTrayToInputTrayFlow.Instance.MoveToInput();
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
Ops.Stop();
break;
case EInstruction.TestFinished:
MessageQueue.Instance.Insert("测试完成:"+JsonConvert.SerializeObject(schedule, new StringEnumConverter()));
ReportToTestCenter(schedule);
MachineManage.Instance.TestStatus = ETestStatus.Finished;
break;
case EInstruction.Rearrange:
Rearrange(json);
break;
case EInstruction.InquireSiloStatus:
InquireSiloStatus(json);
break;
case EInstruction.RequestSwitchTray:
RequestSwitchTray(json);
break;
case EInstruction.InquireConnectionInfo:
InquireConnectionInfo(json);
break;
case EInstruction.LoadAndUnload:
LoadAndUnload(json);
break;
case EInstruction.CancelLoadAndUnload:
//schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
ReportToTestCenter(schedule);
break;
case EInstruction.InquireStatus:
SchedulingStatusInfo statusInto = JsonConvert.DeserializeObject<SchedulingStatusInfo>(json);
switch (statusInto.Type)
{
case SchedulingStatusInfo.InfoType.State:
statusInto.Info = MachineManage.Instance.GetLoadUnloadStatus().ToString();// ERunState.Waiting.ToString();
break;
case SchedulingStatusInfo.InfoType.RunStatus:
statusInto.Info = MachineManage.Instance.GetCenterRunStatus().ToString();// ERunStatus.Started.ToString();
break;
case SchedulingStatusInfo.InfoType.RunMode:
statusInto.Info = MachineManage.Instance.RunMode.ToString();
break;
case SchedulingStatusInfo.InfoType.InitializeState:
statusInto.Info = MachineManage.Instance.InitializeState.ToString();// EInitializeState.Initialized.ToString();
break;
case SchedulingStatusInfo.InfoType.AssignMode:
statusInto.Info = EAssignMode.Normal.ToString();
break;
case SchedulingStatusInfo.InfoType.TesterState:
statusInto.Info = JsonConvert.SerializeObject(MachineManage.Instance.GetTesterInfo());//.ToString();
break;
default:
break;
}
ReportToTestCenter(statusInto);
//LogHelper.Debug(statusInto.ToString());
ReplayTaskEvent?.Invoke(statusInto.ToString());
break;
case EInstruction.SwitchStatus:
SchedulingStatusInfo switchStatus = JsonConvert.DeserializeObject<SchedulingStatusInfo>(msg);
SwitchStatus(switchStatus);
//MachineManage.Instance.MachineStatus= EMachineStatus.
//if (ss.TryConvertInfoTo<ERunMode>(out ERunMode runMode))
// MachineManage.Instance.RunMode = runMode;
//client.Send(ss.ToString());
//ReplayTaskEvent?.Invoke(ss.ToString());
break;
case EInstruction.ClearAlarm:
break;
case EInstruction.GetRecipeList:
SchedulingResult sr = JsonConvert.DeserializeObject<SchedulingResult>(msg);
sr.Message = "Default";
client.Send(sr.ToString());
ReplayTaskEvent?.Invoke(sr.ToString());
break;
case EInstruction.SetRecipe:
break;
case EInstruction.GetCurrentRecipe:
SchedulingResult srcur = JsonConvert.DeserializeObject<SchedulingResult>(msg);
srcur.Message = GlobalVar.CurRecipe;
client.Send(srcur.ToString());
ReplayTaskEvent?.Invoke(srcur.ToString());
break;
case EInstruction.TurnoverReady:
break;
case EInstruction.ChangeState:
SchedulingResult cs = JsonConvert.DeserializeObject<SchedulingResult>(msg);
client.Send(cs.ToString());
ReplayTaskEvent?.Invoke(cs.ToString());
break;
case EInstruction.ShowMessage:
break;
case EInstruction.CloseMessage:
SchedulingMessageBox mbox = JsonConvert.DeserializeObject<SchedulingMessageBox>(json);
TestCenterMessageBox.RecivedMsg(mbox);
//TestCenterMessageBoxManager.GetMsgbox(mbox.ID)?.Recived(mbox);
break;
case EInstruction.MachineButtonDown:
break;
case EInstruction.MachineButtonUp:
break;
case EInstruction.TrayProductRange:
break;
case EInstruction.ClearTrayProductRange:
schedulResult = JsonConvert.DeserializeObject<SchedulingResult>(msg);
client.Send(schedulResult.ToString());
ReplayTaskEvent?.Invoke(schedulResult.ToString());
break;
case EInstruction.BeginSwitchTray:
break;
case EInstruction.MoveScanner:
break;
case EInstruction.InquireMoveScannerState:
break;
case EInstruction.SetAlarms:
break;
case EInstruction.CancelAlarms:
SchedulingAlarms alarms= JsonConvert.DeserializeObject<SchedulingAlarms>(msg);
if(alarms!=null&&alarms.Alarms!=null&&alarms.Alarms.Count>0)
{
foreach (AlarmItem alarm in alarms.Alarms)
Scheduling schedule = JsonConvert.DeserializeObject<Scheduling>(json);
EInstruction eInstructioneInstruction = schedule.Instruction;
if (eInstructioneInstruction != EInstruction.InquireStatus)
{
LogHelper.Debug(" >>> " + json);
}
switch (eInstructioneInstruction)
{
case EInstruction.TransferSiloTray:
ReportToTestCenter(schedule);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying);
NgTrayToInputTrayFlow.Instance.MoveToInput();
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
Ops.Stop();
break;
case EInstruction.TestFinished:
MessageQueue.Instance.Insert("测试完成:" + JsonConvert.SerializeObject(schedule, new StringEnumConverter()));
ReportToTestCenter(schedule);
MachineManage.Instance.TestStatus = ETestStatus.Finished;
break;
case EInstruction.Rearrange:
Rearrange(json);
break;
case EInstruction.InquireSiloStatus:
InquireSiloStatus(json);
break;
case EInstruction.RequestSwitchTray:
RequestSwitchTray(json);
break;
case EInstruction.InquireConnectionInfo:
InquireConnectionInfo(json);
break;
case EInstruction.LoadAndUnload:
LoadAndUnload(json);
break;
case EInstruction.CancelLoadAndUnload:
//schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
ReportToTestCenter(schedule);
break;
case EInstruction.InquireStatus:
SchedulingStatusInfo statusInto = JsonConvert.DeserializeObject<SchedulingStatusInfo>(json);
switch (statusInto.Type)
{
case SchedulingStatusInfo.InfoType.State:
statusInto.Info = MachineManage.Instance.GetLoadUnloadStatus().ToString();// ERunState.Waiting.ToString();
break;
case SchedulingStatusInfo.InfoType.RunStatus:
statusInto.Info = MachineManage.Instance.GetCenterRunStatus().ToString();// ERunStatus.Started.ToString();
break;
case SchedulingStatusInfo.InfoType.RunMode:
statusInto.Info = MachineManage.Instance.RunMode.ToString();
break;
case SchedulingStatusInfo.InfoType.InitializeState:
statusInto.Info = MachineManage.Instance.InitializeState.ToString();// EInitializeState.Initialized.ToString();
break;
case SchedulingStatusInfo.InfoType.AssignMode:
statusInto.Info = EAssignMode.Normal.ToString();
break;
case SchedulingStatusInfo.InfoType.TesterState:
statusInto.Info = JsonConvert.SerializeObject(MachineManage.Instance.GetTesterInfo());//.ToString();
break;
default:
break;
}
ReportToTestCenter(statusInto);
//LogHelper.Debug(statusInto.ToString());
ReplayTaskEvent?.Invoke(statusInto.ToString());
break;
case EInstruction.SwitchStatus:
SchedulingStatusInfo switchStatus = JsonConvert.DeserializeObject<SchedulingStatusInfo>(msg);
SwitchStatus(switchStatus);
//MachineManage.Instance.MachineStatus= EMachineStatus.
//if (ss.TryConvertInfoTo<ERunMode>(out ERunMode runMode))
// MachineManage.Instance.RunMode = runMode;
//client.Send(ss.ToString());
//ReplayTaskEvent?.Invoke(ss.ToString());
break;
case EInstruction.ClearAlarm:
break;
case EInstruction.GetRecipeList:
SchedulingResult sr = JsonConvert.DeserializeObject<SchedulingResult>(msg);
sr.Message = "Default";
client.Send(sr.ToString());
ReplayTaskEvent?.Invoke(sr.ToString());
break;
case EInstruction.SetRecipe:
break;
case EInstruction.GetCurrentRecipe:
SchedulingResult srcur = JsonConvert.DeserializeObject<SchedulingResult>(msg);
srcur.Message = GlobalVar.CurRecipe;
client.Send(srcur.ToString());
ReplayTaskEvent?.Invoke(srcur.ToString());
break;
case EInstruction.TurnoverReady:
break;
case EInstruction.ChangeState:
SchedulingResult cs = JsonConvert.DeserializeObject<SchedulingResult>(msg);
client.Send(cs.ToString());
ReplayTaskEvent?.Invoke(cs.ToString());
break;
case EInstruction.ShowMessage:
break;
case EInstruction.CloseMessage:
SchedulingMessageBox mbox = JsonConvert.DeserializeObject<SchedulingMessageBox>(json);
TestCenterMessageBox.RecivedMsg(mbox);
//TestCenterMessageBoxManager.GetMsgbox(mbox.ID)?.Recived(mbox);
break;
case EInstruction.MachineButtonDown:
break;
case EInstruction.MachineButtonUp:
break;
case EInstruction.TrayProductRange:
break;
case EInstruction.ClearTrayProductRange:
schedulResult = JsonConvert.DeserializeObject<SchedulingResult>(msg);
client.Send(schedulResult.ToString());
ReplayTaskEvent?.Invoke(schedulResult.ToString());
break;
case EInstruction.BeginSwitchTray:
break;
case EInstruction.MoveScanner:
break;
case EInstruction.InquireMoveScannerState:
break;
case EInstruction.SetAlarms:
break;
case EInstruction.CancelAlarms:
SchedulingAlarms alarms = JsonConvert.DeserializeObject<SchedulingAlarms>(msg);
if (alarms != null && alarms.Alarms != null && alarms.Alarms.Count > 0)
{
if(!alarmInfos.ContainsKey(alarm.NO))
foreach (AlarmItem alarm in alarms.Alarms)
{
alarmInfos.Add(alarm.NO, alarm);
if (!alarmInfos.ContainsKey(alarm.NO))
{
alarmInfos.Add(alarm.NO, alarm);
}
}
}
}
break;
case EInstruction.TakingError:
break;
case EInstruction.CancelTakingError:
break;
case EInstruction.ScanBarcode:
break;
}
break;
case EInstruction.TakingError:
break;
case EInstruction.CancelTakingError:
break;
case EInstruction.ScanBarcode:
break;
}
}
}
catch (Exception ex)
{
LogHelper.Debug("receivedata:" + msg);
LogHelper.Debug("接收数据异常:"+ex.Message);
}
//string msg=Encoding.UTF8.GetString(data);
//LogHelper.TestCenterLog("接收:"+msg);
//ReciveTaskEvent?.Invoke(msg);
@ -297,6 +302,13 @@ namespace Rs.MotionPlat.Flow
SiloRearrange info = JsonConvert.DeserializeObject<SiloRearrange>(json);
ReportToTestCenter(info);
Thread.Sleep(200);
//TurnoverInfos tis = new TurnoverInfos();
//tis.GroupID = 0;
//tis.Instruction = EInstruction.RearrangeResult;
//ReportToTestCenter(tis);
//MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
//return;
if (info.SiloType == SchedulingSiloBase.ESiloType.Multifunction)
{
TraySlot ts = GlobalTray.MultiTray.GetSlot(Controls.ESlotStatus.NotHave);
@ -310,15 +322,18 @@ namespace Rs.MotionPlat.Flow
}
else
{
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Multifunction,TurnoverType.Multifunction, GlobalTray.MultiTray, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
Task.Run(() => {
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Multifunction, TurnoverType.Multifunction, GlobalTray.MultiTray, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
});
}
}
else if (info.SiloType == SchedulingSiloBase.ESiloType.Passed)
{
TraySlot ts = GlobalTray.OkTary.GetSlot(Controls.ESlotStatus.NotHave);
if (ts==null || ts.Column==0)//无需重排
if (ts == null || ts.Column == 0)//无需重排
{
TurnoverInfos tis = new TurnoverInfos();
tis.GroupID = 0;
@ -328,9 +343,13 @@ namespace Rs.MotionPlat.Flow
}
else
{
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Passed,TurnoverType.Passed, GlobalTray.OkTary, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
Task.Run(() => {
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Passed, TurnoverType.Passed, GlobalTray.OkTary, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
});
}
}
else if (info.SiloType == SchedulingSiloBase.ESiloType.Failed)
@ -346,9 +365,12 @@ namespace Rs.MotionPlat.Flow
}
else
{
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Failed,TurnoverType.Failed, GlobalTray.NgTray,ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
Task.Run(() => {
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Failed, TurnoverType.Failed, GlobalTray.NgTray, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
});
}
}
}

@ -31,6 +31,6 @@ using System.Runtime.InteropServices;
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
[assembly: AssemblyVersion("2.20.24.5")]
[assembly: AssemblyVersion("2.20.24.8")]
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

@ -86,7 +86,7 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>bin\Debug\Rs.DataAccess.dll</HintPath>
</Reference>
<Reference Include="Rs.Framework, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<Reference Include="Rs.Framework, Version=1.0.8797.30368, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>bin\Debug\Rs.Framework.dll</HintPath>
</Reference>
@ -715,6 +715,5 @@
<ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
Loading…
Cancel
Save