|
|
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} status,cann'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();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|