using CCWin;
using CCWin.SkinClass;
using CCWin.SkinControl;
using HalconDotNet;
using HZH_Controls.Forms;
using MaiMuAOI.Properties;
using MaiMuAOI.SysCtrl;
using MaiMuAOI.SysUI.DefectPicShow;
using MaiMuAOI.SysUI.Load;
using MaiMuAOI.SysUI.ProcessStep;
using MaiMuAOI.SysUI.ProcessStep.Ctrl;
using MaiMuAOI.SysUI.ProductAndStep;
using MaiMuAOI.SysUI.SysSet;
using MaiMuAOI.SysUI.Web;
using MaiMuAOI.UI.SysSet;
using MaiMuControl.Device;
using MaiMuControl.Device.CamDev;
using MaiMuControl.Device.IOCardDev;
using MaiMuControl.SysStatusMgr.StatusMgr;
using Models;
using Newtonsoft.Json.Linq;
using OpenCvSharp;
using ProductionControl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static MaiMuAOI.SysCtrl.SysMgr;
namespace MaiMuAOI
{
public partial class MainFrm : Form
{
private Service.ProductService svcProduct = new Service.ProductService();
object AddTextLock = new object();
object AddPicLock = new object();
bool backgroundWorkerDo;
bool DisEnableBuzz;
bool DisEnableDoor;
private Stopwatch RunStartTime = new Stopwatch();
public MainFrm()
{
InitializeComponent();
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;
SysMgr.Instance.AutoShowImg += auto_ShowMoreImg;
SysMgr.Instance.AutoSizeShowImg += auto_SizeShowMoreImg;
//显示行号与列宽度自动调整
dgvProcess.RowHeadersVisible = true;
dgvProcess.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
dgvProcess.RowPostPaint += (sender, e) =>
{
SysMgr.showRowNum_onDataGrid_RowPostPaint(this.dgvProcess, sender, e);
};
dgvProcess.DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
this.lblTimeLen.Top = toolStrip1.Top + 10;
this.lblTimeLen.Left = toolStrip1.Width - 300;
this.lblOutput.Top = toolStrip1.Top + 10 + lblTimeLen.Height + 5;
this.lblOutput.Left = toolStrip1.Width - 300;
this.chkBuzzer.Top = toolStrip1.Top + 20;
this.chkDoorSensor.Top = toolStrip1.Top + 20;
}
#region 私有方法
///
/// 初始化
///
///
private bool InitSystem()
{
//进入初始化,初始化失败则中断
InitFrm initFrm = new InitFrm();
initFrm.ShowDialog();
if (initFrm.DialogResult == DialogResult.OK)
{
//初始化成功
}
else
{
initFrm.Dispose();
return false;
}
initFrm.Dispose();
return true;
}
///
/// 系统是否在运行
///
///
private bool SystemIsRun()
{
if (SysMgr.Instance.IsRuning)
{
FrmDialog.ShowDialog(this, "设备正在运行中!", "警告", false);
//MessageBox.Show("设备正在运行中!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
return true;
}
private void ClearDefectBmps()
{
this.pnlBmpList.Controls.Clear();
this.gboxDefectList.Text = $"缺陷图像";
this.gboxDefectList.Tag = 0;
this.pnlSizeBmpList.Controls.Clear();
this.gboxSizeDefectList.Text = $"尺寸图像";
this.gboxSizeDefectList.Tag = 0;
this.lblDefectAddTag.Text = "";
this.lblDefectAddTag.Tag = 0;
}
private void ResetUI(bool clearSN)
{
//保持产品名称和料号
//txtProductName.Text = txtProductCode.Text = txtProductSN.Text = "";
if(clearSN)
cbProductSN.Text = "";
lblTension.ForeColor = Color.White;
lblTension.Text = "0.00";
lblTensionMax.Text = "0.00";
lblTensionMin.Text = "0.00";
lblHeight.ForeColor = Color.White;
lblHeight.Text = "0.00";
lblHeightMax.Text = "0.00";
lblHeightMin.Text = "0.00";
lblLineWidth.ForeColor = Color.White;
lblLineWidth.Text = "0.00";
lblLineWidthMax.Text = "0.00";
lblLineWidthMin.Text = "0.00";
lblPT.ForeColor = Color.White;
lblPT.Text = "0.00";
lblPTMax.Text = "0.00";
lblPTMin.Text = "0.00";
lblCompareResult.ForeColor = Color.White;
lblCompareResult.Text = "无";
//lblCompareCount.Text = "未通过:";
lblDefectResult.ForeColor = Color.White;
lblDefectResult.Text = "无";
lblDefectResultCount.Text = "无";
this.dgvProcess.DataSource = null;
this.dgvProcess.DataSource = null;
this.lstLog.Items.Clear();
this.ClearDefectBmps();
this.flpProcessStep.Controls.Clear();
this.picScanner0.Image = null;
picScanner0.Refresh();
this.picScanner1.Image = null;
picScanner1.Refresh();
this.tsbtnStop.Enabled = false;
this.cbOrderCode.Enabled = true;
this.cbProductCode.Enabled = true;
this.cbProductSN.Enabled = true;
lblTimeLen.Text = "检测时长: 0 秒";
tslabelTime.Text = "实时测试:0.00s";
tslbSaveSts.Text = "保存队列:0";
int daout = 0;
if(ConfMgr.Instance.GetDailyOutput(out daout))
{
lblOutput.Text = $"当日产量: {daout} 个";
}
MainFrm_Paint(null, null);
this.Refresh();
}
private void UserRightCheck()
{
this.tsmStepMgr.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Step);
this.tsmPdtMgr.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Product);
this.web数据查询ToolStripMenuItem.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Statistics);
this.本地数据库查询ToolStripMenuItem.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Order);
if (this.web数据查询ToolStripMenuItem.Enabled == false && this.本地数据库查询ToolStripMenuItem.Enabled == false)
this.tsmSysDataFind.Visible = false;
else
this.tsmSysDataFind.Visible = true;
//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.快速调试ToolStripMenuItem.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Debug);
this.tsmSysSet.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.SysSetting);
this.tsmSysPoints.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.ParamsSetting);
if (this.tsmDebug.Enabled == false && this.tsmSysSet.Enabled == false && this.快速调试ToolStripMenuItem.Enabled == false && this.tsmSysPoints.Enabled == false)
this.stmSysSet.Visible = false;
else
this.stmSysSet.Visible = true;
}
#endregion
private void MainFrm_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.dgvProcess.AutoGenerateColumns = false;
this.tsslLoginInfo.Text = $"操作员:{SysMgr.Instance.UserMgr.LoginUser.Code}({SysMgr.Instance.UserMgr.LoginUser.Name})";
//this.tsslLoginTime.Text = $" 登录时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}";
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.tsAxisState.Text = "";
//设置流程卡显示
this.tabControl1.SelectTab(0);
//this.tabControl1.SelectTab(1);
//更新数据库格式
Service.InitDB.initDB();
//权限判断
UserRightCheck();
//开启后台
//timer1.Enabled = true;
backgroundWorkerDo = true;
backgroundWorker1.RunWorkerAsync();
//s_BackWorker = true;
//backgroundWorker.RunWorkerAsync();
//开启web服务器
SysMgr.Instance.InitWebServer();
//开启云端连接
SysMgr.Instance.InitCloudConnect();
//开启产品服务
SysMgr.Instance.InitPdtService();
//开启处理事件反馈
SysMgr.Instance.InitDefectEvent();
//加载产品料号
SysMgr.Instance.LoadProductCodeList();
//加载产品选择
LoadPdtList(SysMgr.Instance.ProductCodeList);
LoadSNList(SysMgr.Instance.ProductSNList);
this.Cursor = Cursors.Default;
//运行前检测磁盘空间
SysMgr.CheckDisk(this, 100);
if (ConfMgr.Instance.SysConfigParams.CustomerName == "JA")
lbJA.Visible = true;
else
lbJA.Visible = false;
}
else
{
Application.Exit();
}
}
else
{
Application.Exit();
}
}
private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
{
if (SystemIsRun())
{
DialogResult dr = DialogResult.Cancel;
if (SysMgr.Instance.GetSaveQueueCnt() > 0)
{
dr = FrmDialog.ShowDialog(this, "图片正在保存,是否继续退出?", "警告", true);
}
else { dr = DialogResult.OK; }
if (dr == DialogResult.OK)
{
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;
}
#region 主界面
private void toolStrip1_Paint(object sender, PaintEventArgs e)
{
if ((sender as ToolStrip).RenderMode == ToolStripRenderMode.System)
{
Rectangle rect = new Rectangle(0, 0, this.toolStrip1.Width, this.toolStrip1.Height - 2);
e.Graphics.SetClip(rect);
}
}
private void chkBuzzer_CheckedChanged(object sender, EventArgs e)
{
DisEnableBuzz = chkBuzzer.Checked;
}
private void chkDoorSensor_CheckedChanged(object sender, EventArgs e)
{
DisEnableDoor = chkDoorSensor.Checked;
}
private void MainFrm_Shown(object sender, EventArgs e)
{
}
private void tsbCC_Click(object sender, EventArgs e)
{
if(this.tsbCC.Text == "尺寸启用")
{
this.tsbCC.Text = "尺寸禁用";
this.tsbCC.Image = Resources.ccClose;
SysMgr.Instance.SetSizeEnable(false);
}
else
{
this.tsbCC.Text = "尺寸启用";
this.tsbCC.Image = Resources.ccOpen;
SysMgr.Instance.SetSizeEnable(true);
}
}
private void tsbQX_Click(object sender, EventArgs e)
{
if (this.tsbQX.Text == "缺陷启用")
{
this.tsbQX.Text = "缺陷禁用";
this.tsbQX.Image = Resources.qxClose;
SysMgr.Instance.SetDefectEnable(false);
}
else
{
this.tsbQX.Text = "缺陷启用";
this.tsbQX.Image = Resources.qxOpen;
SysMgr.Instance.SetDefectEnable(true);
}
}
#endregion
#region 菜单按钮
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 tsmUserRight_Click(object sender, EventArgs e)
{
SysMgr.Instance.UserPermissiomMgr();
}
private void tsmUserList_Click(object sender, EventArgs e)
{
SysMgr.Instance.UserListMgr();
}
private void tsmDebug_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
SysMgr.Instance.StatusMgr.GotoDebug();
SysMgr.Instance.SendStatus();
SysDebugFrm frm = new SysDebugFrm();
frm.ShowDialog();
SysMgr.Instance.StatusMgr.GotoNormalStandby();
SysMgr.Instance.SendStatus();
}
}
private void tsmSysPoints_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
SysMgr.Instance.StatusMgr.GotoSetParams();
SysMgr.Instance.SendStatus();
SysPointsFrm frm = new SysPointsFrm();
frm.ShowDialog();
SysMgr.Instance.StatusMgr.GotoNormalStandby();
SysMgr.Instance.SendStatus();
}
}
private void tsmSysDataFind_Click(object sender, EventArgs e)
{
//WebFrm frm = new WebFrm("查询统计", $"reportRecordSN?CustomerVer=B",
// "http://127.0.0.1:" + ConfMgr.Instance.SysConfigParams.HttpServerPort.ToString() + "/static/index.html#/");
//WebFrm frm = new WebFrm("查询统计", $"reportRecordSN?CustomerVer=B");
//frm.WindowState = FormWindowState.Maximized;
//frm.Show();
}
private void web数据查询ToolStripMenuItem_Click(object sender, EventArgs e)
{
WebFrm frm = new WebFrm("查询统计", $"reportRecordSN?CustomerVer=B");
frm.WindowState = FormWindowState.Maximized;
frm.Show();
}
private void 本地数据库查询ToolStripMenuItem_Click(object sender, EventArgs e)
{
DataQueryFrm frm = new DataQueryFrm();
frm.WindowState = FormWindowState.Maximized;
frm.Show();
}
private void 系统管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
ProductListFrm frm = new ProductListFrm();
frm.ShowDialog();
//加载产品料号
SysMgr.Instance.LoadProductCodeList();
//加载产品选择
LoadPdtList(SysMgr.Instance.ProductCodeList);
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
StepListFrm frm = new StepListFrm();
frm.ShowDialog();
}
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void tsmInfoUS_Click(object sender, EventArgs e)
{
SysInfoFrm frm = new SysInfoFrm();
frm.ShowDialog();
}
private void tsmReadLog_Click(object sender, EventArgs e)
{
SysLogFrm frm = new SysLogFrm();
frm.ShowDialog();
}
private void tsmHelpInfo_Click(object sender, EventArgs e)
{
//MessageBox.Show(SysUpdata.Updata, "更新信息");
SysUpdataInfoFrm frm = new SysUpdataInfoFrm(SysUpdata.Updata);
frm.ShowDialog();
}
private void tsmSoftFile_Click(object sender, EventArgs e)
{
string fileName = ConfMgr.Instance.SpecificationPath;//输入打开文件路径
Process.Start(fileName);//使用process进程打开
}
private void 快速调试ToolStripMenuItem_Click(object sender, EventArgs e)
{
DebugTestFrm frm = new DebugTestFrm();
//frm.TopMost = true;
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);
}
}
///
/// 异步输出日志
///
/// 模板标识
/// 内容
///
private void AddTextEvent(string tag, string msg, WarningEnum level = WarningEnum.Normal)
{
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 > 1000)
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);
}
}
///
/// 自动运行流程显示
///
///
///
private void auto_runing(object sender, RunEventArgs e)
{
ShowUIEvent(e);
}
private delegate void ShowUIEventDelegate(RunEventArgs e);
Bitmap bmp0;
Bitmap bmp1;
private void ShowUIEvent(RunEventArgs e)
{
if (InvokeRequired)
{
ShowUIEventDelegate smd = new ShowUIEventDelegate(ShowUIEvent);
this.BeginInvoke(smd, e);
}
else
{
try
{
if (e.Cmd == 0) //显示SN和流程
{
this.cbProductSN.Text = e.SN;
if (e.NewStep)
{
this.tabControl1.SelectTab(1);
ShowNewStepProcess(e.StepProcessesList);
}
else
{
this.tabControl1.SelectTab(0);
this.dgvProcess.DataSource = new BindingSource(e.StepProcessesList, null);
}
}
else if (e.Cmd == 1) //显示当前运行步骤
{
this.dgvProcess.Rows[e.StepIndex].Selected = true;
dgvProcess.CurrentCell = dgvProcess.Rows[e.StepIndex].Cells[1];
}
else if (e.Cmd == 2) //显示当前运行步骤 和步骤详情
{
this.dgvProcess.Rows[e.StepIndex].Cells["colValue"].Value = e.Mesg;
}
else if (e.Cmd == 3) //图纸比对结果
{
this.lblCompareResult.Text = (e.CompareResult ? "通过" : $"未通过");
this.lblCompareResultCount.Text = e.Cnt.ToString();
if (!e.CompareResult)
{
this.lblCompareResult.ForeColor = Color.Red;
}
else
this.lblCompareResult.ForeColor = Color.Lime;
}
else if (e.Cmd == 4) //缺陷结果
{
lblDefectResult.Text = "未通过";
lblDefectResultCount.Text = $"总数:{e.Cnt},详细:{e.CompareResultString}";
this.toolTip1.SetToolTip(lblDefectResultCount, lblDefectResultCount.Text);
this.lblDefectResult.Text = (e.CompareResult ? "通过" : "未通过");
if (!e.CompareResult)
{
this.lblDefectResult.ForeColor = Color.Red;
}
else
this.lblDefectResult.ForeColor = Color.Lime;
}
else if (e.Cmd == 5) //加载缺陷小图
{
;
}
else if (e.Cmd == 6) //显示主图
{
if (e.PicIndex == 0)
{
bmp0 = (Bitmap)CamDev.HImageToBitmap(e.Pic).Clone();
picScanner0.Image = bmp0;
picScanner0.Refresh();
}
else
{
bmp1 = (Bitmap)CamDev.HImageToBitmap(e.Pic).Clone();
picScanner1.Image = bmp1;
picScanner1.Refresh();
}
}
else if (e.Cmd == 7) //显示测试时间
{
lblTimeLen.Text = "检测时长: " + e.Time.ToString("0.000") + " 秒";
}
else if (e.Cmd == 8) //显示测试时间
{
lblOutput.Text = "当日产量: " + e.Num.ToString("0") + " 个";
}
else if (e.Cmd == 10) //测试结束
{
this.tsbtnStart.Enabled = true;
this.tsbtnStop.Enabled = false;
this.cbOrderCode.Enabled = true;
this.cbProductCode.Enabled = true;
this.cbProductSN.Enabled = true;
//演示重新开始
Thread.Sleep(1000);
if(SysMgr.Instance.GetYanShiValue())
{
tsbtnStart_Click(null, null);
}
}
else if (e.Cmd == 21) //厚度显示
{
double value = Math.Round(e.Value.Average(), 2);
double valueMax = e.Value.Max();
double valueMin = e.Value.Min();
Color color = (e.Value_up + e.Value_low > 0 && (value > e.Value_up || value < e.Value_low)) ? Color.Red : Color.White;
Color colorMax = (e.Value_up + e.Value_low > 0 && (valueMax > e.Value_up || valueMax < e.Value_low)) ? Color.Red : Color.White;
Color colorMin = (e.Value_up + e.Value_low > 0 && (valueMin > e.Value_up || valueMin < e.Value_low)) ? Color.Red : Color.White;
this.lblHeight.Text = Math.Round(value, 2).ToString();
this.lblHeight.ForeColor = color;
this.lblHeightMax.Text = Math.Round(valueMax, 2).ToString();
this.lblHeightMax.ForeColor = colorMax;
this.lblHeightMin.Text = Math.Round(valueMin, 2).ToString();
this.lblHeightMin.ForeColor = colorMin;
}
else if (e.Cmd == 22) //PT显示
{
double value = Math.Round(e.Value.Average(), 4);
double valueMax = e.Value.Max();
double valueMin = e.Value.Min();
Color color = (e.Value_up + e.Value_low > 0 && (value > e.Value_up || value < e.Value_low)) ? Color.Red : Color.White;
Color colorMax = (e.Value_up + e.Value_low > 0 && (valueMax > e.Value_up || valueMax < e.Value_low)) ? Color.Red : Color.White;
Color colorMin = (e.Value_up + e.Value_low > 0 && (valueMin > e.Value_up || valueMin < e.Value_low)) ? Color.Red : Color.White;
this.lblPT.Text = Math.Round(value, 4).ToString();
this.lblPT.ForeColor = color;
this.lblPTMax.Text = Math.Round(valueMax, 4).ToString();
this.lblPTMax.ForeColor = colorMax;
this.lblPTMin.Text = Math.Round(valueMin, 4).ToString();
this.lblPTMin.ForeColor = colorMin;
}
else if (e.Cmd == 23) //线宽显示
{
double value = Math.Round(e.Value.Average(), 2);
double valueMax = e.Value.Max();
double valueMin = e.Value.Min();
Color color = (e.Value_up + e.Value_low > 0 && (value > e.Value_up || value < e.Value_low)) ? Color.Red : Color.White;
Color colorMax = (e.Value_up + e.Value_low > 0 && (valueMax > e.Value_up || valueMax < e.Value_low)) ? Color.Red : Color.White;
Color colorMin = (e.Value_up + e.Value_low > 0 && (valueMin > e.Value_up || valueMin < e.Value_low)) ? Color.Red : Color.White;
this.lblLineWidth.Text = Math.Round(value, 2).ToString();
this.lblLineWidth.ForeColor = color;
this.lblLineWidthMax.Text = Math.Round(valueMax, 2).ToString();
this.lblLineWidthMax.ForeColor = colorMax;
this.lblLineWidthMin.Text = Math.Round(valueMin, 2).ToString();
this.lblLineWidthMin.ForeColor = colorMin;
}
else if (e.Cmd == 30) //新流程 厚度, 张力, pt, 线宽显示
{
Control[] controls = flpProcessStep.Controls.Find("Step_" + (e.StepIndex +1), true);
//滚动条滚动
//int scrollStep = (this.flpProcessStep.VerticalScroll.Maximum / (flpProcessStep.Controls.Count - 1));
this.flpProcessStep.VerticalScroll.Value = e.StepIndex * controls[0].Height > this.flpProcessStep.VerticalScroll.Maximum? this.flpProcessStep.VerticalScroll.Maximum: e.StepIndex * controls[0].Height;
if (!e.ProcessType)
{
NewStepShow newStepShow = controls[0] as NewStepShow;
if (e.Mesg == "镜头变焦")
{
string str1 = e.Value_ave == 0 ? "开启自动聚焦" : "关闭自动聚焦";
string str2 = e.Value_up == 0 ? "自动变倍" : "手动变倍";
string str3 = e.Value_low == 0 ? "自动Z轴聚焦" : "手动Z轴聚焦";
string ShowData = e.Mesg + $"-{str1}-{str2}-{str3}";
newStepShow.StepString = ShowData;
}
if (e.Mesg == "光源设置")
{
string ShowData = e.Mesg + $":通道号:{e.Value_up},亮度:{e.Value_low}";
newStepShow.StepString = ShowData;
}
else
{
newStepShow.StepMax = e.Value_up;
newStepShow.StepMin = e.Value_low;
newStepShow.StepData = e.Value_ave;
newStepShow.StepMaxMin = e.Value_up - e.Value_low;
if (e.Value != null && e.Value.Count > 0)
{
string ShowData = e.Mesg + $"1:{e.Value[0].ToString($"f{newStepShow.DataLen}")}";
for (int i = 1; i < e.Value.Count; i++)
{
ShowData += $",{e.Mesg}{i + 1}:{e.Value[i].ToString($"f{newStepShow.DataLen}")}";
}
newStepShow.StepString = ShowData;
}
else
newStepShow.StepString = e.Mesg;
}
if (e.ProcessSts == 1)
newStepShow.StepStatus = NewStepShow.StepStsEnum.Testing;
else if (e.ProcessSts == 2)
newStepShow.StepStatus = NewStepShow.StepStsEnum.OK;
else if (e.ProcessSts == 3)
newStepShow.StepStatus = NewStepShow.StepStsEnum.NG;
else if (e.ProcessSts == 0)
newStepShow.StepStatus = NewStepShow.StepStsEnum.Skip;
else if (e.ProcessSts == 4)
newStepShow.StepStatus = NewStepShow.StepStsEnum.Error;
}
else
{
NewStepShowDefect newStepShowDef = controls[0] as NewStepShowDefect;
if (newStepShowDef != null)
{
newStepShowDef.StepString = e.Mesg;
if (e.ProcessSts == 1)
newStepShowDef.StepStatus = NewStepShowDefect.StepStsEnum.Testing;
else if (e.ProcessSts == 2)
newStepShowDef.StepStatus = NewStepShowDefect.StepStsEnum.OK;
else if (e.ProcessSts == 3)
newStepShowDef.StepStatus = NewStepShowDefect.StepStsEnum.NG;
else if (e.ProcessSts == 0)
newStepShowDef.StepStatus = NewStepShowDefect.StepStsEnum.Skip;
else if (e.ProcessSts == 4)
newStepShowDef.StepStatus = NewStepShowDefect.StepStsEnum.Error;
if (e.Value_ave == 0)
{
newStepShowDef.StepSizeData = (int)e.Value_up;
if (e.Value_up > 0)
newStepShowDef.StepSizeSts = NewStepShowDefect.StepResultEnum.NG;
else if (e.Value_up < 0)
newStepShowDef.StepSizeSts = NewStepShowDefect.StepResultEnum.None;
else if (e.Value_up == 0)
newStepShowDef.StepSizeSts = NewStepShowDefect.StepResultEnum.OK;
else
newStepShowDef.StepSizeSts = NewStepShowDefect.StepResultEnum.Error;
}
else
{
if (e.Value_low == 0)
newStepShowDef.StepDefectData = (int)e.Value_low;
else if (e.Value_low > 0)
newStepShowDef.StepDefectData = newStepShowDef.StepDefectData + (int)e.Value_low;
//if (e.Value_low > 0)
// newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.NG;
//else if (e.Value_low < 0)
// newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.None;
//else if ((e.Value_low == 0)&&(e.Value_up == 0))
// newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.OK;
if ((e.Value_up == -1) && (e.Value_low == -1))
newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.Error;
else if (e.Value_up == 1)
newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.Testing;
else if (e.Value_up == 0)
{
newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.Done;
newStepShowDef.StepDefectData = (int)e.Value_low;
}
}
}
}
}
else if (e.Cmd == 31) //忽略流程 厚度, 张力, pt, 线宽显示
{
Control[] controls = flpProcessStep.Controls.Find("Step_" + (e.StepIndex + 1), true);
if (controls != null)
{
if (!e.ProcessType)
{
NewStepShow newStepShow = controls[0] as NewStepShow;
newStepShow.StepMax = 0;
newStepShow.StepMin = 0;
newStepShow.StepData = 0;
string ShowData = e.Mesg;
newStepShow.StepString = ShowData;
if (e.ProcessSts == 4)
newStepShow.StepStatus = NewStepShow.StepStsEnum.Error;
else
newStepShow.StepStatus = NewStepShow.StepStsEnum.Skip;
}
else
{
NewStepShowDefect newStepShowDef = controls[0] as NewStepShowDefect;
newStepShowDef.StepStatus = NewStepShowDefect.StepStsEnum.Skip;
newStepShowDef.StepDefectData = -1;
newStepShowDef.StepDefectSts = NewStepShowDefect.StepResultEnum.None;
newStepShowDef.StepSizeData = -1;
newStepShowDef.StepSizeSts = NewStepShowDefect.StepResultEnum.None;
newStepShowDef.StepString = "未启用或被禁用";
newStepShowDef.StepString = e.Mesg;
}
}
}
else if (e.Cmd == 36) //显示主图
{
if (e.PicIndex == 0)
{
bmp0 = (Bitmap)e.Map.Clone();
picScanner0.Image = bmp0;
picScanner0.Refresh();
}
else
{
bmp1 = (Bitmap)e.Map.Clone();
picScanner1.Image = bmp1;
picScanner1.Refresh();
}
}
Application.DoEvents();
}
catch { }
}
}
void ShowNewStepProcess(List list)
{
flpProcessStep.Controls.Clear();
int index = 0;
int splitWidth = 5;
foreach (StepProcess stepProcess in list)
{
index++;
if (stepProcess.ProcessCode != "SizeAndDefect")
{
NewStepShow newStepShow = new NewStepShow();
int dl = 4;
if(stepProcess.ProcessCode == "PointTest")
{
string tp = JObject.Parse(stepProcess.ProcessParams).Value("TestType");
var tdl = ConfMgr.Instance.SizeItemParamsList.Find(x => x.Name == tp);
if (tdl != null) { dl = tdl.dataLen; }
}
newStepShow.DataLen = dl;
newStepShow.Width = flpProcessStep.Width - splitWidth * 2 - 30;
newStepShow.StepName = stepProcess.ProcessName;
newStepShow.StepIndex = index;
newStepShow.StepMax = 0;
newStepShow.StepMin = 0;
newStepShow.StepData = 0;
newStepShow.StepString = "";
newStepShow.StepStatus = NewStepShow.StepStsEnum.Wait;
newStepShow.Margin = new Padding(splitWidth, splitWidth, 0, 0);
newStepShow.Name = "Step_" + index;
flpProcessStep.Controls.Add(newStepShow);
}
else
{
NewStepShowDefect newStepShowDefect = new NewStepShowDefect();
newStepShowDefect.Width = flpProcessStep.Width - splitWidth * 2 - 30;
newStepShowDefect.StepName = stepProcess.ProcessName;
newStepShowDefect.StepIndex = index;
bool opensize = JObject.Parse(stepProcess.ProcessParams).Value("OpenSize");
newStepShowDefect.StepSizeSts = opensize ? NewStepShowDefect.StepResultEnum.Wait: NewStepShowDefect.StepResultEnum.None;
newStepShowDefect.StepSizeData = -1;
bool opendefect = JObject.Parse(stepProcess.ProcessParams).Value("OpenDefect");
newStepShowDefect.StepDefectSts = opendefect? NewStepShowDefect.StepResultEnum.Wait: NewStepShowDefect.StepResultEnum.None;
newStepShowDefect.StepDefectData = -1;
newStepShowDefect.StepString = "";
newStepShowDefect.StepStatus = NewStepShowDefect.StepStsEnum.Wait;
newStepShowDefect.Margin = new Padding(splitWidth, splitWidth, 0, 0);
newStepShowDefect.Name = "Step_" + index;
flpProcessStep.Controls.Add(newStepShowDefect);
}
}
}
///
/// 缺陷小图多图显示
///
///
///
private void auto_ShowMoreImg(object sender, ImgEventArgs e)
{
ShowImgEvent(e);
}
private delegate void ShowImgEventDelegate(ImgEventArgs e);
private void ShowImgEvent(ImgEventArgs e)
{
if (InvokeRequired)
{
ShowImgEventDelegate smd = new ShowImgEventDelegate(ShowImgEvent);
this.BeginInvoke(smd, e);
}
else
{
//Task tt = new Task(() =>
//{
//lock (AddPicLock)
{
//加载缺陷小图
//纵向显示
int imgWidth = this.pnlBmpList.ClientSize.Width - 50;
int imgHeight = (int)((e.Bitmaps[0].Height * 1.0f / e.Bitmaps[0].Width) * imgWidth + 0.5);
int splitWidth = 20;
int pnlWidth = this.pnlBmpList.ClientSize.Width;
int index = (int)this.gboxDefectList.Tag;
//横向显示
//int imgHeight = this.pnlBmpList.Height - 50;
//int imgWidth = (int)((e.Bitmaps[0].Width * 1.0f / e.Bitmaps[0].Height) * imgHeight + 0.5);
//int splitWidth = 20;
//int pnlWidth = this.pnlBmpList.Height;
//int index = (int)this.gboxDefectList.Tag;
int len = e.Info.Count();
int range = 100;
int uselen = len > 100 ? 100 : len;
for (int x = 0; x < uselen / range + 1; x++)
{
for (int i = 0; i < (x < (uselen / range) ? range : uselen % range); i++)
{
foreach (var item in e.Info[(x * range + i)]) //单个info[x] = {"1":[["92.7542","80.85799","99.54083","86.05363","dk","0.52"]]}
{
//统计缺陷类型
SysMgr.Instance.countDefectClass(item.Value);//[["92.7542","80.85799","99.54083","86.05363","dk","0.52"]]
//
PictureBox picbox = new PictureBox();
picbox.Width = imgWidth;
picbox.Height = imgHeight;
picbox.Image = (Bitmap)e.Bitmaps[(x * range + i)].Clone();
picbox.Name = "imgDefect_" + index;
picbox.Tag = item.Key + "," + e.X + "," + e.Y;
picbox.Click += new EventHandler(defectBmpBox_Click);
picbox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
picbox.BorderStyle = BorderStyle.FixedSingle;
//picbox.Margin = new Padding((pnlWidth - picbox.Height) / 2, splitWidth, 0, 0);
picbox.Margin = new Padding((pnlWidth - picbox.Width) / 2, splitWidth, 0, 0);
picbox.MouseHover += simpleTip_MouseHover;
picbox.Visible = true;
//this.Invoke(new MethodInvoker(() =>
// {
this.pnlBmpList.Controls.Add(picbox);
//this.Refresh();
//this.dgvProcess.Refresh();
//this.lstLog.Refresh();
//this.statusStrip1.Refresh();
// }));
break;
}
//
index++;
//Thread.Sleep(10);
//Application.DoEvents();
}
//Application.DoEvents();
//this.Invoke(new MethodInvoker(() =>
//{
//this.Refresh();
pnlBmpList.VerticalScroll.Value = pnlBmpList.VerticalScroll.Maximum;
//}));
//Thread.Sleep(10);
}
//this.Invoke(new MethodInvoker(() =>
//{
//this.gboxDefectList.Tag = len + (int)this.gboxDefectList.Tag;
this.gboxDefectList.Tag = index;
this.gboxDefectList.Text = $"缺陷图像:{index} 张";
}
//}));
//return 0;
// });
// tt.Start();
// await tt;
}
}
///
/// 尺寸小图多图显示
///
///
///
private void auto_SizeShowMoreImg(object sender, ImgEventArgs e)
{
SizeShowImgEvent(e);
}
private delegate void SizeShowImgEventDelegate(ImgEventArgs e);
private void SizeShowImgEvent(ImgEventArgs e)
{
if (InvokeRequired)
{
SizeShowImgEventDelegate smd = new SizeShowImgEventDelegate(SizeShowImgEvent);
this.BeginInvoke(smd, e);
}
else
{
//Task tt = new Task(() =>
//{
//lock (AddPicLock)
//加载缺陷小图
//纵向显示
int imgWidth = this.pnlSizeBmpList.ClientSize.Width - 50;
int imgHeight = (int)((e.Bitmaps[0].Height * 1.0f / e.Bitmaps[0].Width) * imgWidth + 0.5);
int splitWidth = 20;
int pnlWidth = this.pnlSizeBmpList.ClientSize.Width;
int index = (int)this.gboxSizeDefectList.Tag;
//
PictureBox picbox = new PictureBox();
picbox.Width = imgWidth;
picbox.Height = imgHeight;
picbox.Image = (Bitmap)e.Bitmaps[0].Clone();
picbox.Name = "imgSize_" + index;
picbox.Tag = index + "," + e.X + "," + e.Y;
picbox.Click += new EventHandler(defectBmpBox2_Click);
picbox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
picbox.BorderStyle = BorderStyle.FixedSingle;
//picbox.Margin = new Padding((pnlWidth - picbox.Height) / 2, splitWidth, 0, 0);
picbox.Margin = new Padding((pnlWidth - picbox.Width) / 2, splitWidth, 0, 0);
picbox.MouseHover += simpleTip_MouseHover;
picbox.Visible = true;
this.pnlSizeBmpList.Controls.Add(picbox);
index++;
pnlSizeBmpList.VerticalScroll.Value = pnlSizeBmpList.VerticalScroll.Maximum;
this.gboxSizeDefectList.Tag = index;
this.gboxSizeDefectList.Text = $"尺寸图像:{index} 张";
}
}
#endregion
#region 工具栏
private void tsbtnImpStop_Click(object sender, EventArgs e)
{
SysMgr.Instance.LedPause();
AddTextEvent("急停", "手动急停", WarningEnum.High);
this.tsbtnStart.Enabled = false;
this.tsbtnReset.Enabled = false;
SysMgr.Instance.StatusMgr.GotoWarning( WarningEnum.High, "急停", "手动急停");
SysMgr.Instance.SendStatus();
SysMgr.Instance.EmergencyStop();
}
private void tsbOpenLight_Click(object sender, EventArgs e)
{
if (this.tsbOpenLight.Text == "开灯")
{
SysMgr.Instance.OpenFloodlight(true);
this.tsbOpenLight.Text = "关灯";
}
else
{
SysMgr.Instance.OpenFloodlight(false);
this.tsbOpenLight.Text = "开灯";
}
}
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();
if (SysMgr.Instance.StartRun(this, this.cbOrderCode.Text, (int)this.numDefectCnt.Value, this.cbProductCode.Text, this.cbProductSN.Text))
{
this.tsbtnStop.Enabled = true;
this.tsbtnStart.Enabled = false;
//锁定信息
this.cbOrderCode.Enabled = false;
this.cbProductCode.Enabled = false;
this.cbProductSN.Enabled = false;
//记录开始运行时间
RunStartTime.Restart();
}
}
else //暂停状态开始
{
if (SysMgr.Instance.ReStartRun())
{
this.tsbtnStop.Enabled = true;
this.tsbtnStart.Enabled = false;
}
}
this.Cursor = Cursors.Default;
}
}
private void tsbtnStop_Click(object sender, EventArgs e)
{
AddTextEvent("暂停", "手动暂停");
this.tsbtnStart.Enabled = true;
SysMgr.Instance.StatusMgr.GotoPause();
SysMgr.Instance.SendStatus();
SysMgr.Instance.LedPause();
//this.tsbtnStart.Enabled = true;
}
private void tsbtnReset_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
DialogResult dr = DialogResult.Cancel;
dr = FrmDialog.ShowDialog(this, "确定要复位当前系统?", "警告", true);
if (dr == DialogResult.OK)
{
this.Cursor = Cursors.WaitCursor;
this.tsbtnStart.Enabled = false;
//this.tsbtnStop.Enabled = false;
//Task.Factory.StartNew(() =>
//{
SysMgr.Instance.LedRset(true);
SysMgr.Instance.GotoReadyPosAndIO();
SysMgr.Instance.LedRset(false);
this.tsbtnStart.Enabled = true;
this.tsbtnStop.Enabled = false;
//});
this.Cursor = Cursors.Default;
ResetUI(true);
//AddTextEvent("复位", "复位完成");
}
}
}
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();
}
}
private void tsbGoHome_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
DialogResult dr = DialogResult.Cancel;
dr = FrmDialog.ShowDialog(this, "确定要复位当前系统所有硬件位置?", "警告", true);
if (dr == DialogResult.OK)
{
this.tsbtnStart.Enabled = false;
this.tsbtnReset.Enabled = false;
this.tsbtnStop.Enabled = false;
this.Cursor = Cursors.WaitCursor;
System.Windows.Forms.Application.DoEvents();
//Task.Factory.StartNew(() =>
//{
SysMgr.Instance.LedRset(true);
SysMgr.Instance.AllResetAndGoHome();
SysMgr.Instance.LedRset(false);
this.tsbtnStart.Enabled = true;
this.tsbtnReset.Enabled = true;
this.tsbtnStop.Enabled = false;
//});
this.Cursor = Cursors.Default;
}
}
}
//缺陷+比对与图纸查看
private void tsbtnDefectImage_Click(object sender, EventArgs e)
{
try
{
string gbxBmpPath = "";
Order temp_order = null;
if (SysMgr.Instance.GetDefectDistribution(out gbxBmpPath, out temp_order))
{
//
ToolStripButton btn = sender as ToolStripButton;
DefectImageShowFrm frm = new DefectImageShowFrm(gbxBmpPath , temp_order, string.IsNullOrEmpty(btn.Tag.ToString()) ? 0 : Convert.ToInt32(btn.Tag.ToString()));
frm.Show();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, 0);
}
}
#endregion
#region 小图操作
private void defectBmpBox_Click(object sender, EventArgs e)
{
PictureBox picbox = sender as PictureBox;
if (SysMgr.Instance.IsAuto || SysMgr.Instance.StatusMgr.Status == SystemStsEnum.Auto)//检测中
{
//只查看
AddTextEvent("查看", $"运行中查看缺陷{SysMgr.Instance.IsAuto} - {SysMgr.Instance.StatusMgr.Status}");
ImageShowFrm frm = new ImageShowFrm(this.pnlBmpList.Controls, Convert.ToInt32(picbox.Name.Split(new char[] { '_' })[1]));
frm.ShowDialog(this);
}
else//完成
{
AddTextEvent("查看", $"查看缺陷{ConfMgr.Instance.SysConfigParams.OpenDefectSanp}");
ImageShowFrm frm = new ImageShowFrm(this.pnlBmpList.Controls,
Convert.ToInt32(picbox.Name.Split(new char[] { '_' })[1]), ConfMgr.Instance.SysConfigParams.OpenDefectSanp);
frm.ShowDialog(this);
}
}
private void defectBmpBox2_Click(object sender, EventArgs e)
{
PictureBox picbox = sender as PictureBox;
if (SysMgr.Instance.IsAuto || SysMgr.Instance.StatusMgr.Status == SystemStsEnum.Auto)//检测中
{
//只查看
AddTextEvent("查看", $"运行中查看缺陷{SysMgr.Instance.IsAuto} - {SysMgr.Instance.StatusMgr.Status}");
ImageShowFrm frm = new ImageShowFrm(this.pnlSizeBmpList.Controls, Convert.ToInt32(picbox.Name.Split(new char[] { '_' })[1]));
frm.ShowDialog(this);
}
else//完成
{
AddTextEvent("查看", $"查看缺陷{ConfMgr.Instance.SysConfigParams.OpenDefectSanp}");
ImageShowFrm frm = new ImageShowFrm(this.pnlSizeBmpList.Controls,
Convert.ToInt32(picbox.Name.Split(new char[] { '_' })[1]));
frm.ShowDialog(this);
}
}
private void simpleTip_MouseHover(object sender, EventArgs e)
{
PictureBox pb = sender as PictureBox;
// 创建the ToolTip
ToolTip toolTip1 = new ToolTip();
// 设置显示样式
toolTip1.AutoPopDelay = 5000;//提示信息的可见时间
toolTip1.InitialDelay = 500;//事件触发多久后出现提示
toolTip1.ReshowDelay = 500;//指针从一个控件移向另一个控件时,经过多久才会显示下一个提示框
toolTip1.ShowAlways = true;//是否显示提示框
// 设置伴随的对象.
toolTip1.SetToolTip(pb, pb.Name + "[" +pb.Tag.ToString() + "]");//设置提示按钮和提示内容
}
#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(DisEnableBuzz);
if (sts)
{
this.Invoke(new MethodInvoker(() =>
{
this.tsbtnStart.Enabled = true;
this.tsbtnStop.Enabled = false;
}));
}
int stsno = 0;
stsno = SysMgr.Instance.ButtonIOTrg(DisEnableDoor);
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);
}));
}
else if (stsno == 4) //老流程张力读取
{
TensionResult tensionResult;
if (SysMgr.Instance.TensionGetValue(out tensionResult) >= 0)
{
this.Invoke(new MethodInvoker(() =>
{
this.lblTension.Text = Math.Round(tensionResult.value, 2).ToString();
this.lblTension.ForeColor = tensionResult.color;
this.lblTensionMax.Text = Math.Round(tensionResult.valueMax, 2).ToString();
this.lblTensionMax.ForeColor = tensionResult.colorMax;
this.lblTensionMin.Text = Math.Round(tensionResult.valueMin, 2).ToString();
this.lblTensionMin.ForeColor = tensionResult.colorMin;
}));
}
}
else if (stsno == 5) //新流程张力读取
{
//this.Invoke(new MethodInvoker(() =>
//{
// tsbtnReset_Click(null, null);
//}));
}
//显示实际位置
this.Invoke(new MethodInvoker(() =>
{
tsAxisState.Text = SysMgr.Instance.GetAxisPos();
}));
}
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();
}
this.Invoke(new MethodInvoker(() =>
{
tslbSaveSts.Text = $"保存队列:{SysMgr.Instance.GetSaveQueueCnt()}";
//this.Refresh();
}));
Thread.Sleep(100);
Application.DoEvents();
}
catch (Exception ex){
AddTextEvent("后台", $"出错-{ex.Message}", WarningEnum.Low);
}
}
}
///
/// 信号上升沿下降沿捕获
///
class GetPN
{
bool _P = false;
bool _N = false;
///
/// 判断上升沿
///
///
///
public bool P(bool Value)
{
if (Value && !_P)
{
_P = true;
return true;
}
if (!Value)
_P = false;
return false;
}
///
/// 判断下降沿
///
///
///
public bool N(bool Value)
{
if (!Value && _N)
{
_N = false;
return true;
}
if (Value)
_N = true;
return false;
}
}
#endregion
#region 料号和产品编码选择
private void txtProductCode_DoubleClick(object sender, EventArgs e)
{
try
{
string pdtName = SysMgr.Instance.SelectProduct();
if (!string.IsNullOrWhiteSpace(pdtName))
this.cbProductCode.Text = pdtName;
}
catch { }
}
private void txtProductCode_TextChanged(object sender, EventArgs e)
{
}
private void txtProductSN_DoubleClick(object sender, EventArgs e)
{
InputFrm frm = new InputFrm(null, "请输入网版编码:");
if (frm.ShowDialog() == DialogResult.OK && !string.IsNullOrWhiteSpace(frm.inputData))
{
this.cbProductSN.Text = frm.inputData;
}
else
{
this.cbProductSN.Text = "";
}
}
private string[] pdtlistData;
private string[] snlistData;
private void LoadPdtList(List list)
{
try
{
this.cbProductCode.Items.Clear();
this.pdtlistData = list.ToArray();
cbProductCode.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些
cbProductCode.TextUpdate += cobList_TextUpdate;//重新绑定事件
cbProductCode.KeyDown += CobList_KeyDown;
this.cbProductCode.Text = "";
cbProductCode.Focus();
cbProductCode.SelectAll();
}catch { }
}
private void LoadSNList(List list)
{
this.cbProductSN.Items.Clear();
this.snlistData = list.ToArray();
cbProductSN.Items.AddRange(snlistData);//比使用DataSource速度要快一些
//cbProductSN.TextUpdate += cobList_TextUpdate;//重新绑定事件
cbProductSN.KeyDown += CobList_KeyDown;
this.cbProductSN.Text = "";
cbProductSN.Focus();
cbProductSN.SelectAll();
}
private void CobList_KeyDown(object sender, KeyEventArgs e)
{
try
{
ComboBox ctrl = sender as ComboBox;
if (e.KeyCode == Keys.Enter)
{
if (ctrl.Items.Count == 1)
ctrl.Text = ctrl.Items[0].ToString();
}
}
catch { }
}
private void cobList_TextUpdate(object sender, EventArgs e)
{
try
{
ComboBox ctrl = sender as ComboBox;
ctrl.AutoCompleteMode = AutoCompleteMode.None;
ctrl.AutoCompleteSource = AutoCompleteSource.None;
if (ctrl.Text != null)
{
string str = ctrl.Text; //获取cb_material控件输入内
//清空combobox
ctrl.DataSource = null;
ctrl.Items.Clear();
string[] workOrderFiltered;
if (ctrl.Name == "cbProductCode")
workOrderFiltered = pdtlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写
else
workOrderFiltered = snlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写
ctrl.Items.AddRange(workOrderFiltered);//比使用DataSource速度要快一些
// 不存在符合条件时
//设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
ctrl.SelectedIndex = -1;
//ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
if (workOrderFiltered.Length > 0)
{
if (!ctrl.DroppedDown)
{
ctrl.DroppedDown = true; // 自动弹出下拉框
ctrl.SelectedText = str;
}
}
ctrl.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
}
}
catch { }
}
#endregion
#region 界面变化
private void MainFrm_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;
}
}
private void tsmSysUserMgr_Click(object sender, EventArgs e)
{
}
private void tabPage1_Resize(object sender, EventArgs e)
{
int allWidth = this.tabPage1.Width;
this.flpnlResultData.Width = allWidth;
kanban1.Width = kanban2.Width = kanban3.Width = kanban4.Width = kanban5.Width = kanban6.Width = (flpnlResultData.Width - 30) / 6;
tabControl1.Region = new Region(new RectangleF(this.tabPage1.Left, this.tabPage1.Top, this.tabPage1.Width, this.tabPage1.Height));
}
private void tabPage2_Resize(object sender, EventArgs e)
{
int allWidth = this.tabPage2.Width;
tabControl1.Region = new Region(new RectangleF(this.tabPage2.Left, this.tabPage2.Top, this.tabPage2.Width, this.tabPage2.Height));
}
private void MainFrm_Paint(object sender, PaintEventArgs e)
{
this.tsbtnReset.Visible = ConfMgr.Instance.SysConfigParams.ShowResetBtn;
this.chkBuzzer.Visible = ConfMgr.Instance.SysConfigParams.ShowBuzz;
this.chkDoorSensor.Visible = ConfMgr.Instance.SysConfigParams.ShowDoorAlm;
this.tsbtnDefectImage.Visible = ConfMgr.Instance.SysConfigParams.ShowDistribution;
this.tsbtnSizeImage.Visible = ConfMgr.Instance.SysConfigParams.ShowDistribution;
toolStripSeparator7.Visible = ConfMgr.Instance.SysConfigParams.ShowDistribution;
this.tsbCC.Visible = ConfMgr.Instance.SysConfigParams.ShowSizeBtn;
this.tsbQX.Visible = ConfMgr.Instance.SysConfigParams.ShowDefectBtn;
toolStripSeparator8.Visible = ConfMgr.Instance.SysConfigParams.ShowSizeBtn || ConfMgr.Instance.SysConfigParams.ShowDefectBtn;
}
private void flpProcessStep_SizeChanged(object sender, EventArgs e)
{
int splitWidth = 5;
foreach (Control item in this.flpProcessStep.Controls)
{
item.Width = flpProcessStep.Width - splitWidth * 2 - 30;
}
this.flpProcessStep.Refresh();
this.gpbProcessList.Refresh();
}
private void cbProductSN_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.cbProductSN.Text = "";
this.cbProductSN.Select();
}
#endregion
private void lblCompareResult_Click(object sender, EventArgs e)
{
if (SysMgr.Instance.lstCompareFailZoomImage.Count < 1) return;
PhotoFrm frm = new PhotoFrm(SysMgr.Instance.lstCompareFailZoomImage);
frm.ShowDialog();
}
#region 演示功能
private void tsbtnYanShi_Click(object sender, EventArgs e)
{
if (this.tsbtnYanShi.Text == "演示开启")
{
this.tsbtnYanShi.Text = "演示关闭";
this.tsbtnYanShi.Image = Resources.交互演示动画__1_;
SysMgr.Instance.SetYanShiEnable(false);
}
else
{
this.tsbtnYanShi.Text = "演示开启";
this.tsbtnYanShi.Image = Resources.交互演示动画;
SysMgr.Instance.SetYanShiEnable(true);
}
}
#endregion
}
}