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.

646 lines
28 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using ChoiceTech.Halcon.Control;
using HalconDotNet;
using Rs.Camera;
using Rs.Controls;
using Rs.DataAccess;
using Rs.Framework;
using Rs.Motion.Base;
using Rs.MotionPlat.AuxiliaryEquipment;
using Rs.MotionPlat.Commom;
using Rs.MotionPlat.Entitys.Trays;
using Rs.MotionPlat.Flow;
using Rs.MotionPlat.Flow.Camera;
using Rs.MotionPlat.Flow.SafePosFlow;
using Rs.MotionPlat.Flow.SubFlow;
using Rs.MotionPlat.SysConfig;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Rs.MotionPlat.Commom.SchedulingMessageBox;
namespace Rs.MotionPlat
{
public partial class FormMain : BaseForm
{
HObject defaultImage = new HObject();
public FormMain()
{
InitializeComponent();
}
private void Instance_OnMatchResult(List<MatchResult> obj)
{
int i = 1;
foreach (MatchResult matchResult in obj)
{
HWindow_Final hwin = null;
if (i == 9) return;
switch (i)
{
case 1: hwin = himgNozzle1; break;
case 5: hwin = himgNozzle5; break;
default:
break;
}
if (hwin != null)
{
hwin.ClearWindow();
hwin.HobjectToHimage(matchResult.Himage);
if (matchResult.IsOK)
{
hwin.DispObj(matchResult.ContourXld, "green");
string OffsetCol = matchResult.OffsetCol.ToString("0.000");
string OffsetRow = matchResult.OffsetRow.ToString("0.000");
string OffsetA = matchResult.OffsetA.ToString("0.000");
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"X:{OffsetCol}", 200, 20, "green");
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"Y:{OffsetRow}", 400, 20, "green");
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"R:{OffsetA}", 600, 20, "green");
}
else
{
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, "NG", 20, 20, "red");
}
i++;
}
}
}
private void Instance_OnUpCameraGrabResult(List<Flow.Camera.VisionResult> obj)
{
foreach (VisionResult matchResult in obj)
{
HWindow_Final hwin = null;
switch (matchResult.SlotIndex)
{
case 1: hwin = hwin_turnoverSlot1; break;
case 2: hwin = hwin_turnoverSlot2; break;
case 3: hwin = hwin_turnoverSlot3; break;
case 4: hwin = hwin_turnoverSlot4; break;
case 5: hwin = hwin_turnoverSlot5; break;
case 6: hwin = hwin_turnoverSlot6; break;
case 7: hwin = hwin_turnoverSlot7; break;
case 8: hwin = hwin_turnoverSlot8; break;
case 9: hwin = hwin_turnoverSlot9; break;
case 10: hwin = hwin_turnoverSlot10; break;
case 11: hwin = hwin_turnoverSlot11; break;
case 12: hwin = hwin_turnoverSlot12; break;
case 13: hwin = hwin_turnoverSlot13; break;
case 14: hwin = hwin_turnoverSlot14; break;
case 15: hwin = hwin_turnoverSlot15; break;
case 16: hwin = hwin_turnoverSlot16; break;
case 17: hwin = hwin_turnoverSlot17; break;
case 18: hwin = hwin_turnoverSlot18; break;
case 19: hwin = hwin_turnoverSlot19; break;
case 20: hwin = hwin_turnoverSlot20; break;
case 21: hwin = hwin_turnoverSlot21; break;
case 22: hwin = hwin_turnoverSlot22; break;
case 23: hwin = hwin_turnoverSlot23; break;
case 24: hwin = hwin_turnoverSlot24; break;
case 25: hwin = hwin_turnoverSlot25; break;
case 26: hwin = hwin_turnoverSlot26; break;
case 27: hwin = hwin_turnoverSlot27; break;
case 28: hwin = hwin_turnoverSlot28; break;
case 29: hwin = hwin_turnoverSlot29; break;
case 30: hwin = hwin_turnoverSlot30; break;
case 31: hwin = hwin_turnoverSlot31; break;
case 32: hwin = hwin_turnoverSlot32; break;
default:
break;
}
if (hwin != null)
{
hwin.ClearWindow();
if (matchResult.SearchModelOK)
{
hwin.HobjectToHimage(matchResult.SourceImage);
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, matchResult.SN, 20, 20, "green");
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"x:{matchResult.OffsetX}", 200, 20, "green");
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"y:{matchResult.OffsetY}", 400, 20, "green");
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"r:{matchResult.OffsetR}", 600, 20, "green");
}
else
{
hwin.ClearWindow();
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, "NG", 20, 20, "red");
}
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
//获取运行信息
while (MessageQueue.Instance.HaveMessage())
{
MessageItem runInfo = MessageQueue.Instance.GetMessage();
if (runInfo != null)
{
while (dgv_runinfo.Rows.Count > 500)
{
dgv_runinfo.Rows.RemoveAt(dgv_runinfo.Rows.Count - 1);
}
dgv_runinfo.Rows.Insert(0, runInfo.Time, runInfo.Content);
}
MessageItem errorInfo = MessageQueue.Instance.GetWarn();
if (errorInfo != null)
{
while (dgv_errinfo.Rows.Count > 500)
{
dgv_errinfo.Rows.RemoveAt(dgv_errinfo.Rows.Count - 1);
}
dgv_errinfo.Rows.Insert(0, errorInfo.Time, errorInfo.Content);
}
}
if(MachineManage.Instance.MachineStatus== EMachineStatus.Working)
{
if (btnWholeHome.Visible == true)
btnWholeHome.Visible = false;
}
else
{
if (btnWholeHome.Visible == false)
btnWholeHome.Visible = true;
}
}
private void FormMain_Load(object sender, EventArgs e)
{
SqliteHelper db = new SqliteHelper();
string querySql = "select * from NormalTray";
DataTable dt = db.GetDataTable(querySql);
//if (dt != null && dt.Rows.Count > 0)
//{
// DataRow dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Empty1").First();
// if (dr != null)
// {
// trayMulti.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// trayMulti.RowNum = int.Parse(dr["RowNum"].ToString());
// }
// dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Input").First();
// if (dr != null)
// {
// //trayInput.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// //trayInput.RowNum = int.Parse(dr["RowNum"].ToString());
// }
// dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Ok").First();
// if (dr != null)
// {
// trayInput1.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// trayInput1.RowNum = int.Parse(dr["RowNum"].ToString());
// }
// dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Ng").First();
// if (dr != null)
// {
// trayInput2.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// trayInput2.RowNum = int.Parse(dr["RowNum"].ToString());
// }
// dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Multi").First();
// if (dr != null)
// {
// trayInput3.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// trayInput3.RowNum = int.Parse(dr["RowNum"].ToString());
// }
// dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Empty2").First();
// if (dr != null)
// {
// trayReject.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// trayReject.RowNum = int.Parse(dr["RowNum"].ToString());
// }
//}
timer1.Interval = 500;
timer1.Enabled = true;
DischargeFlow.Instance.OnMatchResult += Instance_OnMatchResult;
DischargeFlow.Instance.OnUpCameraGrabResult += Instance_OnUpCameraGrabResult;
DischargeFlow.Instance.OnShowGrabResult += Instance_OnShowGrabResult;
UpCameraCheckFlow.Instance.OnStockTrayHasOrNotResult += Instance_OnStockTrayProductHasOrNotResult;
UpCameraCheckFlow.Instance.OnTurnTrayHasOrNotResult += Instance_OnTurnoverTrayProductHasOrNotResult;
UpCameraScanBarCodeFlow.Instance.OnTurnoverTrayProductLocateResult += Instance_OnTurnoverTrayProductLocateResult;
trayTurnover.ItemName = "Turnover";
trayInput1.ItemName = "Input1";
trayInput2.ItemName = "Input2";
trayInput3.ItemName = "Input3";
trayReject.ItemName = "Reject";
trayGood1.ItemName = "Good1";
trayGood2.ItemName = "Good2";
trayGood3.ItemName = "Good3";
trayMulti.ItemName = "Multi";
trayInput1.InitSlotStatus = ESlotStatus.Have;
trayInput2.InitSlotStatus = ESlotStatus.Have;
trayInput3.InitSlotStatus = ESlotStatus.Have;
trayReject.InitSlotStatus = ESlotStatus.NotHave;
trayGood1.InitSlotStatus = ESlotStatus.NotHave;
trayGood2.InitSlotStatus = ESlotStatus.NotHave;
trayGood3.InitSlotStatus = ESlotStatus.NotHave;
trayMulti.InitSlotStatus = ESlotStatus.NotHave;
GlobalTray.Input1Tray= trayInput1;
GlobalTray.Input2Tray= trayInput2;
GlobalTray.Input3Tray= trayInput3;
GlobalTray.RejectTray= trayReject;
GlobalTray.Good1Tray= trayGood1;
GlobalTray.Good2Tray= trayGood2;
GlobalTray.Good3Tray= trayGood3;
GlobalTray.MultiTray= trayMulti;
GlobalTray.TurnoverTray = trayTurnover;
GlobalTray.TestTray = trayTest;
GlobalTray.DischargeNozzle= trayDischargeNozzle;
GlobalTray.TurnoverNozzle= trayTurnoverNozzle;
//StockManager.Instance.Start();
//LoadStockStatus();
HOperatorSet.ReadImage(out defaultImage, "default.bmp");
}
/// <summary>
/// 周转盘产品定位结果
/// </summary>
/// <param name="arg1">定位结果</param>
/// <param name="isOK">定位是否OK</param>
private void Instance_OnTurnoverTrayProductLocateResult(VisionResult arg1, bool isOK)
{
if(arg1!=null)
{
hWindow_Final3.ClearWindow();
hWindow_Final3.HobjectToHimage(arg1.SourceImage);
if(isOK)
{
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, isOK ? "OK" : "NG", 20, 20, "green");
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, $"X:{arg1.OffsetX.ToString("0.000")}", 200, 20, "green");
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, $"Y:{arg1.OffsetY.ToString("0.000")}", 400, 20, "green");
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, $"R:{arg1.OffsetR.ToString("0.000")}", 600, 20, "green");
}
else
{
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, isOK ? "OK" : "NG", 20, 20, "red");
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, $"X:{arg1.OffsetX.ToString("0.000")}", 200, 20, "red");
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, $"Y:{arg1.OffsetY.ToString("0.000")}", 400, 20, "red");
//HalconTool.DispMessage(hWindow_Final3.hWindowControl.HalconWindow, $"R:{arg1.OffsetR.ToString("0.000")}", 600, 20, "red");
}
}
}
private void Instance_OnTurnoverTrayProductHasOrNotResult(SlotProductHasOrNotResult obj)
{
if(obj !=null)
{
hwin_turnoverTrayHasOrNot.ClearWindow();
hwin_turnoverTrayHasOrNot.HobjectToHimage(obj.SourceImage);
if(obj.HasProduct)
{
//h//win_turnoverTrayHasOrNot.DispObj(obj.SearchRegion,"green");
}
else
{
//hwin_turnoverTrayHasOrNot.DispObj(obj.SearchRegion,"red");
}
}
}
private void Instance_OnStockTrayProductHasOrNotResult(SlotProductHasOrNotResult obj)
{
if (obj != null)
{
hWindow_Final4.ClearWindow();
hWindow_Final4.HobjectToHimage(obj.SourceImage);
if(obj.HasProduct)
{
//hWindow_Final4.DispObj(obj.SearchRegion,"green");
}
else
{
//hWindow_Final4.DispObj(obj.SearchRegion,"red");
}
}
}
private void Instance_OnShowGrabResult(VisionResult matchResult, bool arg2)
{
HWindow_Final hwin = null;
switch (matchResult.SlotIndex)
{
case 1: hwin = hwin_turnoverSlot1; break;
case 2: hwin = hwin_turnoverSlot2; break;
case 3: hwin = hwin_turnoverSlot3; break;
case 4: hwin = hwin_turnoverSlot4; break;
case 5: hwin = hwin_turnoverSlot5; break;
case 6: hwin = hwin_turnoverSlot6; break;
case 7: hwin = hwin_turnoverSlot7; break;
case 8: hwin = hwin_turnoverSlot8; break;
case 9: hwin = hwin_turnoverSlot9; break;
case 10: hwin = hwin_turnoverSlot10; break;
case 11: hwin = hwin_turnoverSlot11; break;
case 12: hwin = hwin_turnoverSlot12; break;
case 13: hwin = hwin_turnoverSlot13; break;
case 14: hwin = hwin_turnoverSlot14; break;
case 15: hwin = hwin_turnoverSlot15; break;
case 16: hwin = hwin_turnoverSlot16; break;
case 17: hwin = hwin_turnoverSlot17; break;
case 18: hwin = hwin_turnoverSlot18; break;
case 19: hwin = hwin_turnoverSlot19; break;
case 20: hwin = hwin_turnoverSlot20; break;
case 21: hwin = hwin_turnoverSlot21; break;
case 22: hwin = hwin_turnoverSlot22; break;
case 23: hwin = hwin_turnoverSlot23; break;
case 24: hwin = hwin_turnoverSlot24; break;
case 25: hwin = hwin_turnoverSlot25; break;
case 26: hwin = hwin_turnoverSlot26; break;
case 27: hwin = hwin_turnoverSlot27; break;
case 28: hwin = hwin_turnoverSlot28; break;
case 29: hwin = hwin_turnoverSlot29; break;
case 30: hwin = hwin_turnoverSlot30; break;
case 31: hwin = hwin_turnoverSlot31; break;
case 32: hwin = hwin_turnoverSlot32; break;
default:
break;
}
if (hwin != null)
{
hwin.ClearWindow();
if (arg2)
{
if (matchResult.ScanBarCodeOK)
{
string SN = matchResult.SN;
hwin.HobjectToHimage(matchResult.SourceImage);
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, $"sn:{SN}", 20, 20, "green");
}
else
{
hwin.HobjectToHimage(matchResult.SourceImage);
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, "NG", 20, 20, "red");
}
}
else
{
//加载默认图片
hwin.HobjectToHimage(defaultImage);
HalconTool.DispMessage(hwin.hWindowControl.HalconWindow, "no product", 20, 20, "red");
}
}
}
private void btnWholeHome_Load(object sender, EventArgs e)
{
Ops.GoHome();
}
private void btnSpaceRun_BtnClick(object sender, EventArgs e)
{
//SpaceTest.Instance.Start();
if (MachineManage.Instance.MachineStatus== EMachineStatus.Homed || MachineManage.Instance.MachineStatus == EMachineStatus.Stop)
{
//MachineManage.Instance.RunStatus = Commom.ERunStatus.Started;
////WorkFlow.Instance.Start();
//TurnoverFlow.Instance.Start();
//TakeTrayFlow.Instance.Start();
Ops.Start();
//TakeTrayFlow.Instance.Start();
//StockManager.Instance.Start();
//WorkEnvironment.Instance.Ready();
//TakeDumpTest.Instance.Start();
}
else
{
MessageQueue.Instance.Warn($"device {MachineManage.Instance.MachineStatus} statuscann't start");
}
}
private void btnStop_BtnClick(object sender, EventArgs e)
{
Ops.Stop();
//TakeDumpTest.Instance.Stop();
//LoadAndUnloadTest.Instance.Stop();
//TakeTrayTest.Instance.Stop();
//TurnoverFlow.Instance.Stop();
//TakeTrayFlow.Instance.Stop();
////ZRTest.Instance.Stop();
////CameraTriggerTest.Instance.Stop();
////SpaceTest.Instance.Stop();
//WorkFlow.Instance.Stop();
//MachineManage.Instance.MachineStatus = EMachineStatus.Stop;
}
private void LoadStockStatus()
{
//StringBuilder msg = new StringBuilder();
//if (StockManager.Instance.HasTray(ETrayType.Input))
//{
// msg.Append(ETrayType.Input.ToString()).Append(",");
//}
//if (StockManager.Instance.HasTray(ETrayType.Ok))
//{
// msg.Append(ETrayType.Ok.ToString()).Append(",");
//}
//if (StockManager.Instance.HasTray(ETrayType.Ng))
//{
// msg.Append(ETrayType.Ng.ToString()).Append(",");
//}
//if (StockManager.Instance.HasTray(ETrayType.Multi))
//{
// msg.Append(ETrayType.Multi.ToString()).Append(",");
//}
//if(msg.Length > 0)
//{
// Task.Run(() => {
// Msg.ShowInfo("Stock " + msg.ToString().TrimEnd(new char[] { ',' }) + " has tray,please check products status");
// });
//}
//if (StockManager.Instance.HasTray(ETrayType.Empty1))
//{
// StockManager.Instance.GetStock(ETrayType.Empty1).ChangeStatus(EStockTrayStatus.Loaded);
//}
//else
//{
// GlobalTray.GetTray(ETrayType.Empty1).Status = EStockTrayStatus.Empty.ToString();
//}
//if (StockManager.Instance.HasTray(ETrayType.Input))
//{
// StockManager.Instance.GetStock(ETrayType.Input).ChangeStatus(EStockTrayStatus.Loaded,false);
// TrayStatusManager.Init(ETrayType.Input);
// //GlobalTray.InputTray.ChangeStatus()
//}
//else
//{
// // GlobalTray.GetTray(ETrayType.Input).Status = EStockTrayStatus.Empty.ToString();
//}
//if (StockManager.Instance.HasTray(ETrayType.Ok))
//{
// StockManager.Instance.GetStock(ETrayType.Ok).ChangeStatus(EStockTrayStatus.Loaded, false);
// TrayStatusManager.Init(ETrayType.Ok);
//}
//else
//{
// GlobalTray.GetTray(ETrayType.Ok).Status = EStockTrayStatus.Empty.ToString();
//}
//if (StockManager.Instance.HasTray(ETrayType.Ng))
//{
// StockManager.Instance.GetStock(ETrayType.Ng).ChangeStatus(EStockTrayStatus.Loaded, false);
// TrayStatusManager.Init(ETrayType.Ng);
//}
//else
//{
// GlobalTray.GetTray(ETrayType.Ng).Status = EStockTrayStatus.Empty.ToString();
//}
//if (StockManager.Instance.HasTray(ETrayType.Multi))
//{
// StockManager.Instance.GetStock(ETrayType.Multi).ChangeStatus(EStockTrayStatus.Loaded, false);
// TrayStatusManager.Init(ETrayType.Multi);
//}
//else
//{
// GlobalTray.GetTray(ETrayType.Multi).Status = EStockTrayStatus.Empty.ToString();
//}
//if (StockManager.Instance.HasTray(ETrayType.Empty2))
//{
// StockManager.Instance.GetStock(ETrayType.Empty2).ChangeStatus(EStockTrayStatus.Loaded);
//}
//else
//{
// GlobalTray.GetTray(ETrayType.Empty2).Status = EStockTrayStatus.Empty.ToString();
//}
//TrayStatusManager.InitDischargeNozzle();
//TrayStatusManager.InitTrunoverTray();
//TrayStatusManager.InitTurnoverNozzle();
//TrayStatusManager.InitFixtureTray();
}
private void button1_Click(object sender, EventArgs e)
{
PromptMessageBox.ShowDialog(111, "取料失败!! \r\n周转吸嘴取治具{}号穴位的物料时失败 \r\nPickup fail !!\r\nNozzle of tester from site{} socket\r\nPickup fail !!\r\nSite{} socket 으로부터 Unit을 pickup할때 pickup fail이 발생하였습니다.", ETipButton.Yes);
}
/// <summary>
/// 治具盘画盘后事件
/// </summary>
/// <param name="obj"></param>
private void trayTest_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List<TraySlot> opSlots)
{
//TestTrayManager.Instance.ResetStatus();
//List<TraySlot> slots = obj.GetSlots(ESlotStatus.Have);
LogHelper.Debug($"手动画盘设置{opSlots.Select(s=>s.Index).ToJoinString()}{status}");
foreach (TraySlot slot in opSlots)
{
int slotIndex = slot.Index;
if(status== ESlotStatus.Have)
{
TestTrayManager.Instance.Slot(slotIndex).IsHasProduct = true;
}
else
{
TestTrayManager.Instance.Slot(slotIndex).ResetStatus();
}
}
}
/// <summary>
/// 周转盘画盘后事件
/// </summary>
/// <param name="obj"></param>
private void trayTurnover_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List<TraySlot> opSlots)
{
//TurnoverTrayManager.Instance.ResetStatus();
//List<TraySlot> slots = obj.GetSlots(ESlotStatus.Have);
LogHelper.Debug($"手动画盘设置{opSlots.Select(s => s.Index).ToJoinString()}{status}");
foreach (TraySlot slot in opSlots)
{
int slotIndex = slot.Index;
if (status == ESlotStatus.Have)
{
TurnoverTrayManager.Instance.Slot(slotIndex).IsHasProduct = true;
}
else
{
TurnoverTrayManager.Instance.Slot(slotIndex).ResetStatus();
}
}
}
/// <summary>
/// 周转吸嘴画盘后事件
/// </summary>
/// <param name="obj"></param>
private void trayTurnoverNozzle_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List<TraySlot> opSlots)
{
//TransitNozzleManager.Instance.ResetStatus();
//List<TraySlot> slots = obj.GetSlots(ESlotStatus.Have);
LogHelper.Debug($"手动画盘设置{opSlots.Select(s => s.Index).ToJoinString()}{status}");
foreach (TraySlot slot in opSlots)
{
int slotIndex = slot.Index;
if(status== ESlotStatus.Have)
{
TransitNozzleManager.Instance.Nozzle(slotIndex).FromType = TurnoverType.Turnover;
TransitNozzleManager.Instance.Nozzle(slotIndex).FromIndex = slotIndex - 1;
TransitNozzleManager.Instance.Nozzle(slotIndex).ToType = TurnoverType.Multifunction;
TransitNozzleManager.Instance.Nozzle(slotIndex).ToIndex = (slotIndex <= 8 ? slotIndex + 8 : slotIndex + 16) - 1;
TransitNozzleManager.Instance.Nozzle(slotIndex).IsHasProduct = true;
}
else
{
TransitNozzleManager.Instance.Nozzle(slotIndex).ResetStaus();
}
}
}
/// <summary>
/// 排料吸嘴画盘后事件
/// </summary>
/// <param name="obj"></param>
private void trayDischargeNozzle_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List<TraySlot> opSlots)
{
//NozzleManager.GetAllNozzles().ForEach((n) => { n.ResetStatus(); });
//List<TraySlot> slots = obj.GetSlots(ESlotStatus.Have);
LogHelper.Debug($"手动画盘设置{opSlots.Select(s => s.Index).ToJoinString()}{status}");
foreach (TraySlot slot in opSlots)
{
int slotIndex = slot.Index;
if (status == ESlotStatus.Have)
{
Nozzle nozzle = NozzleManager.GetNozzle(slotIndex);
if (nozzle != null)
{
NozzleManager.GetNozzle(slotIndex).FromType = TurnoverType.Turnover;
nozzle.FromIndex = slotIndex - 1;
NozzleManager.GetNozzle(slotIndex).ToType = TurnoverType.Multifunction;
nozzle.ToIndex = 0;
NozzleManager.GetNozzle(slotIndex).Status = ENozzleStatus.ToUnload;
}
}
else
{
NozzleManager.GetNozzle(slotIndex).ResetStatus();
}
}
}
}
}