You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
400 lines
17 KiB
400 lines
17 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Configuration;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using MESClassLibrary.BLL.Log;
|
|
using MESClassLibrary.BLL.PunchAndWeld;
|
|
using OPCAutomation;
|
|
using PunchAndWeld.DataSouce;
|
|
|
|
namespace PunchAndWeld
|
|
{
|
|
public partial class FrmLaser : Form
|
|
{
|
|
public FrmLaser()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public static string workClass = "";
|
|
OPCHelper opcHelper = new OPCHelper();
|
|
private string strHostIP = "";
|
|
private int deviceState_A = 0, deviceState_B = 0;
|
|
private bool lFlag_A = false, rFlag_A = false, lFlag_B = false, rFlag_B = false;
|
|
|
|
private void FrmLaser_Load(object sender, EventArgs e)
|
|
{
|
|
string stationNo = ConfigurationManager.AppSettings["StationNo"];
|
|
label1.Text = ProScreenFunc.GetStation(stationNo);
|
|
Control.CheckForIllegalCrossThreadCalls = false;
|
|
|
|
Thread t = new Thread(new ThreadStart(TimeGo));
|
|
t.Start();
|
|
textBox1.TabIndex = 0;
|
|
textBox1.Select();
|
|
GetWorkClass();
|
|
ProScreenFunc.GetScanCountByClass(workClass);
|
|
InitList();
|
|
|
|
PunchAdressBLL bll = new PunchAdressBLL();
|
|
|
|
try
|
|
{
|
|
if (opcHelper.CreateServer())
|
|
{
|
|
if (opcHelper.ConnectServer(strHostIP, "Kepware.KEPServerEX.V6"))
|
|
{
|
|
opcHelper.Connected = true;
|
|
|
|
opcHelper.opcGroups = opcHelper.opcServer.OPCGroups;
|
|
opcHelper.opcGroup1 = opcHelper.opcGroups.Add("DeviceRead");
|
|
opcHelper.opcGroup2 = opcHelper.opcGroups.Add("DeviceWrite");
|
|
opcHelper.SetGroupProperty(opcHelper.opcGroup1, 500);
|
|
opcHelper.SetGroupProperty(opcHelper.opcGroup2, 500);
|
|
|
|
|
|
opcHelper.opcItems1 = opcHelper.opcGroup1.OPCItems;
|
|
opcHelper.opcItems1.DefaultIsActive = true;
|
|
|
|
DataTable dt = bll.SearchInfo(ConfigurationManager.AppSettings["DeviceNo"], 0);
|
|
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
opcHelper.opcItemm1 = new OPCItem[dt.Rows.Count];
|
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|
{
|
|
opcHelper.opcItemm1[i] = opcHelper.opcItems1.AddItem(dt.Rows[i]["Address"].ToString(), i);
|
|
}
|
|
}
|
|
|
|
opcHelper.opcItems2 = opcHelper.opcGroup2.OPCItems;
|
|
opcHelper.opcItems2.DefaultIsActive = true;
|
|
|
|
DataTable dt1 = bll.SearchInfo(ConfigurationManager.AppSettings["DeviceNo"], 1);
|
|
if (dt1 != null && dt1.Rows.Count > 0)
|
|
{
|
|
opcHelper.opcItemm2 = new OPCItem[dt1.Rows.Count];
|
|
|
|
for (int i = 0; i < dt1.Rows.Count; i++)
|
|
{
|
|
opcHelper.opcItemm2[i] = opcHelper.opcItems2.AddItem(dt1.Rows[i]["Address"].ToString(), i);
|
|
}
|
|
}
|
|
|
|
opcHelper.opcGroup1.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange);
|
|
|
|
deviceState_A = opcHelper.ReadSingleValueFromOPC2(0);
|
|
textBox2.Text = deviceState_A == 1 ? "运行中" : "准备OK";
|
|
lFlag_A = opcHelper.ReadSingleValueFromOPC3(0).ToLower() == "true" ? true : false;
|
|
rFlag_A = opcHelper.ReadSingleValueFromOPC3(1).ToLower() == "true" ? true : false;
|
|
|
|
deviceState_B = opcHelper.ReadSingleValueFromOPC2(1);
|
|
textBox3.Text = deviceState_B == 1 ? "运行中" : "准备OK";
|
|
lFlag_B = opcHelper.ReadSingleValueFromOPC3(2).ToLower() == "true" ? true : false;
|
|
rFlag_B = opcHelper.ReadSingleValueFromOPC3(3).ToLower() == "true" ? true : false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK);
|
|
opcHelper.Connected = false;
|
|
LogHelper.WriteErrLogBase("工位:" + label1.Text + "创建OPC服务失败!", MethodBase.GetCurrentMethod().Name);
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name);
|
|
}
|
|
}
|
|
|
|
void opcGroup1_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues,
|
|
ref Array Qualities, ref Array TimeStamps)
|
|
{
|
|
try
|
|
{
|
|
for (int i = 1; i <= NumItems; i++)
|
|
{
|
|
int handle = Convert.ToInt32(ClientHandles.GetValue(i).ToString().Trim());
|
|
string value = ItemValues.GetValue(i).ToString();
|
|
string address = opcHelper.opcItemm1[(Convert.ToInt32(ClientHandles.GetValue(i)))].ItemID;
|
|
|
|
if (handle == 0)
|
|
{
|
|
deviceState_A = Convert.ToInt32(value);
|
|
textBox2.Text = deviceState_A == 1 ? "运行中" : "准备OK";
|
|
}
|
|
if (handle == 1)
|
|
{
|
|
deviceState_B = Convert.ToInt32(value);
|
|
textBox3.Text = deviceState_B == 1 ? "运行中" : "准备OK";
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
|
|
}
|
|
}
|
|
|
|
private void TimeGo()
|
|
{
|
|
System.Timers.Timer timer = new System.Timers.Timer();
|
|
timer.Interval = 10;
|
|
timer.Enabled = true;
|
|
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick);
|
|
}
|
|
|
|
private void timer_Tick(object sender, EventArgs e)
|
|
{
|
|
label9.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
GetWorkClass();
|
|
label3.Text= ProScreenFunc.GetScanCountByClass(workClass);
|
|
Thread.Sleep(500);
|
|
}
|
|
|
|
private void GetWorkClass()
|
|
{
|
|
if (DateTime.Now > DateTime.Parse(DateTime.Now.ToShortDateString() + " 07:30:00") &&
|
|
DateTime.Now < DateTime.Parse(DateTime.Now.ToShortDateString() + " 19:30:00"))
|
|
{
|
|
workClass = "白班";
|
|
}
|
|
|
|
if (DateTime.Now > DateTime.Parse(DateTime.Now.ToShortDateString() + " 19:30:00") &&
|
|
DateTime.Now < DateTime.Parse(DateTime.Now.ToShortDateString() + " 23:59:59"))
|
|
{
|
|
workClass = "夜班";
|
|
}
|
|
|
|
if (DateTime.Now > DateTime.Parse(DateTime.Now.ToShortDateString() + " 00:00:00") &&
|
|
DateTime.Now < DateTime.Parse(DateTime.Now.ToShortDateString() + " 07:30:00"))
|
|
{
|
|
workClass = "夜班";
|
|
} workClass = "夜班";
|
|
//}
|
|
}
|
|
|
|
private void textBox1_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(textBox1.Text))
|
|
{
|
|
MessageBox.Show("条码不能为空", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
|
|
string barcode = textBox1.Text.Trim();
|
|
if (barcode.Contains("."))
|
|
{
|
|
barcode = ProScreenFunc.UniteBarCodeToOne(barcode);
|
|
}
|
|
|
|
if (ProScreenFunc.SjBarCodeIsInStockIn(barcode) == false)
|
|
{
|
|
MessageBox.Show($"扫描条码[{barcode}]不存在喷涂下线记录,请更换其他油漆件重新操作!");
|
|
textBox1.Text = "";
|
|
return;
|
|
}
|
|
|
|
|
|
string oneBarCode = barcode;
|
|
|
|
if (barcode.Length != 20)
|
|
{
|
|
MessageBox.Show("条码长度有误", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
|
|
if (ProScreenFunc.IsScan(oneBarCode))
|
|
{
|
|
MessageBox.Show("此条码已被扫描过", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
|
|
lFlag_A = opcHelper.ReadSingleValueFromOPC3(0).ToLower() == "true" ? true : false;
|
|
rFlag_A = opcHelper.ReadSingleValueFromOPC3(1).ToLower() == "true" ? true : false;
|
|
lFlag_B = opcHelper.ReadSingleValueFromOPC3(2).ToLower() == "true" ? true : false;
|
|
rFlag_B = opcHelper.ReadSingleValueFromOPC3(3).ToLower() == "true" ? true : false;
|
|
|
|
if (barcode.Substring(0, 10) == "6000000175" || barcode.Substring(0, 10) == "6000000176")
|
|
{
|
|
if (deviceState_A != 2)
|
|
{
|
|
MessageBox.Show("214设备未准备OK,无法扫描", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
if (!rFlag_A && !lFlag_A)
|
|
{
|
|
if (ProScreenFunc.GetPartNameByStock(barcode.Substring(0, 10)).Contains("左"))
|
|
{
|
|
opcHelper.opcItemm2[0].Write(1);
|
|
}
|
|
else
|
|
{
|
|
opcHelper.opcItemm2[1].Write(1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (ProScreenFunc.GetPartNameByStock(barcode.Substring(0, 10)).Contains("左") )
|
|
{
|
|
if (lFlag_A)
|
|
{
|
|
MessageBox.Show("当前应扫描214右侧门槛", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
opcHelper.opcItemm2[0].Write(1);
|
|
}
|
|
|
|
|
|
if (ProScreenFunc.GetPartNameByStock(barcode.Substring(0, 10)).Contains("右") )
|
|
{
|
|
if (rFlag_A)
|
|
{
|
|
MessageBox.Show("当前应扫描214左侧门槛", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
opcHelper.opcItemm2[1].Write(1);
|
|
}
|
|
}
|
|
}
|
|
else if (barcode.Substring(0, 10) == "1230007081" || barcode.Substring(0, 10) == "1230007094")
|
|
{
|
|
if (deviceState_B != 2)
|
|
{
|
|
MessageBox.Show("294设备未准备OK,无法扫描", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
if (!rFlag_B && !lFlag_B)
|
|
{
|
|
if (ProScreenFunc.GetPartNameByStock(barcode.Substring(0, 10)).Contains("左"))
|
|
{
|
|
opcHelper.opcItemm2[2].Write(1);
|
|
}
|
|
else
|
|
{
|
|
opcHelper.opcItemm2[3].Write(1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (ProScreenFunc.GetPartNameByStock(barcode.Substring(0, 10)).Contains("左"))
|
|
{
|
|
if (lFlag_B)
|
|
{
|
|
MessageBox.Show("当前应扫描294右侧门槛", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
opcHelper.opcItemm2[2].Write(1);
|
|
}
|
|
if (ProScreenFunc.GetPartNameByStock(barcode.Substring(0, 10)).Contains("右"))
|
|
{
|
|
if (rFlag_B)
|
|
{
|
|
MessageBox.Show("当前应扫描294左侧门槛", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
opcHelper.opcItemm2[3].Write(1);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("条码有误!", "提示", MessageBoxButtons.OK);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
|
|
ProScreenFunc.AddScanRecord(oneBarCode);
|
|
textBox1.SelectAll();
|
|
textBox1.Focus();
|
|
InitList();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name);
|
|
}
|
|
}
|
|
|
|
private void InitList()
|
|
{
|
|
try
|
|
{
|
|
listView1.Columns.Clear();
|
|
listView1.Clear();
|
|
listView1.Columns.Add("条码", 350, HorizontalAlignment.Left);
|
|
listView1.Columns.Add("扫描时间", 305, HorizontalAlignment.Left);
|
|
|
|
DataTable dt = ProScreenFunc.GetScanRecord(workClass);
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
label3.Text = dt.Rows.Count.ToString();
|
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|
{
|
|
ListViewItem lvi = new ListViewItem(dt.Rows[i]["BarCode"].ToString());
|
|
lvi.SubItems.Add(dt.Rows[i]["ScanTime"].ToString()); //后面添加的Item都为SubItems ,即为子项
|
|
listView1.Items.Add(lvi);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name);
|
|
}
|
|
}
|
|
|
|
private void label9_Click(object sender, EventArgs e)
|
|
{
|
|
Environment.Exit(0);
|
|
}
|
|
|
|
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
|
|
{
|
|
//Brush s = new SolidBrush(Color.FromArgb(39, 46, 64));
|
|
//e.Graphics.FillRectangle(s, e.Bounds);//采⽤特定颜⾊绘制标题列
|
|
//e.DrawText();//采⽤默认⽅式绘制标题⽂本
|
|
}
|
|
|
|
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
|
|
{
|
|
//e.DrawDefault = true;//采⽤系统默认⽅式绘制项
|
|
}
|
|
|
|
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
|
|
{
|
|
//e.DrawDefault = true;//采⽤系统默认⽅式绘制项
|
|
}
|
|
|
|
}
|
|
}
|
|
|