1、优化当在治具配置界面点击吸嘴移动到治具时点击取消时轴也同样移动到治具上方的问题。

2、扫码NG产品赋值特殊SN:SLK11111111PNK60X后正常上料,当测试完成后结果NG也只会测试一次后放入RETEST盘中。
3、修复启用安全门后,安全门打开后仍能启动的问题。
4、优化生成虚拟码,模拟正式的二维码,生成22位二维码,解决客户产品没有二维码而又想打开MTCP测试的问题。
Eight
lhiven 2 months ago
parent 17dddc5fc6
commit a740f868ff

@ -12,39 +12,14 @@ namespace Rs.MotionPlat.Commom
{
public static bool Check()
{
//if(!GlobalVar.DisableDoor)
//{
// if (IoManager.Instance.ReadIn("前安全门禁") == 0)
// {
// MessageQueue.Instance.Warn("前安全门禁触发");
// return false;
// }
// if (IoManager.Instance.ReadIn("后安全门禁") == 0)
// {
// MessageQueue.Instance.Warn("后安全门禁触发");
// return false;
// }
// if (IoManager.Instance.ReadIn("左前安全门禁") == 0)
// {
// MessageQueue.Instance.Warn("左前安全门禁触发");
// return false;
// }
// if (IoManager.Instance.ReadIn("左后安全门禁") == 0)
// {
// MessageQueue.Instance.Warn("左后安全门禁触发");
// return false;
// }
// if (IoManager.Instance.ReadIn("右前安全门禁") == 0)
// {
// MessageQueue.Instance.Warn("右前安全门禁触发");
// return false;
// }
// if (IoManager.Instance.ReadIn("右后安全门禁") == 0)
// {
// MessageQueue.Instance.Warn("右后安全门禁触发");
// return false;
// }
//}
if (!GlobalVar.DisableDoor)
{
if (IoManager.Instance.ReadIn("门禁") == 0)
{
MessageQueue.Instance.Warn("前安全门禁触发");
return false;
}
}
return true;
}
}

@ -12,13 +12,14 @@ namespace Rs.MotionPlat.Commom
public static class VirtualBarCode
{
private static int barCode = 0;
private static string temp = "FGXHE1B{0}RY9+ED0";
public static string Code
{
get
{
barCode++;
return barCode.ToString().PadLeft(18,'0');
return string.Format(temp, barCode.ToString().PadLeft(8, '0'));
}
}

@ -412,25 +412,40 @@ namespace Rs.MotionPlat.Flow
else if (fixtureret.Result == EOneGrabSixteenResult.LocationOkScanBarcodeFail)
{
Nozzle idleNozzle = NozzleManager.GetIdelNozzle();
StockTakeFlow.Instance.Take( ETrayType.Input, ret.SlotIndex, idleNozzle.NozzleIndex);
//放料
TraySlot noProductSlot = GlobalTray.RetestTray.GetSlot(ESlotStatus.NotHave);
if (noProductSlot != null)
if(false)
{
StockPlaceFlow.Instance.Place(ETrayType.ReTest, noProductSlot.Index, idleNozzle.NozzleIndex);
StockTakeFlow.Instance.Take(ETrayType.Input, ret.SlotIndex, idleNozzle.NozzleIndex);
//放料
TraySlot noProductSlot = GlobalTray.RetestTray.GetSlot(ESlotStatus.NotHave);
if (noProductSlot != null)
{
StockPlaceFlow.Instance.Place(ETrayType.ReTest, noProductSlot.Index, idleNozzle.NozzleIndex);
}
else
{
Msgbox.ShowTipDialog(EButtonType.Ok, "Retest tray full,please change tray and click ok button", "tip", true);
GlobalTray.RetestTray.ChangeStatus(ESlotStatus.NotHave);
ThreePointLocationFlow.Instance.Location(ETrayType.ReTest);
//放料
noProductSlot = GlobalTray.RetestTray.GetSlot(ESlotStatus.NotHave);
StockPlaceFlow.Instance.Place(ETrayType.ReTest, noProductSlot.Index, idleNozzle.NozzleIndex);
}
takeSlotIndex++;
flowStep = EDischargeFlowStep.;
exit = true;
}
else
{
Msgbox.ShowTipDialog(EButtonType.Ok, "Retest tray full,please change tray and click ok button","tip",true);
GlobalTray.RetestTray.ChangeStatus(ESlotStatus.NotHave);
ThreePointLocationFlow.Instance.Location(ETrayType.ReTest);
//放料
noProductSlot = GlobalTray.RetestTray.GetSlot(ESlotStatus.NotHave);
StockPlaceFlow.Instance.Place(ETrayType.ReTest, noProductSlot.Index, idleNozzle.NozzleIndex);
StockTakeFlow.Instance.Take(ETrayType.Input, ret.SlotIndex, idleNozzle.NozzleIndex);
if(NozzleManager.GetNozzle(idleNozzle.NozzleIndex).Product!=null)
{
NozzleManager.GetNozzle(idleNozzle.NozzleIndex).Product.SN = "SLK11111111PNK60X";
}
takeSlotIndex++;
exit = true;
flowStep = EDischargeFlowStep.;
}
takeSlotIndex++;
flowStep = EDischargeFlowStep.;
exit = true;
}
else if (fixtureret.Result == EOneGrabSixteenResult.Slant)
{
@ -776,56 +791,82 @@ namespace Rs.MotionPlat.Flow
}
else
{
if(GlobalVar.EnableBin)
if(placeNozzle.Product!=null && placeNozzle.Product.SN== "SLK11111111PNK60X")
{
#region NG产品分BIN存放
int placeSlotIndex = BinManager.GetPlaceSlot(GlobalVar.CurrentUsedBin, ETrayType.Ng, placeNozzle.Product.Bin);
if (placeSlotIndex > 0)
TraySlot waitPlaceSlot = GlobalTray.RetestTray.GetSlot(ESlotStatus.NotHave);
if (waitPlaceSlot != null)
{
StockPlaceFlow.Instance.Place(ETrayType.Ng, placeSlotIndex, placeNozzleIndex);
StockPlaceFlow.Instance.Place(ETrayType.ReTest, waitPlaceSlot.Index, placeNozzleIndex);
}
else if (placeSlotIndex == 0)//此区域已经无穴位放产品
else
{
//料盘放满了,更换料盘
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
if (GlobalVar.EnableFullAlarm)
if (GlobalVar.RunSpace && !GlobalVar.EnableStock)
{
Msgbox.ShowTipDialog(EButtonType.Ok, $"{placeNozzle.Product.Bin} area hasn't slot to place product,you can redraw ok tray bin area after click ok button,", "tip", true);
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
}
//提示更换料盘
Msgbox.ShowTipDialog(EButtonType.Ok, "NG tray full,please change tray and click ok button", "tip", true);
ThreePointLocationFlow.Instance.Location(ETrayType.Ng);
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
}
else
{
Msgbox.ShowTipDialog(EButtonType.Ok, $"cann't find {placeNozzle.Product.Bin} area,you can redraw ok tray area after click ok button", "tip", true);
else
{
//提示更换料盘
Msgbox.ShowTipDialog(EButtonType.Ok, "RetestTray full,please change tray and click ok button", "tip", true);
ThreePointLocationFlow.Instance.Location(ETrayType.ReTest);
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
}
}
#endregion
}
else
{
//logInfo = GetClassName() + $"检查到吸嘴{placeNozzle.NozzleIndex}号吸嘴产品检测结果{placeNozzle.Product.Result}";
//MessageQueue.Instance.Insert(logInfo);
TraySlot waitPlaceSlot = GlobalTray.NgTray.GetSlot(ESlotStatus.NotHave);
if (waitPlaceSlot != null)
{
StockPlaceFlow.Instance.Place(ETrayType.Ng, waitPlaceSlot.Index, placeNozzleIndex);
}
else
if (GlobalVar.EnableBin)
{
if (GlobalVar.RunSpace && !GlobalVar.EnableStock)
#region NG产品分BIN存放
int placeSlotIndex = BinManager.GetPlaceSlot(GlobalVar.CurrentUsedBin, ETrayType.Ng, placeNozzle.Product.Bin);
if (placeSlotIndex > 0)
{
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
StockPlaceFlow.Instance.Place(ETrayType.Ng, placeSlotIndex, placeNozzleIndex);
}
else
else if (placeSlotIndex == 0)//此区域已经无穴位放产品
{
//料盘放满了,更换料盘
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
if (GlobalVar.EnableFullAlarm)
{
Msgbox.ShowTipDialog(EButtonType.Ok, $"{placeNozzle.Product.Bin} area hasn't slot to place product,you can redraw ok tray bin area after click ok button,", "tip", true);
}
//提示更换料盘
Msgbox.ShowTipDialog(EButtonType.Ok, "NG tray full,please change tray and click ok button", "tip", true);
ThreePointLocationFlow.Instance.Location(ETrayType.Ng);
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
}
else
{
Msgbox.ShowTipDialog(EButtonType.Ok, $"cann't find {placeNozzle.Product.Bin} area,you can redraw ok tray area after click ok button", "tip", true);
}
#endregion
}
else
{
//logInfo = GetClassName() + $"检查到吸嘴{placeNozzle.NozzleIndex}号吸嘴产品检测结果{placeNozzle.Product.Result}";
//MessageQueue.Instance.Insert(logInfo);
TraySlot waitPlaceSlot = GlobalTray.NgTray.GetSlot(ESlotStatus.NotHave);
if (waitPlaceSlot != null)
{
StockPlaceFlow.Instance.Place(ETrayType.Ng, waitPlaceSlot.Index, placeNozzleIndex);
}
else
{
if (GlobalVar.RunSpace && !GlobalVar.EnableStock)
{
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
}
else
{
//提示更换料盘
Msgbox.ShowTipDialog(EButtonType.Ok, "NG tray full,please change tray and click ok button", "tip", true);
ThreePointLocationFlow.Instance.Location(ETrayType.Ng);
GlobalTray.NgTray.ChangeStatus(ESlotStatus.NotHave);
}
}
}
}
}
@ -997,49 +1038,62 @@ namespace Rs.MotionPlat.Flow
/// <returns></returns>
Nozzle GetPlaceNozzle(TestFixture fixture)
{
//ABC模式
switch (GlobalVar.TestMethod)
if(fixture!=null && fixture.Product!= null && fixture.Product.SN == "SLK11111111PNK60X")
{
case "A":
foreach (Nozzle item in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToTest))
{
if (item.Product != null)
{
return item;
}
}
break;
case "AAB":
if(fixture.Product!=null && fixture.Product.TestNum==1 && fixture.Product.Result=="NG")
foreach (Nozzle item in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToTest))
{
if (item.Product != null)
{
return NozzleManager.GetIdelNozzle();
return item;
}
else
{
}
}
else
{
//ABC模式
switch (GlobalVar.TestMethod)
{
case "A":
foreach (Nozzle item in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToTest))
{
if (item.Product != null && (item.Product.TestedFixtures == null || !item.Product.TestedFixtures.Contains(curFixture.Index)))
if (item.Product != null)
{
return item;
}
}
}
break;
case "ABC"://必须更换治具
foreach (Nozzle item in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToTest))
{
if (item.Product != null)
break;
case "AAB":
if (fixture.Product != null && fixture.Product.TestNum == 1 && fixture.Product.Result == "NG")
{
if (item.Product.TestNum == 0)
return item;
if (!item.Product.TestedFixtures.Contains(fixture.Index))
return item;
return NozzleManager.GetIdelNozzle();
}
}
break;
default:
break;
else
{
foreach (Nozzle item in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToTest))
{
if (item.Product != null && (item.Product.TestedFixtures == null || !item.Product.TestedFixtures.Contains(curFixture.Index)))
{
return item;
}
}
}
break;
case "ABC"://必须更换治具
foreach (Nozzle item in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToTest))
{
if (item.Product != null)
{
if (item.Product.TestNum == 0)
return item;
if (!item.Product.TestedFixtures.Contains(fixture.Index))
return item;
}
}
break;
default:
break;
}
}
return null;
}

@ -225,7 +225,7 @@ namespace Rs.MotionPlat.Flow.SubFlow
curNozzle.Product = curFixture.Product;
if(GlobalVar.TestMode!="GRR" && GlobalVar.TestMode!="AUDIT")
{
if (curFixture.Product.Result == "PASS" || curFixture.Product.TestNum >= 3)
if (curFixture.Product.Result == "PASS" || curFixture.Product.TestNum >= 3 || curFixture.Product.SN == "SLK11111111PNK60X")
{
curNozzle.Status = ENozzleStatus.ToUnload;
}

@ -160,11 +160,11 @@ namespace Rs.MotionPlat
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);
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)

@ -32,6 +32,7 @@ namespace Rs.MotionPlat
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.panel1 = new System.Windows.Forms.Panel();
this.groupBox36 = new System.Windows.Forms.GroupBox();
@ -150,6 +151,10 @@ namespace Rs.MotionPlat
this.timertc5 = new System.Windows.Forms.Timer(this.components);
this.timertc6 = new System.Windows.Forms.Timer(this.components);
this.timeruph = new System.Windows.Forms.Timer(this.components);
this.groupBox37 = new System.Windows.Forms.GroupBox();
this.dgv_errinfo = new System.Windows.Forms.DataGridView();
this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.panel1.SuspendLayout();
this.groupBox36.SuspendLayout();
this.panel4.SuspendLayout();
@ -178,6 +183,8 @@ namespace Rs.MotionPlat
this.tabPage2.SuspendLayout();
this.tableLayoutPanel5.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
this.groupBox37.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgv_errinfo)).BeginInit();
this.SuspendLayout();
//
// timer1
@ -188,6 +195,7 @@ namespace Rs.MotionPlat
// panel1
//
this.panel1.BackColor = System.Drawing.Color.Transparent;
this.panel1.Controls.Add(this.groupBox37);
this.panel1.Controls.Add(this.groupBox36);
this.panel1.Controls.Add(this.panel4);
this.panel1.Dock = System.Windows.Forms.DockStyle.Right;
@ -204,11 +212,11 @@ namespace Rs.MotionPlat
this.groupBox36.Controls.Add(this.btnNozzleStatus);
this.groupBox36.Controls.Add(this.btnLight);
this.groupBox36.Controls.Add(this.btnBuzzer);
this.groupBox36.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox36.Dock = System.Windows.Forms.DockStyle.Top;
this.groupBox36.ForeColor = System.Drawing.Color.White;
this.groupBox36.Location = new System.Drawing.Point(0, 0);
this.groupBox36.Name = "groupBox36";
this.groupBox36.Size = new System.Drawing.Size(320, 520);
this.groupBox36.Size = new System.Drawing.Size(320, 259);
this.groupBox36.TabIndex = 7;
this.groupBox36.TabStop = false;
this.groupBox36.Text = "Quick functions";
@ -1721,6 +1729,64 @@ namespace Rs.MotionPlat
this.timeruph.Interval = 3000;
this.timeruph.Tick += new System.EventHandler(this.timer3_Tick_1);
//
// groupBox37
//
this.groupBox37.Controls.Add(this.dgv_errinfo);
this.groupBox37.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox37.ForeColor = System.Drawing.Color.White;
this.groupBox37.Location = new System.Drawing.Point(0, 259);
this.groupBox37.Name = "groupBox37";
this.groupBox37.Size = new System.Drawing.Size(320, 261);
this.groupBox37.TabIndex = 8;
this.groupBox37.TabStop = false;
this.groupBox37.Tag = "";
this.groupBox37.Text = "Warn list";
//
// dgv_errinfo
//
this.dgv_errinfo.AllowUserToAddRows = false;
this.dgv_errinfo.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dgv_errinfo.BackgroundColor = System.Drawing.SystemColors.ActiveCaptionText;
this.dgv_errinfo.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.Color.Red;
dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgv_errinfo.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.dgv_errinfo.ColumnHeadersHeight = 30;
this.dgv_errinfo.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dataGridViewTextBoxColumn1,
this.dataGridViewTextBoxColumn2});
this.dgv_errinfo.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgv_errinfo.Location = new System.Drawing.Point(3, 17);
this.dgv_errinfo.Name = "dgv_errinfo";
this.dgv_errinfo.RowHeadersVisible = false;
this.dgv_errinfo.RowHeadersWidth = 51;
this.dgv_errinfo.RowTemplate.DefaultCellStyle.BackColor = System.Drawing.Color.Black;
this.dgv_errinfo.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.Red;
this.dgv_errinfo.RowTemplate.Height = 23;
this.dgv_errinfo.Size = new System.Drawing.Size(314, 241);
this.dgv_errinfo.TabIndex = 4;
//
// dataGridViewTextBoxColumn1
//
this.dataGridViewTextBoxColumn1.DataPropertyName = "Time";
this.dataGridViewTextBoxColumn1.FillWeight = 25F;
this.dataGridViewTextBoxColumn1.HeaderText = "Time";
this.dataGridViewTextBoxColumn1.MinimumWidth = 6;
this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
//
// dataGridViewTextBoxColumn2
//
this.dataGridViewTextBoxColumn2.DataPropertyName = "Content";
this.dataGridViewTextBoxColumn2.FillWeight = 75F;
this.dataGridViewTextBoxColumn2.HeaderText = "Content";
this.dataGridViewTextBoxColumn2.MinimumWidth = 6;
this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";
//
// FormMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@ -1762,6 +1828,8 @@ namespace Rs.MotionPlat
this.tabPage2.ResumeLayout(false);
this.tableLayoutPanel5.ResumeLayout(false);
this.tableLayoutPanel4.ResumeLayout(false);
this.groupBox37.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.dgv_errinfo)).EndInit();
this.ResumeLayout(false);
}
@ -1886,5 +1954,9 @@ namespace Rs.MotionPlat
private System.Windows.Forms.Button btnNozzleStatus;
private System.Windows.Forms.Button btnLight;
private System.Windows.Forms.Button btnBuzzer;
private System.Windows.Forms.GroupBox groupBox37;
private System.Windows.Forms.DataGridView dgv_errinfo;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;
}
}

@ -120,6 +120,12 @@
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="timer2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>107, 17</value>
</metadata>

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

@ -38,7 +38,10 @@ namespace Rs.MotionPlat.SysConfig
//{
// DischargeModuleGoSafePosFlow.Instance.GoSafePostion(ESafePosSide.PlaceToFixture);
//}
GroupAxisMove.XY1Y2MovePos(targetPosition, GlobalVar.WholeSpeed, EGoWhichSide.FixtureSide);
if(btnType== EButtonType.Ok)
{
GroupAxisMove.XY1Y2MovePos(targetPosition, GlobalVar.WholeSpeed, EGoWhichSide.FixtureSide);
}
}
}

Loading…
Cancel
Save