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.

671 lines
25 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 Rs.Camera;
using Rs.Controls;
using Rs.DataAccess;
using Rs.Framework;
using Rs.Motion.Base;
using Rs.MotionPlat.Commom;
using Rs.MotionPlat.Entitys;
using Rs.MotionPlat.Entitys.Trays;
using Rs.MotionPlat.Flow;
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;
namespace Rs.MotionPlat
{
public partial class FormMain : BaseForm
{
public FormMain()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(GlobalUser.UserName))
{
if(cboxTestMode.Enabled==false)
cboxTestMode.Enabled = true;
if(cboxTestMethod.Enabled==false)
cboxTestMethod.Enabled = true;
if(txtLotName.Enabled==false)
txtLotName.Enabled = true;
if(cboxMtcp.Enabled==false)
cboxMtcp.Enabled = true;
if (cboxNoise.Enabled == false)
cboxNoise.Enabled = true;
if(txtGrrProductNum.Enabled==false)
txtGrrProductNum.Enabled = true;
if(txtGrrTestNum.Enabled==false)
txtGrrTestNum.Enabled = true;
}
else
{
if (cboxTestMode.Enabled == true)
cboxTestMode.Enabled = false;
if (cboxTestMethod.Enabled == true)
cboxTestMethod.Enabled = false;
if (txtLotName.Enabled == true)
txtLotName.Enabled = false;
if (cboxMtcp.Enabled)
cboxMtcp.Enabled = false;
if(cboxNoise.Enabled)
cboxNoise.Enabled = false;
if (txtGrrProductNum.Enabled)
txtGrrProductNum.Enabled = false;
if (txtGrrTestNum.Enabled)
txtGrrTestNum.Enabled = false;
}
//获取运行信息
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)
{
tabControlEx1.TabPages.RemoveAt(1);
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") == "Ng").First();
if (dr != null)
{
trayNg.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
trayNg.RowNum = int.Parse(dr["RowNum"].ToString());
}
dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "ReTest").First();
if (dr != null)
{
trayReTest.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
trayReTest.RowNum = int.Parse(dr["RowNum"].ToString());
}
dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Grr").First();
if (dr != null)
{
trayGrr.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
trayGrr.RowNum = int.Parse(dr["RowNum"].ToString());
}
dr = dt.AsEnumerable().Where(r => r.Field<string>("TrayName") == "Ok").First();
if (dr != null)
{
trayOk.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
trayOk.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") == "Grab").First();
//if (dr != null)
//{
// trayGrab.ColumnNum = int.Parse(dr["ColumnNum"].ToString());
// trayGrab.RowNum = int.Parse(dr["RowNum"].ToString());
//}
}
timer1.Interval = 500;
timer1.Enabled = true;
timer2.Interval = 200;
timer2.Enabled = true;
trayNg.ItemName = "Empty1";
trayReTest.ItemName = "Input";
trayGrr.ItemName = "Ok";
trayOk.ItemName = "Ng";
trayInput.ItemName = "Multi";
trayNg.InitSlotStatus = ESlotStatus.NotHave;
trayReTest.InitSlotStatus = ESlotStatus.NotHave;
trayGrr.InitSlotStatus = ESlotStatus.NotHave;
trayOk.InitSlotStatus = ESlotStatus.NotHave;
trayInput.InitSlotStatus = ESlotStatus.NotHave;
GlobalTray.NgTray = trayNg;
GlobalTray.RetestTray = trayReTest;
GlobalTray.GrrTray=trayGrr;
GlobalTray.OkTary = trayOk ;
GlobalTray.InputTray = trayInput;
//GlobalTray.GrabTray = trayGrab;
GlobalTray.NozzleTray = trayNozzle ;
//StockManager.Instance.Start();
LoadStockStatus();
switchButton1.Checked = GlobalVar.DeviceIsAuto;
//uTestCell1.BindEntity(TestFixtureManager.Instance.GetTestFixture(1));
//uTestCell2.BindEntity(TestFixtureManager.Instance.GetTestFixture(2));
//uTestCell3.BindEntity(TestFixtureManager.Instance.GetTestFixture(3));
//uTestCell4.BindEntity(TestFixtureManager.Instance.GetTestFixture(4));
//uTestCell5.BindEntity(TestFixtureManager.Instance.GetTestFixture(5));
//uTestCell6.BindEntity(TestFixtureManager.Instance.GetTestFixture(6));
//PositionHelper.BindSinglePosition(txtLotName,"string");
for(int i=1;i<=6;i++)
{
switch (i)
{
case 1:
TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC1;
break;
case 2:
TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC2;
break;
case 3:
TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC3;
break;
case 4:
TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC4;
break;
case 5:
TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC5;
break;
case 6:
TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC6;
break;
}
}
timertc1.Enabled = true;
timertc2.Enabled = true;
timertc3.Enabled = true;
timertc4.Enabled = true;
timertc5.Enabled = true;
timertc6.Enabled = true;
BindParameter();
//if (!string.IsNullOrEmpty(GlobalUser.UserName))
//{
// txtLotName.Enabled = true;
// //txtConfig.Enabled = true;
// //cboxConfigName.Enabled = true;
// //txtSubLotName.Enabled = true;
// //txtSiteID.Enabled = true;
// //txtProjectID.Enabled = true;
// cboxMtcp.Enabled = true;
// cboxNoise.Enabled = true;
// cboxTestMethod.Enabled = true;
// cboxTestMode.Enabled = true;
//}
uTestCell1.SetIndex(1);
uTestCell2.SetIndex(2);
uTestCell3.SetIndex(3);
uTestCell4.SetIndex(4);
uTestCell5.SetIndex(5);
uTestCell6.SetIndex(6);
}
void BindParameter()
{
txtLotName.Text = GlobalVar.LotName;
//txtConfig.Text = GlobalVar.Config;
//cboxConfigName.SelectedItem = GlobalVar.ConfigName;
//txtSubLotName.Text=GlobalVar.SubLotName;
//txtSiteID.Text= GlobalVar.SiteID;
//txtProjectID.Text=GlobalVar.ProjectID;
cboxMtcp.Checked = GlobalVar.Mtcp;
cboxNoise.Checked = GlobalVar.Noise;
cboxTestMode.SelectedItem = GlobalVar.TestMode;
cboxTestMethod.SelectedItem = GlobalVar.TestMethod;
txtGrrProductNum.Text = GlobalVar.GrrProductNum.ToString();
txtGrrTestNum.Text = GlobalVar.GrrTestNum.ToString();
}
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 (Ops.IsOn("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();
//}
//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;
//TransitNozzleManager.Instance.Nozzle(slotIndex).Update();
}
else
{
//TransitNozzleManager.Instance.Nozzle(slotIndex).ResetStaus();
//TransitNozzleManager.Instance.Nozzle(slotIndex).Update();
}
}
}
/// <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;
nozzle.Update();
}
}
else
{
NozzleManager.GetNozzle(slotIndex).Clear();
NozzleManager.GetNozzle(slotIndex).Update();
}
}
}
private void switchButton1_Click(object sender, EventArgs e)
{
//GlobalVar.DeviceIsAuto = switchButton1.Checked;
if(switchButton1.Checked)
{
GlobalVar.Clear = false;
}
else
{
GlobalVar.Clear = true;
}
}
private void timer2_Tick(object sender, EventArgs e)
{
}
public void txtSysParam_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
UpdateSysParam((TextBox)sender);
}
}
private void timer3_Tick(object sender, EventArgs e)
{
uTestCell1.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(1));
}
private void timertc2_Tick(object sender, EventArgs e)
{
uTestCell2.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(2));
}
private void timertc3_Tick(object sender, EventArgs e)
{
uTestCell3.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(3));
}
private void timertc4_Tick(object sender, EventArgs e)
{
uTestCell4.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(4));
}
private void timertc5_Tick(object sender, EventArgs e)
{
uTestCell5.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(5));
}
private void timertc6_Tick(object sender, EventArgs e)
{
uTestCell6.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(6));
}
private void cboxMtcp_Click(object sender, EventArgs e)
{
if(cboxMtcp.Checked)
{
SysConfigParam.Update("Mtcp","true");
}
else
{
SysConfigParam.Update("Mtcp", "false");
}
}
private void cboxNoise_Click(object sender, EventArgs e)
{
if (cboxNoise.Checked)
{
SysConfigParam.Update("Noise", "true");
}
else
{
SysConfigParam.Update("Noise", "false");
}
}
private void cboxTestMethod_SelectedIndexChanged(object sender, EventArgs e)
{
SysConfigParam.Update("TestMethod", cboxTestMethod.SelectedItem.ToString());
}
private void cboxTestMode_SelectedIndexChanged(object sender, EventArgs e)
{
SysConfigParam.Update("TestMode", cboxTestMode.SelectedItem.ToString());
if(cboxTestMode.SelectedItem!=null && (cboxTestMode.SelectedItem.ToString()=="GRR" || cboxTestMode.SelectedItem.ToString()=="AUDIT"))
{
GlobalTray.GrrTray.ChangeStatus(ESlotStatus.NotHave);
for (int i=0;i<GlobalVar.GrrProductNum;i++)
{
GlobalTray.GrrTray.ChangeStatus(i+1,ESlotStatus.Have);
}
}
else
{
GlobalTray.GrrTray.ChangeStatus(ESlotStatus.NotHave);
}
}
private void btnClearData_Click(object sender, EventArgs e)
{
TestFixtureManager.Instance.GetTestFixture(1).ClearData();
TestFixtureManager.Instance.GetTestFixture(2).ClearData();
TestFixtureManager.Instance.GetTestFixture(3).ClearData();
TestFixtureManager.Instance.GetTestFixture(4).ClearData();
TestFixtureManager.Instance.GetTestFixture(5).ClearData();
TestFixtureManager.Instance.GetTestFixture(6).ClearData();
}
private void btnLight_Click(object sender, EventArgs e)
{
if(Ops.IsOutOn("照明灯"))
{
Ops.Off("照明灯");
}
else
{
Ops.On("照明灯");
}
}
private void btnSelectProduct_Click(object sender, EventArgs e)
{
SelectProductFrm selectPro = new SelectProductFrm();
selectPro.ShowDialog();
}
private void btnNozzleStatus_Click(object sender, EventArgs e)
{
NozzleStatusFrm nozzleFrm = new NozzleStatusFrm();
nozzleFrm.TopMost = true;
nozzleFrm.ShowInTaskbar = false;
nozzleFrm.Show();
}
private void btnBuzzer_Click(object sender, EventArgs e)
{
Ops.Off("蜂鸣器");
}
private void txtGrrProductNum_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode== Keys.Enter)
{
if (cboxTestMode.SelectedItem != null && (cboxTestMode.SelectedItem.ToString() == "GRR" || cboxTestMode.SelectedItem.ToString() == "AUDIT"))
{
SysConfigParam.Update("GrrProductNum", txtGrrProductNum.Text);
for (int i = 0; i < GlobalVar.GrrProductNum; i++)
{
GlobalTray.GrrTray.ChangeStatus(i + 1, ESlotStatus.Have);
}
}
}
}
}
}