|
- using CCWin.SkinControl;
- using DocumentFormat.OpenXml.EMMA;
- using DocumentFormat.OpenXml.Office2010.ExcelAc;
- using DocumentFormat.OpenXml.Office2019.Excel.RichData;
- using GeBoShi.SysCtrl;
- using GeBoShi.UI;
- using GeBoShi.UI.DataQuery;
- using GeBoShi.UI.InageShow;
- using GeBoShi.UI.Load;
- using GeBoShi.UI.Product;
- using GeBoShi.UI.SysSet;
- using HZH_Controls;
- using HZH_Controls.Controls;
- using HZH_Controls.Forms;
- using ImageToolKits;
- using MaiMuControl;
- using MaiMuControl.Device;
- using MaiMuControl.Device.CamDev;
- using Models;
- using OpenCvSharp;
- using OpenCvSharp.Extensions;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Diagnostics;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Web.UI.WebControls.WebParts;
- using System.Windows.Forms;
- using System.Windows.Forms.DataVisualization.Charting;
-
- namespace GeBoShi
- {
- public partial class Main : Form
- {
- [DllImport("user32.dll ", EntryPoint = "SetParent")]
- private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); //将外部窗体嵌入程序
-
- [DllImport("user32.dll")]
- public static extern IntPtr FindWindow(string lpszClass, string lpszWindow); //按照窗体类名或窗体标题查找窗体
-
-
- object AddTextLock = new object();
- bool backgroundWorkerDo;
- private Stopwatch RunStartTime = new Stopwatch();
- /// <summary>
- /// 显示颜色现在对应30色,确保label在30个以内
- /// </summary>
- Color[] ChartColor = new Color[30] { Color.Red, Color.Blue, Color.Green, Color.YellowGreen, Color.Orange,
- Color.Peru, Color.DarkRed,Color.GreenYellow, Color.Pink , Color.Brown,
- Color.CadetBlue, Color.OrangeRed, Color.Cyan, Color.Lime, Color.Magenta, Color.Tan, Color.Sienna,
- Color.DarkGray, Color.SaddleBrown, Color.DarkBlue, Color.Firebrick,Color.Gainsboro,Color.Honeydew,Color.Khaki,Color.Lavender,
- Color.LightGoldenrodYellow,Color.Navy, Color.Khaki, Color.IndianRed,Color.Lavender};
-
- Process process = null;
- IntPtr appWin;
- public Main()
- {
- InitializeComponent();
- UIStyle.SetUIStyle(this);
-
- //process = Process.Start(@"C:\WINDOWS\system32\osk.exe");
- //process.WaitForInputIdle();
- //appWin = FindWindow(null, "屏幕键盘");
- //SetParent(appWin, this.keyPanel.Handle);
- this.keyPanel.Visible = false;
-
- this.uiTitel1.FatherForm = this;
- this.uiTitel1.UserMenuStrip = this.menuStrip1;
- this.uiTitel1.ShowContrlBox(true, true, true);
- this.uiTitel1.ShowMenu();
-
- this.DoubleBuffered = true;//设置本窗体
- SetStyle(ControlStyles.UserPaint, true);
- SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
- SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
-
- SysMgr.Instance.MainRuning += main_running;
- SysMgr.Instance.AutoRuning += auto_runing;
-
- #region dataGridView设置
- skinDataGridView1.AllowUserToAddRows = skinDataGridView1.AllowUserToDeleteRows = false;//用户添加删除行
- skinDataGridView1.AllowUserToResizeRows = false;//用户调整行大小 //显示行号与列宽度自动调整
- skinDataGridView1.RowHeadersVisible = true;
- skinDataGridView1.RowHeadersWidth = 50;
- //dataGridView1.ColumnHeadersHeightSizeMode = dataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
- skinDataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变
- skinDataGridView1.RowTemplate.Height = 30;
-
- //skinDataGridView1.RowPostPaint += (sender, e) =>//序号列头
- //{
- // showRowNum_onDataGrid_RowPostPaint(this.skinDataGridView1, sender, e);
- //};
- for (int i = 0; i < skinDataGridView1.Columns.Count; i++)//禁止点击列头排序
- skinDataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
- this.skinDataGridView1.CellClick += skinDataGridView1_CellClick; ;
-
-
- #endregion
-
- this.lblDefectLen.Top = toolStrip1.Top + 10;
- this.lblDefectLen.Left = toolStrip1.Width - 300;
- this.lblDefectSpeed.Top = toolStrip1.Top + 10 + lblDefectLen.Height + 5;
- this.lblDefectSpeed.Left = toolStrip1.Width - 300;
- this.lbFK.Text = "当前幅宽:";
-
- imageBox3.SetIconsVisible(false);
- imageBox3.SetStatusVisible(false);
- imageBox3.SetStripVisible(false);
-
-
- }
-
- #region 初始化
- /// <summary>
- /// 初始化
- /// </summary>
- /// <returns></returns>
- private bool InitSystem()
- {
- //进入初始化,初始化失败则中断
- InitFrm initFrm = new InitFrm();
- initFrm.ShowDialog();
- if (initFrm.DialogResult == DialogResult.OK)
- {
- //初始化成功
- }
- else
- {
- initFrm.Dispose();
- return false;
- }
- initFrm.Dispose();
- return true;
- }
- #endregion
-
- #region 界面刷新
- private void showRowNum_onDataGrid_RowPostPaint(DataGridView dgv, object sender, DataGridViewRowPostPaintEventArgs e)
- {
- Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgv.RowHeadersWidth - 4, e.RowBounds.Height);
- TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dgv.RowHeadersDefaultCellStyle.Font, rectangle, dgv.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
- }
- private void ResetUI(bool clearSN)
- {
-
- //保持产品名称和料号
- //txtProductName.Text = txtProductCode.Text = txtProductSN.Text = "";
- if (clearSN)
- cbPdtSN.Text = "";
-
- this.lstLog.Items.Clear();
-
- this.tsbtnImpStop.Enabled = false;
- this.tsbtnStart.Enabled = true;
- this.tsbtnStop.Enabled = false;
-
- this.cbPdtSN.Enabled = true;
- this.cbProductCode.Enabled = true;
- this.cbProductBatch.Enabled = true;
- this.cbProductReelNum.Enabled = true;
- this.cbProductNum.Enabled = true;
-
- this.pictureBox1.Image = null;
- pictureBox1.Refresh();
- //this.pictureBox2.Image = null;
- //pictureBox2.Refresh();
- //this.pictureBox3.Image = null;
- //pictureBox3.Refresh();
- //this.pictureBox4.Image = null;
- //pictureBox4.Refresh();
-
- tslabelTime.Text = "实时测试队列";
- skinDataGridView1.DataSource = null;
-
- this.skinDataGridView1.Rows.Clear();
- ResetChart();
-
- lblDefectLen.Text = $"检测长度: 0 米";
- lblDefectSpeed.Text = $"检测速度: 0 米/分钟";
-
- ucSwitch1.Checked = SysMgr.Instance.GetDefectPause();
- ucSwitch2.Checked = SysMgr.Instance.GetDefectDB();
- this.Refresh();
-
- imageBox3.RefreshWindow(null);
- }
-
- void ResetChart()
- {
- chart1.Series.Clear();
- chart1.Series.Add("SELECT");
- chart1.Series["SELECT"].ChartType = SeriesChartType.Point;
- chart1.Series["SELECT"].MarkerSize = 25;
- chart1.Series["SELECT"].MarkerColor = Color.Black;
- chart1.Series["SELECT"].MarkerStyle = MarkerStyle.Star6;
- //chart1.Series["SELECT"].Enabled = false;
- chart1.ChartAreas[0].AxisX.Title = "宽度(cm)";
- chart1.ChartAreas[0].AxisY.Title = "长度(m)";
-
- chart3.Series.Clear();
- chart3.Series.Add("面宽");
- chart3.ChartAreas[0].AxisX.Title = "长度(m)";
- chart3.ChartAreas[0].AxisY.Title = "宽度(cm)";
- chart3.Series["面宽"].ChartType = SeriesChartType.Line;
- chart3.Series["面宽"].MarkerSize = 5;
- chart3.Series["面宽"].MarkerColor = Color.Blue;
- chart3.Series["面宽"].MarkerStyle = MarkerStyle.Circle;
- }
- #endregion
-
- #region 权限判断
- private void UserRightCheck()
- {
- this.tsmPdtMgr.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Product);
- this.tsmSysDataFind.Visible = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Statistics);
-
- this.tsmUserList.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.User);
- this.tsmUserRight.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Role);
- if (this.tsmUserList.Enabled == false && this.tsmUserRight.Enabled == false)
- this.tsmSysUserMgr.Visible = false;
- else
- this.tsmSysUserMgr.Visible = true;
-
- this.tsmDebug.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Debug);
- this.tsmSysSet.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.ParamsSetting);
-
- if (this.tsmDebug.Enabled == false && this.tsmSysSet.Enabled == false)
- this.stmSysSet.Visible = false;
- else
- this.stmSysSet.Visible = true;
- }
- #endregion
-
- #region 运行判断
- /// <summary>
- /// 系统是否在运行
- /// </summary>
- /// <returns></returns>
- private bool SystemIsRun()
- {
- //if (SysMgr.Instance.IsRuning)
- //{
- // FrmDialog.ShowDialog(this, "设备正在运行中!", "警告", false);
- // //MessageBox.Show("设备正在运行中!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- // return false;
- //}
- return true;
- }
- #endregion
-
- #region 界面事件
- private void Main_Load(object sender, EventArgs e)
- {
- //登入
- if (SysMgr.Instance.LoginSystem())
- {
- //登入成功
- if (InitSystem())
- {
- this.Cursor = Cursors.WaitCursor;
-
- //this.WindowState = FormWindowState.Normal;
- this.Top = 0;
- this.Left = 0;
- this.Width = SystemInformation.WorkingArea.Width;
- this.Height = SystemInformation.WorkingArea.Height;
- //this.WindowState = FormWindowState.Maximized;
- //this.splitContainer1.SplitterDistance = this.Width / 3;
-
- ResetUI(true);
- this.Show();
- this.tsslLoginInfo.Text = $"操作员:{SysMgr.Instance.UserMgr.LoginUser.Code}({SysMgr.Instance.UserMgr.LoginUser.Name})";
- this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;
- this.tsslLoginTime.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
- this.tsslLoginInfo.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
- this.tsState.Text = "";
-
-
-
- //更新数据库格式
- Service.InitDB.initDB(ConfMgr.Instance.DBConStr);
- //权限判断
- UserRightCheck();
- //开启后台
- //timer1.Enabled = true;
- backgroundWorkerDo = true;
- backgroundWorker1.RunWorkerAsync();
- //s_BackWorker = true;
- //backgroundWorker.RunWorkerAsync();
-
- //开启云端连接
- //SysMgr.Instance.InitCloudConnect();
- //开启产品服务
- //SysMgr.Instance.InitPdtService();
- //开启处理事件反馈
- SysMgr.Instance.InitDefectEvent();
- //加载产品料号
- SysMgr.Instance.LoadProductCodeList();
- //加载产品选择
- LoadPdtList(SysMgr.Instance.ProductCodeList);
- this.Cursor = Cursors.Default;
-
- //运行前检测磁盘空间
- SysMgr.CheckDisk(this);
- }
- else
- {
- Application.Exit();
- }
- }
- else
- {
- Application.Exit();
- }
- }
-
- private void Main_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (SystemIsRun())
- {
- DialogResult dr = DialogResult.Cancel;
- if (SysMgr.Instance.IsInit)
- {
- dr = FrmDialog.ShowDialog(this, "确定要退出当前系统?", "警告", true);
- }
- else
- dr = DialogResult.OK;
- if (dr == DialogResult.Cancel)
- {
- e.Cancel = true;
- }
- else
- {
- backgroundWorkerDo = false;
- //Thread.Sleep(300);
- Thread.Sleep(300);
- if (SysMgr.Instance.IsInit)
- SysMgr.Instance.Close();
- //SysMgr.Instance.MainRuning -= main_running;
- }
- }
- else
- e.Cancel = true;
- }
-
- private void Main_SizeChanged(object sender, EventArgs e)
- {
- if (this.WindowState == FormWindowState.Maximized)
- {
- this.WindowState = FormWindowState.Normal;
- this.Top = 0;
- this.Left = 0;
- this.Width = SystemInformation.WorkingArea.Width;
- this.Height = SystemInformation.WorkingArea.Height;
- }
- }
- #endregion
-
- #region 菜单
-
- #region 退出
- private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- this.Close();
- }
- #endregion
-
- #region 用户
- private void tsmUserRight_Click(object sender, EventArgs e)
- {
- SysMgr.Instance.UserPermissiomMgr();
- }
- private void tsmUserList_Click(object sender, EventArgs e)
- {
- SysMgr.Instance.UserListMgr();
- }
- #endregion
-
- #region 系统设置
- private void MainFrm_Paint(object sender, PaintEventArgs e)
- {
- this.tsbtnReset.Visible = ConfMgr.Instance.SysConfigParams.ShowResetBtn;
- }
-
- private void tsmSysSet_Click(object sender, EventArgs e)
- {
- if (SystemIsRun())
- {
- //SysMgr.Instance.StatusMgr.GotoSetParams();
- //SysMgr.Instance.SendStatus();
- SysSetFrm frm = new SysSetFrm();
- frm.ShowDialog();
- MainFrm_Paint(null, null);
- //SysMgr.Instance.StatusMgr.GotoNormalStandby();
- //SysMgr.Instance.SendStatus();
- }
- }
-
- private void tsmDebug_Click(object sender, EventArgs e)
- {
-
- }
- #endregion
-
- #endregion
-
- #region 检测管理
- private string[] pdtlistData;
-
- private void LoadPdtList(List<string> list)
- {
- this.cbDefectCode.Items.Clear();
- while (true)
- {
- bool bk = true;
- for (int i = 0; i < list.Count; i++)
- {
- if (list[i] == null || string.IsNullOrEmpty(list[i]))
- {
- list.Remove(list[i]);
- bk = false;
- }
- }
- if (bk)
- {
- break;
- }
- }
- this.pdtlistData = list.ToArray();
-
- cbDefectCode.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些
- cbDefectCode.TextUpdate += cobList_TextUpdate;//重新绑定事件
- cbDefectCode.KeyDown += CobList_KeyDown;
- this.cbDefectCode.Text = "";
- cbDefectCode.Focus();
- cbDefectCode.SelectAll();
- }
-
- private void tsmPdtMgr_Click(object sender, EventArgs e)
- {
- if (SystemIsRun())
- {
- ProductListFrm frm = new ProductListFrm();
- frm.ShowDialog();
- //加载产品料号
- SysMgr.Instance.LoadProductCodeList();
- //加载产品选择
- LoadPdtList(SysMgr.Instance.ProductCodeList);
- }
- }
- private void CobList_KeyDown(object sender, KeyEventArgs e)
- {
- ComboBox ctrl = sender as ComboBox;
- if (e.KeyCode == Keys.Enter)
- {
- if (ctrl.Items.Count == 1)
- ctrl.Text = ctrl.Items[0].ToString();
- }
- }
-
- private void cobList_TextUpdate(object sender, EventArgs e)
- {
- ComboBox ctrl = sender as ComboBox;
- if (ctrl.Text != null)
- {
- string str = ctrl.Text; //获取cb_material控件输入内
- //清空combobox
- ctrl.DataSource = null;
- ctrl.Items.Clear();
-
- string[] workOrderFiltered;
-
- workOrderFiltered = pdtlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写
- ctrl.Items.AddRange(workOrderFiltered);//比使用DataSource速度要快一些
-
- // 不存在符合条件时
- //设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
- ctrl.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
- if (workOrderFiltered.Length > 0)
- {
- if (!ctrl.DroppedDown)
- ctrl.DroppedDown = true; // 自动弹出下拉框
- }
-
- ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
- }
- }
- #endregion
-
- #region 按钮
-
- private void tsbtnStart_Click(object sender, EventArgs e)
- {
- if (!SysMgr.Instance.IsRuning)
- {
- //低报警自动复位
- if (SysMgr.Instance.StatusMgr.Status == SystemStsEnum.Warning)
- {
- if (SysMgr.Instance.StatusMgr.Warning == WarningEnum.Low)
- {
- SysMgr.Instance.StatusMgr.ClearWarning();
- SysMgr.Instance.StatusMgr.GotoNormalStandby();
- }
- }
- //提示正在报警中
- if (SysMgr.Instance.StatusMgr.Status == SystemStsEnum.Warning)
- {
- FrmDialog.ShowDialog(this, "系统报警中!无法启动运行!", "警告", false);
- return;
- }
- this.Cursor = Cursors.WaitCursor;
- System.Windows.Forms.Application.DoEvents();
- if (SysMgr.Instance.StatusMgr.Status != SystemStsEnum.Pause)
- {
- ResetUI(false);
- AddTextEvent("运行", $"启动自动检测流程");
- this.lstLog.Refresh();
- string name = this.cbProductCode.Text;
- string batch = this.cbProductBatch.Text;
- string reel = this.cbProductReelNum.Text;
- string len = this.cbProductNum.Text;
- string defname = this.cbDefectCode.Text;
-
- if(string.IsNullOrEmpty(name))
- {
- name = "default";
- }
- if (SysMgr.Instance.StartRun(this, this.cbPdtSN.Text, ref defname, ref name, ref batch, ref reel, ref len))
- {
- this.tsbtnImpStop.Enabled = true;
- this.tsbtnStop.Enabled = true;
- this.tsbtnStart.Enabled = false;
- //锁定信息
- this.cbPdtSN.Enabled = false;
- this.cbProductCode.Enabled = false;
- this.cbProductBatch.Enabled = false;
- this.cbProductReelNum.Enabled = false;
- this.cbProductNum.Enabled = false;
- this.cbDefectCode.Enabled = false;
- //记录开始运行时间
- RunStartTime.Restart();
-
- //重新显示
- this.cbProductCode.Text = name;
- this.cbProductBatch.Text = batch;
- this.cbProductReelNum.Text = reel;
- this.cbProductNum.Text = len;
- this.cbDefectCode.Text = defname;
-
- ResetChart();
- }
- }
- else //暂停状态开始
- {
- if (SysMgr.Instance.ReStartRun())
- {
- this.tsbtnStop.Enabled = true;
- this.tsbtnStart.Enabled = false;
- }
- }
- this.Cursor = Cursors.Default;
- }
- }
-
- private void tsbtnReset_Click(object sender, EventArgs e)
- {
-
- }
- private void tsbtnStop_Click(object sender, EventArgs e)
- {
- AddTextEvent("暂停", "手动暂停");
- this.tsbtnStart.Enabled = true;
- SysMgr.Instance.Stop();
- SysMgr.Instance.StatusMgr.GotoPause();
- SysMgr.Instance.SendStatus();
- SysMgr.Instance.LedPause();
- }
-
- private void tsbtnWarning_Click(object sender, EventArgs e)
- {
- if (SysMgr.Instance.StatusMgr.Warning != WarningEnum.Normal)
- {
- AddTextEvent("清除", "手动清除报警");
- SysMgr.Instance.StatusMgr.ClearWarning();
- SysMgr.Instance.LedReady();
- if (SysMgr.Instance.IsAuto)
- SysMgr.Instance.StatusMgr.GotoPause();
- else
- SysMgr.Instance.StatusMgr.GotoNormalStandby();
- SysMgr.Instance.SendStatus();
- }
- }
- /// <summary>
- /// 结束验布
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void tsbtnImpStop_Click(object sender, EventArgs e)
- {
- AddTextEvent("结束验布", "手动结束验布");
- SysMgr.Instance.StatusMgr.GotoPause();
- SysMgr.Instance.DefectEnd(this);
- this.tsbtnStop.Enabled = false;
- this.tsbtnStart.Enabled = true;
- this.tsbtnImpStop.Enabled = false;
- SysMgr.Instance.StatusMgr.GotoNormalStandby();
- SysMgr.Instance.SendStatus();
- SysMgr.Instance.LedReady();
- }
-
- int cnnnt = 10;
- private void tsbGoHome_Click(object sender, EventArgs e)
- {
- #if false
- //测试散点
- chart1.Series.Clear();
- chart1.ChartAreas[0].AxisX.Title = "宽度(cm)";
- chart1.ChartAreas[0].AxisY.Title = "长度(m)";
-
- chart1.Series.Add("皱印");
- chart1.Series["皱印"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
- chart1.Series["皱印"].MarkerSize = 10;
- chart1.Series["皱印"].MarkerColor = Color.Red;
- chart1.Series["皱印"].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
- for (int i = 0; i < cnnnt; i++)
- this.chart1.Series["皱印"].Points.AddXY(i%5,i);
-
- chart1.Series.Add("划伤");
- chart1.Series["划伤"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
- chart1.Series["划伤"].MarkerSize = 10;
- chart1.Series["划伤"].MarkerColor = Color.Blue;
- chart1.Series["划伤"].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
- for (int i = 0; i < cnnnt; i++)
- this.chart1.Series["划伤"].Points.AddXY(i % 5 + 0.5, i + 0.3);
-
- chart1.ChartAreas[0].AxisY.Maximum = ((int)(this.chart1.Series["划伤"].Points.FindMaxByValue().YValues.Max() /10) + 1) * 10 + 5;
- chart1.ChartAreas[0].AxisY.ScaleView.Scroll(System.Windows.Forms.DataVisualization.Charting.ScrollType.Last);
- cnnnt +=20;
-
- MemoryStream ms = new MemoryStream();
- chart1.SaveImage(ms, ChartImageFormat.Bmp);
- Bitmap bmp = new Bitmap(ms);
- bmp.Save("111.jpg");
- ms.Close();
- #endif
- //测试散点
- chart3.Series.Clear();
- chart3.ChartAreas[0].AxisX.Title = "长度(m)";
- chart3.ChartAreas[0].AxisY.Title = "宽度(cm)";
-
- chart3.Series.Add("面宽");
-
- string tt = "面宽";
- if (chart3.Series.FindByName(tt) == null)
- chart3.Series.Add("面宽");
- else
- {
- chart3.Series["面宽"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
- chart3.Series["面宽"].MarkerSize = 5;
- chart3.Series["面宽"].MarkerColor = Color.Blue;
- chart3.Series["面宽"].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
-
- Random rm = new Random();
- for (int i = 0; i < cnnnt; i++)
- this.chart3.Series["面宽"].Points.AddXY(i, rm.Next(140, 160));
- cnnnt += 20;
- }
- //chart3.Series[0].f
- //chart3.ChartAreas["ChartArea1"].AxisX.ScaleView.Scroll(ScrollType.Last);
- }
-
- private void 本地数据库查询ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- DataQueryFrm frm = new DataQueryFrm();
- frm.WindowState = FormWindowState.Maximized;
- frm.ShowDialog();
- }
- #endregion
-
- #region 显示图像和消息
- private void lstLog_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- if (e.Index < 0) return;
-
- try
- {
- string str = lstLog.Items[e.Index].ToString();
- e.Graphics.DrawString(str.Substring(1), e.Font,
- new SolidBrush(str[0] == 'R' ? Color.Red : (str[0] == 'Y' ? Color.Orange : Color.Black)),
- e.Bounds);
- }
- catch (Exception ex)
- {
- e.Graphics.DrawString(ex.Message, e.Font,
- new SolidBrush(Color.Red),
- e.Bounds);
- }
- }
-
- /// <summary>
- /// 异步输出日志
- /// </summary>
- /// <param name="tag">模板标识</param>
- /// <param name="msg">内容</param>
- /// <param name="type"></param>
- private void AddTextEvent(string tag, string msg, WarningEnum level = WarningEnum.Normal, bool Show = true)
- {
- lock (AddTextLock)
- {
- if (tag != null && tag != "")
- tag = $" - [{tag}]";
-
- var now = DateTime.Now;
- msg = now.ToString("HH:mm:ss fff") + tag + " - " + msg;
-
- msg = (level == WarningEnum.Normal ? "B" : level == WarningEnum.Low ? "Y" : "R") + msg;
-
- if (this.lstLog.Items.Count > 300)
- this.lstLog.Items.Clear();
- lstLog.Items.Insert(0, msg);
-
- }
- }
-
- private void main_running(object sender, MainEventArgs e)
- {
- ShowMessage(e);
- }
- private delegate void ShowMessageDelegate(MainEventArgs e);
- private void ShowMessage(MainEventArgs e)
- {
- if (InvokeRequired)
- {
- ShowMessageDelegate smd = new ShowMessageDelegate(ShowMessage);
- this.BeginInvoke(smd, e);
- }
- else
- {
- AddTextEvent(e.Tag, e.Message, e.Warning, e.show);
- }
- }
-
- /// <summary>
- /// 自动运行流程显示
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void auto_runing(object sender, RunEventArgs e)
- {
- ShowUIEvent(e);
- }
-
- private delegate void ShowUIEventDelegate(RunEventArgs e);
- Bitmap bmp0;
- Bitmap bmp1;
- Bitmap bmp2;
-
- private void ReDrawDefectPoints(List<object[]> DataRowlist)
- {
- foreach (var rowItem in DataRowlist)
- {
- this.skinDataGridView1.Rows.Insert(0, rowItem);
- if (chart1.Series.FindByName((string)rowItem[3]) == null)//rowItem[3] 为name
- {
- chart1.Series.Add((string)rowItem[3]);
- var obj = SysMgr.Instance.GetDefectLabel((string)rowItem[3]);
- int labelIndex = obj.Value<int>("id");
- chart1.Series[(string)rowItem[3]].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
- chart1.Series[(string)rowItem[3]].MarkerSize = 5;
- chart1.Series[(string)rowItem[3]].MarkerColor = ChartColor[labelIndex];
- chart1.Series[(string)rowItem[3]].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
- }
- chart1.Series[(string)rowItem[3]].Points.AddXY(rowItem[4], rowItem[5]);
- }
- //chart1.ChartAreas[0].AxisY.Maximum = ((int)(this.chart1.Series["划伤"].Points.FindMaxByValue().YValues.Max() / 10) + 1) * 10 + 5;
- chart1.ChartAreas[0].AxisY.ScaleView.Scroll(System.Windows.Forms.DataVisualization.Charting.ScrollType.Last);
- }
- private void LoadDefectLabelAndPrint(Product md, bool reLabel = false)
- {
- dataGridView1.Columns.Clear();
- DataTable dt = new DataTable(); //建立个数据表
- dt.Columns.Add(new DataColumn("二次判断项", typeof(string)));//在表中添加string类型的列
- dataGridView1.DataSource = dt;
- //插入按钮
- DataGridViewButtonColumn btn1 = new DataGridViewButtonColumn();
- btn1.Name = "Pause";
- btn1.HeaderText = "判断";
- //btn1.DefaultCellStyle.va = "启用";
- btn1.Text = "开启";
- btn1.UseColumnTextForButtonValue = false;
- btn1.DefaultCellStyle.NullValue = "开启";
- btn1.DefaultCellStyle.BackColor = Color.LimeGreen;
- dataGridView1.Columns.Add(btn1);
-
- DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
- btn2.Name = "Print";
- btn2.HeaderText = "打标";
- btn2.Text = "开启";
- btn2.UseColumnTextForButtonValue = false;
- btn2.DefaultCellStyle.NullValue = "开启";
- btn2.DefaultCellStyle.BackColor = Color.LimeGreen;
- dataGridView1.Columns.Add(btn2);
-
- List<string> list = new List<string>();
- DataTable dts = (DataTable)dataGridView1.DataSource;
- dts.Clear();
- foreach (var item in md.QualifiedLimitList)
- {
- if (md.DefectPauseOption == null || md.DefectPauseOption.Count==0 || md.DefectPauseOption.Contains(item.Code))
- {
- //新增
- DataRow dr;//行
- dr = dts.NewRow();
- dr["二次判断项"] = item.NameCode;
- dts.Rows.Add(dr);//在表的对象的行里添加此行
-
- list.Add(item.NameCode);
- }
- }
- dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
- dataGridView1.Columns[0].DefaultCellStyle.ForeColor = Color.Black;
- dataGridView1.Columns[0].DefaultCellStyle.SelectionForeColor = Color.Black;
- if (reLabel)
- SysMgr.Instance.LoadDefectItemsPuase(list);
- }
- private void ReDrawDefectPoints(List<DefectInfo> DataRowlist)
- {
- try
- {
- //重新绘制
- chart1.Series.Clear();
- chart1.Series.Add("SELECT");
- chart1.Series["SELECT"].ChartType = SeriesChartType.Point;
- chart1.Series["SELECT"].MarkerSize = 25;
- chart1.Series["SELECT"].MarkerColor = Color.Black;
- chart1.Series["SELECT"].MarkerStyle = MarkerStyle.Star6;
- //chart1.Series["SELECT"].Enabled = false;
- chart1.ChartAreas[0].AxisX.Title = "宽度(cm)";
- chart1.ChartAreas[0].AxisY.Title = "长度(m)";
-
- foreach (var rowItem in DataRowlist)
- {
- //this.skinDataGridView1.Rows.Insert(0, rowItem);
- if (chart1.Series.FindByName((string)rowItem.Name) == null)//rowItem[3] 为name
- {
- chart1.Series.Add((string)rowItem.Name);
- var obj = SysMgr.Instance.GetDefectLabel((string)rowItem.Name);
- int labelIndex = obj.Value<int>("id");
- chart1.Series[(string)rowItem.Name].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
- chart1.Series[(string)rowItem.Name].MarkerSize = 5;
- chart1.Series[(string)rowItem.Name].MarkerColor = ChartColor[labelIndex];
- chart1.Series[(string)rowItem.Name].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
- }
- chart1.Series[(string)rowItem.Name].Points.AddXY(rowItem.CentreX, rowItem.CentreY / 100);
- }
- //chart1.ChartAreas[0].AxisY.Maximum = ((int)(this.chart1.Series["划伤"].Points.FindMaxByValue().YValues.Max() / 10) + 1) * 10 + 5;
- chart1.ChartAreas[0].AxisY.ScaleView.Scroll(System.Windows.Forms.DataVisualization.Charting.ScrollType.Last);
- }
- catch
- { }
- }
- private void ShowUIEvent(RunEventArgs e)
- {
- if (InvokeRequired)
- {
- ShowUIEventDelegate smd = new ShowUIEventDelegate(ShowUIEvent);
- this.BeginInvoke(smd, e);
- }
- else
- {
- try
- {
- if (e.Cmd == 6) //显示主图
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- if (e.PicIndex == 1)
- {
- bmp1 = e.Pic.ToBitmap();
- //this.pictureBox2.Image = bmp1;
- //this.pictureBox2.Refresh();
- }
- else if (e.PicIndex == 2)
- {
- bmp2 = e.Pic.ToBitmap();
- //this.pictureBox3.Image = bmp2;
- //this.pictureBox3.Refresh();
- }
- else if (e.PicIndex == 0)
- {
- bmp0 = e.Pic.ToBitmap();
- this.pictureBox1.Image = bmp0;
- this.pictureBox1.Refresh();
- }
- //}));
- }
- else if (e.Cmd == 10) //测试结束
- {
- this.tsbtnStart.Enabled = true;
- this.tsbtnStop.Enabled = false;
- this.tsbtnImpStop.Enabled = false;
-
- this.cbPdtSN.Enabled = true;
- this.cbProductCode.Enabled = true;
- this.cbProductBatch.Enabled = true;
- this.cbProductReelNum.Enabled = true;
- this.cbProductNum.Enabled = true;
- this.cbDefectCode.Enabled = true;
- }
- else if (e.Cmd == 11) //显示缺陷列表
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- ReDrawDefectPoints(e.DataRowlist);
- //显示最新缺陷
- var defectInfo = SysMgr.Instance.GetDefectInfo((long)this.skinDataGridView1.Rows[0].Cells["colUid"].Value);
- if (defectInfo == null)
- {
- return;
- }
- //OpenCvSharp.Mat img = BitmapConverter.ToMat((Bitmap)defectInfo.image);
- //imageBox3.RefreshWindow(img, ImageBox.ImageModeEnum.Zoom);//可以不显示区域
- //this.imageBox3.Image = (defectInfo.image);
-
- //}));
- }
- else if(e.Cmd == 12) //显示处理图
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- bmp0 = (Bitmap)e.Defectimg.Clone();
- this.pictureBox1.Image = bmp0;
- this.pictureBox1.Refresh();
- //}));
- }
- else if (e.Cmd == 13) //显示门幅
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- List<float> ydata = new List<float>();
- this.lbFK.Text = "当前幅宽:" + $"{e.Points[e.Points.Count - 1][1]}";
- this.chart3.Series["面宽"].Points.Clear();
- foreach (var Item in e.Points)
- {
- ydata.Add(Item[1]);
- float x = Item[0] / 100; //cm -> m
- this.chart3.Series["面宽"].Points.AddXY((float)Math.Round(x, 2), (float)Math.Round(Item[1], 2));
- }
- chart3.ChartAreas[0].AxisY.Maximum = Math.Round(ydata.Max() + 10, 0);
- chart3.ChartAreas[0].AxisY.Minimum = Math.Round(ydata.Min() - 10, 0);
- //chart3.ChartAreas["ChartArea1"].AxisX.ScaleView.Scroll(ScrollType.Last);
- //}));
- }
- else if (e.Cmd == 14) //显示速度
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- lblDefectLen.Text = $"检测长度: {Math.Round(e.Len, 2)} 米";
- lblDefectSpeed.Text = $"检测速度: {Math.Round(e.Speed,2)} 米/分钟";
- //}));
- }
- else if (e.Cmd == 15) //显示处理图 new
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- bmp0 = (Bitmap)e.DefectMat.ToBitmap();
- this.pictureBox1.Image = bmp0;
- this.pictureBox1.Refresh();
- //}));
- }
- else if (e.Cmd == 16) //显示缓存
- {
- this.tsState.Text = $"相机1:{e.Cam1ImgCnt},相机2:{e.Cam2ImgCnt}";
- this.tslabelTime.Text = e._DefinfoCnt;
- //this.stsSaveQueue.Text = $"存图队列:{e.SaveImgCnt}";
- }
- else if (e.Cmd == 17) //显示光源亮度
- {
- this.ucTrackBar1.Value = e.LightValue;
- }
- else if (e.Cmd == 18) //显示二次判断和打标
- {
- //this.BeginInvoke(new System.Action(() =>
- //{
- // LoadDefectLabelAndPrint(e.MD);
- //}));
- }
- else if (e.Cmd == 19) // 二次判定数据修改
- {
- //不能使用同步Invoke方式,会使相机超时丢帧
- this.BeginInvoke(new System.Action(() =>
- {
- reFreashFrm(e.ImgIndex, e.LstEditDefect, e.Records, e.LstEditInfo);
- #if false
- int liDefectCount = e.LstEditDefect.Count;
- if(e.LstEditInfo != null || e.LstEditDefect != null)
- {
- string oldCode;
- for (int i = 0; i < this.skinDataGridView1.Rows.Count; i++)
- {
- if ((int)this.skinDataGridView1.Rows[i].Cells["colIndex"].Value != e.ImgIndex)
- continue;
-
- long uid = (long)this.skinDataGridView1.Rows[i].Cells["colUid"].Value;
- foreach (var row in e.LstEditDefect)
- {
- //AddTextEvent($"二次确认", $"修改第({i + 1})行瑕疵名称,{uid} {row.uid}");
- if (row.uid == uid)
- {
- oldCode = this.skinDataGridView1.Rows[i].Cells["colCode"].Value.ToString();
- //AddTextEvent($"二次确认", $"修改第({i + 1})行瑕疵名称 ({this.skinDataGridView1.Rows[i].Cells["colDefectName"].Value})->({row.Name})");
- this.skinDataGridView1.Rows[i].Cells["colCode"].Value = row.Code;
- this.skinDataGridView1.Rows[i].Cells["colDefectName"].Value = row.Name;
- //this.uiDataGridView1.Refresh();
- if (!string.IsNullOrWhiteSpace(row.TagFilePath) && oldCode != row.Code)
- File.Move(row.TagFilePath, row.TagFilePath.Replace($"_类别{oldCode}", $"_类别{row.Code}"));//
- break;
- }
- }
- if (e.LstEditInfo != null)
- {
- foreach (var item in e.LstEditInfo)
- {
- if (item.uid == uid)
- {
- this.skinDataGridView1.Rows.RemoveAt(i);
- i--;
- break;
- }
- }
- }
- }
- //SysMgr.Instance.DelDefectEdit(e.Records, frmDefect.lstDel);
-
- //double len = (double)this.lblLen.Tag;
- //this.reDrawDefectPoints(curRecord.DefectInfoList, new double[] { 0, Math.Round(curRecord.FaceWidthMax + 0.005f, 2) }, new double[] { 0, len });
- //AddTextEvent($"二次检测", $"本次忽略{frmDefect.lstDel.Count}个瑕疵,本张图由{liDefectCount} -> {e.LstEditDefect.Count},总数{e.Records.DefectInfoList.Count}");
- }
- //this.uiMiniPagination1.TotalCount = curRecord.DefectTotalCount = curRecord.DefectInfoList.Count;
- //
- //double len = Math.Round((res.photoIndex + 1) * bmpHeight * 1.0d / Config.cm2px_y + 0.005f, 2);
- //重新绘制分布图
- ReDrawDefectPoints(e.Records.DefectInfoList);
-
- //自动继续运行设备(这里临时暂停后不能再急停,否则无法继续)
- SysMgr.Instance.StartMotion();
- #endif
- }));
- }
- else if (e.Cmd == 20) //显示存图缓存
- {
- //this.tsState.Text = $"相机1:{e.Cam1ImgCnt},相机2:{e.Cam2ImgCnt}";
- this.stsSaveQueue.Text = $"存图队列:{e.SaveImgCnt}";
- }
- else if (e.Cmd == 21) //显示二次判定界面
- {
- this.BeginInvoke(new System.Action(() =>
- {
- var pimage = (Bitmap)e.TagImg.ToBitmap().Clone();
- List<DefectInfo> ld = new List<DefectInfo>();
- foreach (var item in e.LstEditDefect)
- {
- ld.Add(item);
- }
- int index = e.ImgIndex;
-
- //Task.Run(() =>
- //{
- int liDefectCount = ld.Count;
- ImageShowFrm frmDefect = new ImageShowFrm(index, ld, pimage);
- if (frmDefect.ShowDialog() == DialogResult.OK)
- {
- SysMgr.Instance.DelDefectEdit(e.Records, frmDefect.lstDel);
- reFreashFrm(index, ld, e.Records, frmDefect.lstDel);
- AddTextEvent($"二次检测2", $"本次忽略{frmDefect.lstDel.Count}个瑕疵,本张图由{liDefectCount} -> {ld.Count},总数{e.Records.DefectInfoList.Count}");
- }
- else
- {
- reFreashFrm(index, ld, e.Records, null);
- }
- //});
- }));
- }
- //Application.DoEvents();
- }
- catch { }
- }
- }
- #endregion
-
- #region 二次确认界面刷新
- void reFreashFrm(int index, List<DefectInfo> lstEditDefect, Records currRecord, List<DefectInfo> lstEditInfo)
- {
- int err = 0;
- try
- {
- //int liDefectCount = lstEditDefect.Count;
- //ImageShowFrm frmDefect = new ImageShowFrm(e.LstEditDefect, e.TagImg.ToBitmap());
- //frmDefect.Show();
- //if (frmDefect.ShowDialog() == DialogResult.OK)
- if (lstEditInfo != null || lstEditDefect != null)
- {
- err = 1;
- string oldCode;
- for (int i = 0; i < this.skinDataGridView1.Rows.Count; i++)
- {
- if ((int)this.skinDataGridView1.Rows[i].Cells["colIndex"].Value != index)
- continue;
-
- err = 2;
- long uid = (long)this.skinDataGridView1.Rows[i].Cells["colUid"].Value;
- foreach (var row in lstEditDefect)
- {
- //AddTextEvent($"二次确认", $"修改第({i + 1})行瑕疵名称,{uid} {row.uid}");
- if (row.uid == uid)
- {
- err = 3;
- oldCode = this.skinDataGridView1.Rows[i].Cells["colCode"].Value.ToString();
- //AddTextEvent($"二次确认", $"修改第({i + 1})行瑕疵名称 ({this.skinDataGridView1.Rows[i].Cells["colDefectName"].Value})->({row.Name})");
- this.skinDataGridView1.Rows[i].Cells["colCode"].Value = row.Code;
- this.skinDataGridView1.Rows[i].Cells["colDefectName"].Value = row.Name;
- //this.uiDataGridView1.Refresh();
- if (!string.IsNullOrWhiteSpace(row.TagFilePath) && oldCode != row.Code)
- File.Move(row.TagFilePath, row.TagFilePath.Replace($"_类别{oldCode}", $"_类别{row.Code}"));//
- break;
- }
- }
- err = 4;
- if (lstEditInfo != null)
- {
- foreach (var item in lstEditInfo)
- {
- if (item.uid == uid)
- {
- this.skinDataGridView1.Rows.RemoveAt(i);
- i--;
- break;
- }
- }
- }
- }
- //SysMgr.Instance.DelDefectEdit(e.Records, frmDefect.lstDel);
-
- //double len = (double)this.lblLen.Tag;
- //this.reDrawDefectPoints(curRecord.DefectInfoList, new double[] { 0, Math.Round(curRecord.FaceWidthMax + 0.005f, 2) }, new double[] { 0, len });
- //AddTextEvent($"二次检测", $"本次忽略{frmDefect.lstDel.Count}个瑕疵,本张图由{liDefectCount} -> {e.LstEditDefect.Count},总数{e.Records.DefectInfoList.Count}");
- }
- //this.uiMiniPagination1.TotalCount = curRecord.DefectTotalCount = curRecord.DefectInfoList.Count;
- //
- //double len = Math.Round((res.photoIndex + 1) * bmpHeight * 1.0d / Config.cm2px_y + 0.005f, 2);
- //重新绘制分布图
- err = 5;
- ReDrawDefectPoints(currRecord.DefectInfoList);
- err = 6;
- //自动继续运行设备(这里临时暂停后不能再急停,否则无法继续)
- SysMgr.Instance.StartMotion();
- }catch(Exception ex)
- {
- MessageBox.Show($"err {err}:{ex.Message}");
- }
- }
- #endregion
-
- #region 后台
- GetPN pn = new GetPN();
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- while (backgroundWorkerDo)
- {
- try
- {
- this.Invoke(new MethodInvoker(() =>
- {
- this.tsslLoginTime.Text = $" 当前时间:{DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss")}";
- }));
- //检测按钮和实时状态
- if (SysMgr.Instance.IsInit)
- {
- bool sts = SysMgr.Instance.WarningShowLed(false);
- if (sts)
- {
- this.Invoke(new MethodInvoker(() =>
- {
- this.tsbtnStart.Enabled = true;
- this.tsbtnStop.Enabled = false;
- }));
- }
- int stsno = 0;
- stsno = SysMgr.Instance.ButtonIOTrg(false);
- if (stsno == 1)
- {
- this.Invoke(new MethodInvoker(() =>
- {
- tsbtnStart_Click(null, null);
- }));
- }
- else if (stsno == 2)
- {
- this.Invoke(new MethodInvoker(() =>
- {
- this.tsbtnStart.Enabled = true;
- }));
- SysMgr.Instance.LedPause();
- }
- else if (stsno == 3)
- {
- this.Invoke(new MethodInvoker(() =>
- {
- tsbtnReset_Click(null, null);
- }));
-
- }
- }
- if (pn.P(SysMgr.Instance.IsRuning))
- {
- //继续计时
- RunStartTime.Start();
- }
- if (pn.N(SysMgr.Instance.IsRuning))
- {
- //停止计时
- RunStartTime.Stop();
- }
- if (SysMgr.Instance.IsRuning)
- {
- ////实时显示
- //RunStartTime.Stop();
- //this.Invoke(new MethodInvoker(() =>
- //{
- // tslabelTime.Text = "实时测试:" + ((double)RunStartTime.ElapsedMilliseconds / 1000.0).ToString("0.000") + "s";
- // //this.Refresh();
- //}));
- //RunStartTime.Start();
- }
- Thread.Sleep(100);
- //Application.DoEvents();
- }
- catch { }
- }
- }
- /// <summary>
- /// 信号上升沿下降沿捕获
- /// </summary>
- class GetPN
- {
- bool _P = false;
- bool _N = false;
- /// <summary>
- /// 判断上升沿
- /// </summary>
- /// <param name="Value"></param>
- /// <returns></returns>
- public bool P(bool Value)
- {
- if (Value && !_P)
- {
- _P = true;
- return true;
- }
-
- if (!Value)
- _P = false;
-
- return false;
- }
- /// <summary>
- /// 判断下降沿
- /// </summary>
- /// <param name="Value"></param>
- /// <returns></returns>
- public bool N(bool Value)
- {
- if (!Value && _N)
- {
- _N = false;
- return true;
- }
-
- if (Value)
- _N = true;
- return false;
- }
- }
- #endregion
-
- #region 表格点击
- private void skinDataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
- {
- if (e.RowIndex < 0)
- return;
- var defectInfo = SysMgr.Instance.GetDefectInfo((long)this.skinDataGridView1.CurrentRow.Cells["colUid"].Value);
- if (defectInfo == null)
- {
- DialogResult dr = DialogResult.Cancel;
- dr = FrmDialog.ShowDialog(this, "此记录已不存在!", "警告", true);
- return;
- }
- OpenCvSharp.Mat img = defectInfo.image;
- imageBox3.RefreshWindow(img, ImageBox.ImageModeEnum.Zoom);//可以不显示区域
- //this.pictureBox4.Image = (defectInfo.image);
-
- //选中
- this.Invoke(new System.Action(() =>
- {
- if (chart1.Series != null && chart1.Series.FindByName("SELECT") != null)
- {
- chart1.Series["SELECT"].Points.Clear();
- chart1.Series["SELECT"].Points.AddXY(defectInfo.CentreX, defectInfo.CentreY / 100);
- chart1.Refresh();
- }
- }));
- }
- #endregion
-
- #region 二次判断
- private void ucSwitch1_CheckedChanged(object sender, EventArgs e)
- {
- SysMgr.Instance.SetDefectPause(ucSwitch1.Checked);
- }
-
- #endregion
-
- #region 打标
- private void ucSwitch2_CheckedChanged(object sender, EventArgs e)
- {
- SysMgr.Instance.SetDefectDB(ucSwitch2.Checked);
- }
- #endregion
-
- #region 控制光源
- private void ucTrackBar1_ValueChanged(object sender, EventArgs e)
- {
- SysMgr.Instance.SetLightValue((int)ucTrackBar1.Value);
- }
- #endregion
-
- #region 二次判断和打标表格点击
- private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
- {
-
- //for (int i = 0; i < this.dataGridView1.RowCount; i++)
- //{
- // namelist.Add(this.dataGridView1.Rows[i].Cells[0].Value.ToString());
- //}
- int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
- if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "判断")
- {
- List<string> namelist = new List<string>();
- DataGridViewButtonCell btn = (DataGridViewButtonCell)this.dataGridView1.CurrentCell;
- if (btn.FormattedValue.ToString() == "开启")
- {
- this.dataGridView1.CurrentCell.Value = "禁用";
- this.dataGridView1.CurrentCell.Style.BackColor = Color.Red;
- this.dataGridView1.CurrentCell.Style.ForeColor = Color.Red;
- }
- else
- {
- this.dataGridView1.CurrentCell.Value = "开启";
- this.dataGridView1.CurrentCell.Style.BackColor = Color.LimeGreen;
- this.dataGridView1.CurrentCell.Style.ForeColor = Color.Black;
- }
- for (int i = 0; i < this.dataGridView1.RowCount; i++)
- {
- DataGridViewButtonCell btn2 = (DataGridViewButtonCell)this.dataGridView1.Rows[i].Cells[1];
- if (btn2.FormattedValue.ToString() == "开启")
- namelist.Add(this.dataGridView1.Rows[i].Cells[0].Value.ToString());
- }
- //开启该项二次判断功能
- SysMgr.Instance.LoadDefectItemsPuase(namelist);
-
- }
- else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "打标")
- {
- List<string> namelist = new List<string>();
- DataGridViewButtonCell btn = (DataGridViewButtonCell)this.dataGridView1.CurrentCell;
- if (btn.FormattedValue.ToString() == "开启")
- {
- this.dataGridView1.CurrentCell.Value = "禁用";
- this.dataGridView1.CurrentCell.Style.BackColor = Color.Red;
- this.dataGridView1.CurrentCell.Style.ForeColor = Color.Red;
- }
- else
- {
- this.dataGridView1.CurrentCell.Value = "开启";
- this.dataGridView1.CurrentCell.Style.BackColor = Color.LimeGreen;
- this.dataGridView1.CurrentCell.Style.ForeColor = Color.Black;
- }
- for (int i = 0; i < this.dataGridView1.RowCount; i++)
- {
- DataGridViewButtonCell btn2 = (DataGridViewButtonCell)this.dataGridView1.Rows[i].Cells[1];
- if (btn2.FormattedValue.ToString() == "开启")
- namelist.Add(this.dataGridView1.Rows[i].Cells[0].Value.ToString());
- }
- //开启该项打标功能
- SysMgr.Instance.LoadDefectItemsDB(namelist);
- }
- }
- #endregion
-
- #region 选检测标准之后自动加载二次判断
- private Service.ProductService PdtService = new Service.ProductService();
- private void cbDefectCode_SelectedIndexChanged(object sender, EventArgs e)
- {
- Product model = SysMgr.Instance.GetProduct(cbDefectCode.Text);
- if (model != null)
- {
- LoadDefectLabelAndPrint(model, true);
- }
- }
- #endregion
-
- #region 模拟键盘
- private KeyBoardType keyBoardType = KeyBoardType.UCKeyBorderAll_EN;
- [Description("键盘打开样式"), Category("自定义")]
- public KeyBoardType KeyBoardType
- {
- get { return keyBoardType; }
- set { keyBoardType = value; }
- }
- private void showKeyPanel(Control ctl)
- {
- //keyPanel.Top = ctl.Top + ctl.Height + 5;
- //keyPanel.Left = ctl.Left;
- //keyPanel.Visible = true;
- //keyPanel.BringToFront();
-
- process = Process.Start(@"C:\WINDOWS\system32\osk.exe");
- }
-
- //Froms.FrmAnchor m_frmAnchor;
- private void cbPdtSN_Click(object sender, EventArgs e)
- {
- showKeyPanel((Control)sender);
- }
- #endregion
-
- private void skinDataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
- {
-
- }
-
- private void tsmSysmgr_Click(object sender, EventArgs e)
- {
-
- }
-
-
- }
- }
|