From 441af1b1ba6f0bc5e94e678029918f354838e9a5 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期六, 04 七月 2020 18:05:55 +0800
Subject: [PATCH] Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071
---
src/Bro.UI.Config/MenuForms/FrmStatistic.cs | 6
src/Bro.M071.Process/UI/M071_MainForm.cs | 183 ++++++++++++++++++++
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 1
src/Bro.Common.Device/Helper/AspectHelper.cs | 2
src/Bro.M071.Process/M071Process_MotionCard.cs | 37 +++
src/Bro.M071.Process/UI/M071_MainForm.Designer.cs | 65 +++++-
src/Bro.M071.Process/packages.config | 1
src/Bro.Process/ProcessControl.cs | 31 +++
src/Bro.UI.Config/MainFrm.cs | 13 +
src/Bro.UI.Config/MenuForms/FrmTest.cs | 3
src/Bro.M071.Process/M071Process.cs | 139 +++++++++++---
src/Bro.UI.Config/MenuForms/FrmCalib.cs | 3
src/Bro.M071.Process/Bro.M071.Process.csproj | 5
src/Bro.UI.Config/Ctrls/CtrlMethodInvoke.cs | 17 +
src/Bro.M071.Process/M071Models.cs | 4
src/Bro.Common.Model/Interface/IMenuNode.cs | 2
src/Bro.UI.Model.Winform/UI/DockContent/MenuFrmBase.cs | 2
17 files changed, 439 insertions(+), 75 deletions(-)
diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index 117a980..1cd328f 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -156,6 +156,7 @@
[TypeConverter(typeof(CollectionCountConvert))]
[Editor(typeof(IORefrenceItemCollectionEditor), typeof(UITypeEditor))]
public List<IORefrenceItem> PreCheckIOCollection { get; set; } = new List<IORefrenceItem>();
+
[Category("IO鎿嶄綔閰嶇疆")]
[Description("瓒呮椂璁剧疆锛屽崟浣嶏細ms")]
[DisplayName("IO棰勬鏌ヨ秴鏃�")]
diff --git a/src/Bro.Common.Device/Helper/AspectHelper.cs b/src/Bro.Common.Device/Helper/AspectHelper.cs
index 6d9cf36..b864177 100644
--- a/src/Bro.Common.Device/Helper/AspectHelper.cs
+++ b/src/Bro.Common.Device/Helper/AspectHelper.cs
@@ -88,7 +88,7 @@
// new ProcessException(ex);
//}
- args.FlowBehavior = FlowBehavior.ThrowException;
+ args.FlowBehavior = FlowBehavior.Return;
}
}
#endregion
diff --git a/src/Bro.Common.Model/Interface/IMenuNode.cs b/src/Bro.Common.Model/Interface/IMenuNode.cs
index bd434b3..88954b2 100644
--- a/src/Bro.Common.Model/Interface/IMenuNode.cs
+++ b/src/Bro.Common.Model/Interface/IMenuNode.cs
@@ -25,7 +25,7 @@
public interface ILogOutput
{
- Action<LogMsg> OnLogMsgOutput { get; set; }
+ event Action<LogMsg> OnLogMsgOutput;
void LogDisplay(LogMsg msg);
}
}
diff --git a/src/Bro.M071.Process/Bro.M071.Process.csproj b/src/Bro.M071.Process/Bro.M071.Process.csproj
index df07580..cecc833 100644
--- a/src/Bro.M071.Process/Bro.M071.Process.csproj
+++ b/src/Bro.M071.Process/Bro.M071.Process.csproj
@@ -12,6 +12,8 @@
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
+ <NuGetPackageImportStamp>
+ </NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -90,6 +92,9 @@
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
+ <Reference Include="PostSharp, Version=6.2.7.0, Culture=neutral, PublicKeyToken=b13fd38b8f9c99d7, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\PostSharp.Redist.6.2.7\lib\net45\PostSharp.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs
index b00d4d8..0d94bd0 100644
--- a/src/Bro.M071.Process/M071Models.cs
+++ b/src/Bro.M071.Process/M071Models.cs
@@ -209,6 +209,10 @@
public List<IShapeElement> ElementList = new List<IShapeElement>();
+ public DateTime? StartTime = null;
+
+ public DateTime? EndTime = null;
+
public event PropertyChangedEventHandler PropertyChanged;
public void Dispose()
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index f76d19a..12b9601 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -14,6 +14,7 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using static Bro.Common.Helper.EnumHelper;
namespace Bro.M071.Process
{
@@ -36,6 +37,8 @@
public event Action OnMeasureStart;
public event Action OnClearBarcode;
public event Action<IShapeElement> OnElementUpdated;
+ public event Action<MachineState> OnMachineStateChanged;
+ public event Action OnFullResetDone;
#endregion
public override void Open()
@@ -44,15 +47,8 @@
base.Open();
- CheckMachineState();
- }
-
- /// <summary>
- /// 妫�鏌ヨ澶囩姸鎬�
- /// </summary>
- private void CheckMachineState()
- {
- //throw new NotImplementedException();
+ Reset(null, null, null);
+ FullReset(null);
}
private void InitialSetting()
@@ -129,29 +125,23 @@
});
}
- #region InitialHalconTool
- //protected override void InitialHalconTool()
- //{
- // base.InitialHalconTool();
-
- // Config.SnapshotPointCollection.ForEach(u =>
- // {
- // u.GetHalconToolPathList().ForEach(path =>
- // {
- // if (!string.IsNullOrWhiteSpace(path))
- // {
- // string directoryPath = Path.GetDirectoryName(path);
- // string fileName = Path.GetFileNameWithoutExtension(path);
-
- // HDevEngineTool tool = new HDevEngineTool(directoryPath);
- // tool.LoadProcedure(fileName);
-
- // //浣跨敤鈥渱鈥濅綔涓洪棿闅旂
- // _halconToolDict[u.Id + "|" + path] = tool;
- // }
- // });
- // });
- //}
+ #region 娴佺▼涓姏鍑哄紓甯�
+ public override void ExceptionRaisedInMonitor(Exception ex)
+ {
+ if (ex is ProcessException pEx)
+ {
+ if (pEx.Level >= ExceptionLevel.Fatal)
+ {
+ RaisedAlarm(pEx.Message);
+ MachineState = MachineState.Alarm;
+ }
+ }
+ else
+ {
+ RaisedAlarm(ex.Message);
+ MachineState = MachineState.Alarm;
+ }
+ }
#endregion
public string BarCode { get; set; }
@@ -161,12 +151,16 @@
[ProcessMethod("", "StartJob", "寮�濮嬫壂鎻�", InvokeType.TestInvoke)]
public ProcessResponse StartJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
{
+ if (MachineState != MachineState.Ready)
+ throw new ProcessException("鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�", null, ExceptionLevel.Fatal);
+
if (string.IsNullOrWhiteSpace(BarCode))
{
OnClearBarcode?.Invoke();
throw new ProcessException("鏈緭鍏ヤ骇鍝佹潯鐮侊紝璇峰嬁寮�濮嬫祴閲�");
}
+ MachineState = MachineState.Running;
OnMeasureStart?.BeginInvoke(null, null);
var measurements = Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().DeepSerializeClone();
@@ -179,6 +173,7 @@
{
Barcode = BarCode,
Measurements = measurements,
+ StartTime = DateTime.Now,
};
var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode);
@@ -210,14 +205,25 @@
var response = motionDevice.Run(s.MotionOp.OpConfig);
if (!response.Result)
{
- throw new ProcessException($"{device.Name}寮傚父锛寋response.Message}", null, ExceptionLevel.Info);
+ throw new ProcessException($"{device.Name}寮傚父锛寋response.Message}", null, ExceptionLevel.Fatal);
}
CameraBase camera = DeviceCollection.FirstOrDefault(u => u.Id == s.CameraOp.Device) as CameraBase;
if (camera == null)
return;
- HImage hImage = CollectHImage(camera, s.CameraOp.OpConfig, out string imgSetId);
+ string imgSetId = "";
+ HImage hImage = null;
+ try
+ {
+ hImage = CollectHImage(camera, s.CameraOp.OpConfig, out imgSetId);
+ }
+ catch (ProcessException pEx)
+ {
+ pEx.Level = ExceptionLevel.Fatal;
+ throw pEx;
+ }
+
if (string.IsNullOrWhiteSpace(imgSetId))
{
return;
@@ -227,9 +233,64 @@
});
BarCode = "";
+ LogAsync(DateTime.Now, $"{pMeasure.Barcode}娴嬮噺鍔ㄤ綔瀹屾垚", "");
return new ProcessResponse(true);
}
+
+ #region 鍙屾墜鍚姩
+ bool isLeftStart = false;
+ bool IsLeftStart
+ {
+ get => isLeftStart;
+ set
+ {
+ isLeftStart = value;
+ StartCheck();
+ }
+ }
+
+ bool isRightStart = false;
+ bool IsRightStart
+ {
+ get => isRightStart;
+ set
+ {
+ isRightStart = value;
+ StartCheck();
+ }
+ }
+
+ private void StartCheck()
+ {
+ if (isRightStart && isLeftStart)
+ {
+ StartJob(null, null, null);
+ }
+ }
+
+ [ProcessMethod("", "Start_Left", "宸︽墜鍚姩", InvokeType.TestInvoke)]
+ public ProcessResponse Start_Left(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+ {
+ if (opConfig.InputPara != null && opConfig.InputPara.Count > 0)
+ {
+ IsLeftStart = opConfig.InputPara[0] == 1;
+ }
+
+ return new ProcessResponse();
+ }
+
+ [ProcessMethod("", "Start_Right", "鍙虫墜鍚姩", InvokeType.TestInvoke)]
+ public ProcessResponse Start_Right(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+ {
+ if (opConfig.InputPara != null && opConfig.InputPara.Count > 0)
+ {
+ IsRightStart = opConfig.InputPara[0] == 1;
+ }
+
+ return new ProcessResponse();
+ }
+ #endregion
#region 绉佹湁鏂规硶
private void MeasureProduction_PropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -293,6 +354,16 @@
return;
}
+ pMeasure.EndTime = DateTime.Now;
+ bool pResult = pMeasure.Measurements.All(u => u.Spec.MeasureResult == true);
+ OnUpdateResult?.Invoke(DateTime.Now, pResult ? 1 : 0);
+ OnUpdateCT?.Invoke((float)(pMeasure.EndTime.Value - pMeasure.StartTime.Value).TotalSeconds);
+
+ LogAsync(DateTime.Now, $"{pMeasure.Barcode} 妫�娴嬪畬鎴愶紝缁撴灉 {(pResult ? "OK" : "NG")}", "");
+
+ if (MachineState == MachineState.Running)
+ MachineState = MachineState.Ready;
+
//MES杈撳嚭 todo
//Excel鎶ヨ〃杈撳嚭 todo
diff --git a/src/Bro.M071.Process/M071Process_MotionCard.cs b/src/Bro.M071.Process/M071Process_MotionCard.cs
index 514b46d..98ce638 100644
--- a/src/Bro.M071.Process/M071Process_MotionCard.cs
+++ b/src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -16,11 +16,11 @@
{
public partial class M071Process
{
- Timer _resetTimer = null;
+ public Timer ResetTimer = null;
const int FULLRESETTIME = 5;
MachineState machineState = MachineState.Unknown;
- MachineState MachineState
+ public MachineState MachineState
{
get => machineState;
set
@@ -40,6 +40,8 @@
default:
break;
}
+
+ OnMachineStateChanged?.Invoke(machineState);
}
}
@@ -66,21 +68,26 @@
MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice);
- if (_resetTimer == null)
+ RaisedAlarm("");
+ MachineState = MachineState.Ready;
+
+ if (ResetTimer == null)
{
- _resetTimer = new Timer(FullReset, null, -1, -1);
+ ResetTimer = new Timer(FullReset, null, -1, -1);
}
if (opConfig.InputPara.Count > 0)
{
//澶у浣嶄俊鍙�
- _resetTimer.Change(-1, opConfig.InputPara[0] == 1 ? FULLRESETTIME * 1000 : -1);
+ ResetTimer.Change(-1, opConfig.InputPara[0] == 1 ? FULLRESETTIME * 1000 : -1);
}
//if (invokeDevice is MotionCardBase motionCard)
//{
// motionCard.Run(opConfig);
//}
+
+ LogAsync(DateTime.Now, "鏅�氬浣嶅姩浣滃畬鎴�", "");
return new ProcessResponse(true);
}
@@ -116,8 +123,14 @@
// motionCard.Run(opConfig);
//}
- //MotionCardDefaultRun("FullReset", ref opConfig, ref invokeDevice);
+ MotionCardDefaultRun("FullReset", ref opConfig, ref invokeDevice);
+ productionList.ForEach(u => u.Dispose());
+ productionList.Clear();
+
+ OnFullResetDone?.Invoke();
+
+ LogAsync(DateTime.Now, "澶у浣嶅姩浣滃畬鎴�", "");
return new ProcessResponse(true);
}
@@ -135,14 +148,22 @@
[ProcessMethod("", "PauseJob", "鏆傚仠娴佺▼", InvokeType.TestInvoke)]
public ProcessResponse PauseJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
{
- if (_pauseHandle.WaitResult)
+ if (!_pauseHandle.WaitResult)
{
#region 鏉垮崱鏆傚仠鍔ㄤ綔
#endregion
_pauseHandle.WaitHandle.Reset();
}
- else
+
+ _pauseHandle.WaitResult = !_pauseHandle.WaitResult;
+ return new ProcessResponse(_pauseHandle.WaitResult);
+ }
+
+ [ProcessMethod("", "ResumeJob", "缁х画娴佺▼", InvokeType.TestInvoke)]
+ public ProcessResponse ResumeJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+ {
+ if (_pauseHandle.WaitResult)
{
#region 鏉垮崱鎭㈠鍔ㄤ綔
#endregion
diff --git a/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs b/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs
index b83b97d..25f0b07 100644
--- a/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs
+++ b/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs
@@ -45,7 +45,10 @@
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.lvMeasures = new System.Windows.Forms.ListView();
this.propGridKeyIndicator = new System.Windows.Forms.PropertyGrid();
+ this.btnStartMeasure = new System.Windows.Forms.Button();
+ this.btnReset = new System.Windows.Forms.Button();
this.contextMenuStrip1.SuspendLayout();
+ this.plImage.SuspendLayout();
this.tscEditLocation.ContentPanel.SuspendLayout();
this.tscEditLocation.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
@@ -113,7 +116,7 @@
this.lblProductionState.AutoSize = true;
this.lblProductionState.BackColor = System.Drawing.Color.Lime;
this.lblProductionState.Font = new System.Drawing.Font("Tahoma", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World, ((byte)(134)));
- this.lblProductionState.ForeColor = System.Drawing.Color.White;
+ this.lblProductionState.ForeColor = System.Drawing.Color.DarkGreen;
this.lblProductionState.Location = new System.Drawing.Point(405, 13);
this.lblProductionState.Name = "lblProductionState";
this.lblProductionState.Size = new System.Drawing.Size(39, 24);
@@ -125,7 +128,7 @@
this.lblMachineState.AutoSize = true;
this.lblMachineState.BackColor = System.Drawing.Color.Lime;
this.lblMachineState.Font = new System.Drawing.Font("Tahoma", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World, ((byte)(134)));
- this.lblMachineState.ForeColor = System.Drawing.Color.White;
+ this.lblMachineState.ForeColor = System.Drawing.Color.DarkGreen;
this.lblMachineState.Location = new System.Drawing.Point(22, 12);
this.lblMachineState.Name = "lblMachineState";
this.lblMachineState.Size = new System.Drawing.Size(79, 24);
@@ -138,6 +141,7 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.plImage.ContextMenuStrip = this.contextMenuStrip1;
+ this.plImage.Controls.Add(this.tscEditLocation);
this.plImage.Location = new System.Drawing.Point(1, 47);
this.plImage.Name = "plImage";
this.plImage.Size = new System.Drawing.Size(796, 304);
@@ -149,11 +153,11 @@
// tscEditLocation.ContentPanel
//
this.tscEditLocation.ContentPanel.Controls.Add(this.tableLayoutPanel1);
- this.tscEditLocation.ContentPanel.Size = new System.Drawing.Size(209, 326);
+ this.tscEditLocation.ContentPanel.Size = new System.Drawing.Size(209, 279);
this.tscEditLocation.Dock = System.Windows.Forms.DockStyle.Right;
- this.tscEditLocation.Location = new System.Drawing.Point(591, 0);
+ this.tscEditLocation.Location = new System.Drawing.Point(587, 0);
this.tscEditLocation.Name = "tscEditLocation";
- this.tscEditLocation.Size = new System.Drawing.Size(209, 351);
+ this.tscEditLocation.Size = new System.Drawing.Size(209, 304);
this.tscEditLocation.TabIndex = 0;
this.tscEditLocation.Text = "toolStripContainer1";
this.tscEditLocation.Visible = false;
@@ -172,7 +176,7 @@
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
- this.tableLayoutPanel1.Size = new System.Drawing.Size(209, 326);
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(209, 279);
this.tableLayoutPanel1.TabIndex = 0;
//
// btnConfirmEdit
@@ -181,7 +185,7 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.btnConfirmEdit.Font = new System.Drawing.Font("瀹嬩綋", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.btnConfirmEdit.Location = new System.Drawing.Point(3, 293);
+ this.btnConfirmEdit.Location = new System.Drawing.Point(3, 246);
this.btnConfirmEdit.Name = "btnConfirmEdit";
this.btnConfirmEdit.Size = new System.Drawing.Size(98, 30);
this.btnConfirmEdit.TabIndex = 0;
@@ -195,7 +199,7 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.btnCancelEdit.Font = new System.Drawing.Font("瀹嬩綋", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.btnCancelEdit.Location = new System.Drawing.Point(107, 293);
+ this.btnCancelEdit.Location = new System.Drawing.Point(107, 246);
this.btnCancelEdit.Name = "btnCancelEdit";
this.btnCancelEdit.Size = new System.Drawing.Size(99, 30);
this.btnCancelEdit.TabIndex = 0;
@@ -218,8 +222,8 @@
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.propGridKeyIndicator);
- this.splitContainer1.Size = new System.Drawing.Size(203, 284);
- this.splitContainer1.SplitterDistance = 163;
+ this.splitContainer1.Size = new System.Drawing.Size(203, 237);
+ this.splitContainer1.SplitterDistance = 136;
this.splitContainer1.TabIndex = 1;
//
// lvMeasures
@@ -231,7 +235,7 @@
this.lvMeasures.Location = new System.Drawing.Point(0, 0);
this.lvMeasures.MultiSelect = false;
this.lvMeasures.Name = "lvMeasures";
- this.lvMeasures.Size = new System.Drawing.Size(203, 163);
+ this.lvMeasures.Size = new System.Drawing.Size(203, 136);
this.lvMeasures.TabIndex = 0;
this.lvMeasures.UseCompatibleStateImageBehavior = false;
this.lvMeasures.View = System.Windows.Forms.View.List;
@@ -242,26 +246,59 @@
this.propGridKeyIndicator.Dock = System.Windows.Forms.DockStyle.Fill;
this.propGridKeyIndicator.Location = new System.Drawing.Point(0, 0);
this.propGridKeyIndicator.Name = "propGridKeyIndicator";
- this.propGridKeyIndicator.Size = new System.Drawing.Size(203, 117);
+ this.propGridKeyIndicator.Size = new System.Drawing.Size(203, 97);
this.propGridKeyIndicator.TabIndex = 0;
this.propGridKeyIndicator.ToolbarVisible = false;
+ //
+ // btnStartMeasure
+ //
+ this.btnStartMeasure.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStartMeasure.BackColor = System.Drawing.Color.Lime;
+ this.btnStartMeasure.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnStartMeasure.Font = new System.Drawing.Font("瀹嬩綋", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World, ((byte)(134)));
+ this.btnStartMeasure.ForeColor = System.Drawing.Color.DarkGreen;
+ this.btnStartMeasure.Location = new System.Drawing.Point(678, 8);
+ this.btnStartMeasure.Name = "btnStartMeasure";
+ this.btnStartMeasure.Size = new System.Drawing.Size(110, 35);
+ this.btnStartMeasure.TabIndex = 5;
+ this.btnStartMeasure.Text = "寮�濮嬫祴閲�";
+ this.btnStartMeasure.UseVisualStyleBackColor = false;
+ this.btnStartMeasure.Click += new System.EventHandler(this.btnStartMeasure_Click);
+ //
+ // btnReset
+ //
+ this.btnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnReset.BackColor = System.Drawing.Color.Orange;
+ this.btnReset.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnReset.Font = new System.Drawing.Font("瀹嬩綋", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World, ((byte)(134)));
+ this.btnReset.ForeColor = System.Drawing.Color.DarkGreen;
+ this.btnReset.Location = new System.Drawing.Point(531, 8);
+ this.btnReset.Name = "btnReset";
+ this.btnReset.Size = new System.Drawing.Size(141, 35);
+ this.btnReset.TabIndex = 5;
+ this.btnReset.Text = "澶嶄綅锛堥暱鎸�5s澶у浣嶏級";
+ this.btnReset.UseVisualStyleBackColor = false;
+ this.btnReset.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnReset_MouseDown);
+ this.btnReset.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnReset_MouseUp);
//
// M071_MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 351);
+ this.Controls.Add(this.btnReset);
+ this.Controls.Add(this.btnStartMeasure);
this.Controls.Add(this.lblCT);
this.Controls.Add(this.txtBarcode);
this.Controls.Add(this.lblProductionState);
this.Controls.Add(this.lblMachineState);
this.Controls.Add(this.plImage);
- this.Controls.Add(this.tscEditLocation);
this.KeyPreview = true;
this.Name = "M071_MainForm";
this.Text = "M071_MainForm";
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.M071_MainForm_KeyUp);
this.contextMenuStrip1.ResumeLayout(false);
+ this.plImage.ResumeLayout(false);
this.tscEditLocation.ContentPanel.ResumeLayout(false);
this.tscEditLocation.ResumeLayout(false);
this.tscEditLocation.PerformLayout();
@@ -293,5 +330,7 @@
private System.Windows.Forms.Label lblProductionState;
private System.Windows.Forms.TextBox txtBarcode;
private System.Windows.Forms.Label lblCT;
+ private System.Windows.Forms.Button btnStartMeasure;
+ private System.Windows.Forms.Button btnReset;
}
}
\ No newline at end of file
diff --git a/src/Bro.M071.Process/UI/M071_MainForm.cs b/src/Bro.M071.Process/UI/M071_MainForm.cs
index 97904b6..63f429e 100644
--- a/src/Bro.M071.Process/UI/M071_MainForm.cs
+++ b/src/Bro.M071.Process/UI/M071_MainForm.cs
@@ -9,6 +9,7 @@
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using static Bro.Common.Helper.EnumHelper;
namespace Bro.M071.Process.UI
{
@@ -17,6 +18,7 @@
{
Canvas cvImage = new Canvas();
M071Config Config => Process?.IConfig as M071Config;
+ M071Process Process_M071 => Process as M071Process;
public M071_MainForm()
{
@@ -69,8 +71,21 @@
txtBarcode.ReadOnly = Config.IsBarcodeManulInputBlocked;
- (Process as M071Process).OnClearBarcode -= M071_MainForm_OnClearBarcode;
- (Process as M071Process).OnClearBarcode += M071_MainForm_OnClearBarcode;
+ Process_M071.OnClearBarcode -= M071_MainForm_OnClearBarcode;
+ Process_M071.OnClearBarcode += M071_MainForm_OnClearBarcode;
+ Process_M071.OnUpdateResult -= M071_MainForm_UpdateResult;
+ Process_M071.OnUpdateResult += M071_MainForm_UpdateResult;
+ Process_M071.OnUpdateCT -= M071_MainForm_UpdateCT;
+ Process_M071.OnUpdateCT += M071_MainForm_UpdateCT;
+
+ Process_M071.OnMeasureStart -= M071_MainForm_MeasureStart;
+ Process_M071.OnMeasureStart += M071_MainForm_MeasureStart;
+
+ Process_M071.OnMachineStateChanged -= M071_MainForm_MachineStateChanged;
+ Process_M071.OnMachineStateChanged += M071_MainForm_MachineStateChanged;
+
+ Process_M071.OnFullResetDone -= Process_M071_FullResetDone;
+ Process_M071.OnFullResetDone += Process_M071_FullResetDone;
}
#region 鍥剧墖鍖哄彸閿彍鍗�
@@ -157,7 +172,7 @@
private void txtBarcode_TextChanged(object sender, EventArgs e)
{
- (Process as M071Process).BarCode = txtBarcode.Text.Trim();
+ Process_M071.BarCode = txtBarcode.Text.Trim();
}
private void M071_MainForm_OnClearBarcode()
@@ -166,7 +181,169 @@
}
#endregion
+ #region 鏈哄彴鐘舵��
+ private async void M071_MainForm_MachineStateChanged(MachineState state)
+ {
+ lblMachineState.BeginInvoke(new Action(() =>
+ {
+ switch (state)
+ {
+ case MachineState.Alarm:
+ btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Red;
+ btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.White;
+ lblMachineState.Text = "璀︽姤";
+
+ btnStartMeasure.Enabled = false;
+ break;
+ case MachineState.Pause:
+ btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Yellow;
+ btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.Black;
+ lblMachineState.Text = "鏆傚仠";
+
+ //btnStartMeasure.Text = "鏆傚仠娴嬮噺";
+ btnStartMeasure.Enabled = true;
+ break;
+ case MachineState.Ready:
+ btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Lime;
+ btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.White;
+ lblMachineState.Text = "灏辩华";
+
+ btnStartMeasure.Enabled = true;
+ break;
+ case MachineState.Running:
+ btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Lime;
+ btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.DarkGreen;
+ lblMachineState.Text = "杩愯";
+
+ btnStartMeasure.Enabled = true;
+ break;
+ case MachineState.Unknown:
+ btnStartMeasure.BackColor = lblMachineState.BackColor = SystemColors.Control;
+ btnStartMeasure.ForeColor = lblMachineState.ForeColor = SystemColors.ControlText;
+ lblMachineState.Text = "鏈煡";
+ break;
+ }
+ }));
+
+ await Task.Delay(100);
+ }
#endregion
+ #region 浜у搧缁撴灉
+ private async void M071_MainForm_UpdateCT(float ct)
+ {
+ lblCT.BeginInvoke(new Action(() =>
+ {
+ lblCT.Text = ct.ToString("f2") + " 绉�";
+ }));
+ await Task.Delay(100);
+ }
+
+ private async void M071_MainForm_UpdateResult(DateTime arg1, int result)
+ {
+ this.BeginInvoke(new Action(() =>
+ {
+ if (result == 1)
+ {
+ lblProductionState.BackColor = Color.Green;
+ lblProductionState.ForeColor = Color.White;
+ lblProductionState.Text = "OK";
+ }
+ else
+ {
+ lblProductionState.BackColor = Color.Red;
+ lblProductionState.ForeColor = Color.White;
+ lblProductionState.Text = "NG";
+ }
+
+ btnStartMeasure.Text = "寮�濮嬫祴閲�";
+ }));
+ await Task.Delay(100);
+ }
+
+ private async void M071_MainForm_MeasureStart()
+ {
+ this.BeginInvoke(new Action(() =>
+ {
+ lblProductionState.BackColor = SystemColors.Control;
+ lblProductionState.ForeColor = SystemColors.ControlText;
+ lblProductionState.Text = "娴嬭瘯涓�";
+
+ lblCT.Text = "";
+ }));
+ await Task.Delay(100);
+ }
+ #endregion
+
+ #endregion
+
+ private async void btnStartMeasure_Click(object sender, EventArgs e)
+ {
+ btnStartMeasure.Enabled = false;
+ bool isBreak = false;
+
+ if (btnStartMeasure.Text == "寮�濮嬫祴閲�")
+ {
+ await Task.Run(() =>
+ {
+ try
+ {
+ Process_M071.StartJob(null, null, null);
+ }
+ catch (Exception ex)
+ {
+ isBreak = true;
+
+ LogAsync(DateTime.Now, "娴佺▼寮傚父", ex.Message);
+ Process_M071.ExceptionRaisedInMonitor(ex);
+
+ btnStartMeasure.Text = "寮�濮嬫祴閲�";
+
+ }
+ });
+
+ if (!isBreak)
+ btnStartMeasure.Text = "鏆傚仠娴嬮噺";
+ }
+ else if (btnStartMeasure.Text == "缁х画娴嬮噺")
+ {
+ Process_M071.ResumeJob(null, null, null);
+ btnStartMeasure.Text = "鏆傚仠娴嬮噺";
+ }
+ else
+ {
+ Process_M071.PauseJob(null, null, null);
+ btnStartMeasure.Text = "缁х画娴嬮噺";
+ }
+
+ btnStartMeasure.Enabled = true;
+ }
+
+ #region 澶嶄綅鎿嶄綔
+ private async void Process_M071_FullResetDone()
+ {
+ btnStartMeasure.BeginInvoke(new Action(() =>
+ {
+ btnStartMeasure.Enabled = true;
+ btnStartMeasure.Text = "寮�濮嬫祴閲�";
+ }));
+ await Task.Delay(100);
+ }
+
+ private void btnReset_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (Process_M071.MachineState != MachineState.Running)
+ {
+ Process_M071.Reset(null, null, null);
+ }
+
+ Process_M071.ResetTimer.Change(-1, 1000 * 5);
+ }
+
+ private void btnReset_MouseUp(object sender, MouseEventArgs e)
+ {
+ Process_M071.ResetTimer.Change(-1, -1);
+ }
+ #endregion
}
}
diff --git a/src/Bro.M071.Process/packages.config b/src/Bro.M071.Process/packages.config
index a5ede62..2ebb67c 100644
--- a/src/Bro.M071.Process/packages.config
+++ b/src/Bro.M071.Process/packages.config
@@ -3,5 +3,6 @@
<package id="Autofac" version="4.9.4" targetFramework="net452" />
<package id="DockPanelSuite" version="3.0.6" targetFramework="net452" />
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net452" />
+ <package id="PostSharp.Redist" version="6.2.7" targetFramework="net452" />
<package id="WeifenLuo.WinFormsUI.Docking" version="2.1.0" targetFramework="net452" />
</packages>
\ No newline at end of file
diff --git a/src/Bro.Process/ProcessControl.cs b/src/Bro.Process/ProcessControl.cs
index 29d3170..948b3c0 100644
--- a/src/Bro.Process/ProcessControl.cs
+++ b/src/Bro.Process/ProcessControl.cs
@@ -32,8 +32,8 @@
#region AutoFac娉ㄥ唽
GlobalVar.Builder.RegisterInstance(this).As<IProcess>().ExternallyOwned();
GlobalVar.Builder.RegisterInstance(IConfig).As<IProcessConfig>().ExternallyOwned();
- GlobalVar.Builder.RegisterInstance(DeviceCollection).ExternallyOwned();
- GlobalVar.Builder.RegisterInstance(ProcessMethodCollection).ExternallyOwned();
+ GlobalVar.Builder.RegisterInstance(DeviceCollection);
+ GlobalVar.Builder.RegisterInstance(ProcessMethodCollection);
//if (isBuild)
//{
@@ -520,6 +520,9 @@
return;
}
+ if (!ProcessInvokePreCheck())
+ return;
+
IOperationConfig config = monitorSet.OpConfig;
object res = null;
int reTryTimes = config.ReTryTimes;
@@ -578,6 +581,8 @@
}
LogAsync(DateTime.Now, methodCode + "寮傚父淇℃伅", ex.GetExceptionMessage());
+
+ ExceptionRaisedInMonitor(ex);
}
}
@@ -600,6 +605,23 @@
sw.Stop();
LogAsync(DateTime.Now, $"{device.Name}璋冪敤{methodCode}瀹屾垚锛岃�楁椂{sw.ElapsedMilliseconds}ms", "");
TimeRecordCSV(DateTime.Now, device.Name, $"{methodCode}璋冪敤瀹屾垚", (int)sw.ElapsedMilliseconds);
+ }
+
+ /// <summary>
+ /// 娴佺▼鎵ц鐨勯妫�鏌�
+ /// </summary>
+ /// <returns></returns>
+ public virtual bool ProcessInvokePreCheck()
+ {
+ return true;
+ }
+
+ /// <summary>
+ /// 鐩戝惉娴佺▼涓紓甯告姏鍑� 鍦ㄥ叿浣撲笟鍔′腑鍏蜂綋澶勭悊
+ /// </summary>
+ /// <param name="ex">鐩戝惉娴佺▼涓紓甯稿璞�</param>
+ public virtual void ExceptionRaisedInMonitor(Exception ex)
+ {
}
#endregion
@@ -698,6 +720,11 @@
OnAlarmUpdate?.BeginInvoke(alarmMsg, null, null);
}
+
+ public virtual void RaisedAlarm(string alarmMsg)
+ {
+ OnAlarmUpdate?.Invoke(alarmMsg);
+ }
#endregion
#region ILogger
diff --git a/src/Bro.UI.Config/Ctrls/CtrlMethodInvoke.cs b/src/Bro.UI.Config/Ctrls/CtrlMethodInvoke.cs
index 84b159e..382ce1b 100644
--- a/src/Bro.UI.Config/Ctrls/CtrlMethodInvoke.cs
+++ b/src/Bro.UI.Config/Ctrls/CtrlMethodInvoke.cs
@@ -38,7 +38,7 @@
}
#region ILogoutput
- public Action<LogMsg> OnLogMsgOutput { get; set; }
+ public event Action<LogMsg> OnLogMsgOutput;
public void LogDisplay(LogMsg msg)
{
@@ -157,11 +157,18 @@
{
OnLogMsgOutput?.Invoke(new LogMsg(DateTime.Now, $"{_methodCode}璋冪敤寮�濮�", ""));
- ProcessResponse response = _method.Invoke(Process, new object[] { opConfig, _invokeDevice, _sourceDevice }) as ProcessResponse;
-
- if (response != null)
+ try
{
- OnLogMsgOutput?.Invoke(new LogMsg(DateTime.Now, $"{_methodCode}璋冪敤瀹屾垚", $"鍙嶉锛歿JsonConvert.SerializeObject(response)}"));
+ ProcessResponse response = _method.Invoke(Process, new object[] { opConfig, _invokeDevice, _sourceDevice }) as ProcessResponse;
+
+ if (response != null)
+ {
+ OnLogMsgOutput?.Invoke(new LogMsg(DateTime.Now, $"{_methodCode}璋冪敤瀹屾垚", $"鍙嶉锛歿JsonConvert.SerializeObject(response)}"));
+ }
+ }
+ catch (Exception ex)
+ {
+ OnLogMsgOutput?.Invoke(new LogMsg(DateTime.Now, $"{_methodCode}璋冪敤寮傚父", ex.GetExceptionMessage()));
}
});
}
diff --git a/src/Bro.UI.Config/MainFrm.cs b/src/Bro.UI.Config/MainFrm.cs
index e7940f5..f35297d 100644
--- a/src/Bro.UI.Config/MainFrm.cs
+++ b/src/Bro.UI.Config/MainFrm.cs
@@ -90,7 +90,9 @@
private void RegisterEvent(MenuFrmBase dockFrm)
{
dockFrm.OnUploadProcess = DockFrm_OnUploadProcess;
- dockFrm.OnLogMsgOutput = DockFrm_OnLogMsgOutput;
+
+ dockFrm.OnLogMsgOutput -= DockFrm_OnLogMsgOutput;
+ dockFrm.OnLogMsgOutput += DockFrm_OnLogMsgOutput;
//if (dockFrm is FrmDevices)
//{
@@ -167,9 +169,14 @@
});
}
- private void Process_OnAlarmUpdate(string alarmMsg)
+ private async void Process_OnAlarmUpdate(string alarmMsg)
{
- tsslWarning.Text = alarmMsg;
+ this.BeginInvoke(new Action(() =>
+ {
+ tsslWarning.Text = alarmMsg;
+ }));
+
+ await Task.Delay(100);
}
private ToolStripMenuItem GetMatchNode(ToolStripItemCollection items, string parentMenuCode)
diff --git a/src/Bro.UI.Config/MenuForms/FrmCalib.cs b/src/Bro.UI.Config/MenuForms/FrmCalib.cs
index 4241926..6256b4a 100644
--- a/src/Bro.UI.Config/MenuForms/FrmCalib.cs
+++ b/src/Bro.UI.Config/MenuForms/FrmCalib.cs
@@ -16,7 +16,8 @@
ctrlMethodInvoker.Dock = DockStyle.Fill;
plMain.Controls.Add(ctrlMethodInvoker);
- ctrlMethodInvoker.OnLogMsgOutput = OnLogMsgOutput;
+ ctrlMethodInvoker.OnLogMsgOutput -= LogAsync;
+ ctrlMethodInvoker.OnLogMsgOutput += LogAsync;
}
public override void OnProcessUpdated()
diff --git a/src/Bro.UI.Config/MenuForms/FrmStatistic.cs b/src/Bro.UI.Config/MenuForms/FrmStatistic.cs
index ae8680e..080514a 100644
--- a/src/Bro.UI.Config/MenuForms/FrmStatistic.cs
+++ b/src/Bro.UI.Config/MenuForms/FrmStatistic.cs
@@ -359,8 +359,10 @@
Process.OnAlarmUpdate -= Process_OnAlarmUpdate;
Process.OnAlarmUpdate += Process_OnAlarmUpdate;
- Process.OnUpdateResult = UpdateResultOK;
- Process.OnUpdateCT = UpdateCT;
+ Process.OnUpdateResult -= UpdateResultOK;
+ Process.OnUpdateCT -= UpdateCT;
+ Process.OnUpdateResult += UpdateResultOK;
+ Process.OnUpdateCT += UpdateCT;
_availableTimer = new System.Threading.Timer(AvailableTimerCallBack, null, -1, -1);
_idleTimer = new System.Threading.Timer(IdleTimerCallBack, null, -1, -1);
diff --git a/src/Bro.UI.Config/MenuForms/FrmTest.cs b/src/Bro.UI.Config/MenuForms/FrmTest.cs
index 3ae4291..fa2733e 100644
--- a/src/Bro.UI.Config/MenuForms/FrmTest.cs
+++ b/src/Bro.UI.Config/MenuForms/FrmTest.cs
@@ -16,7 +16,8 @@
ctrlMethodInvoker.Dock = DockStyle.Fill;
plMain.Controls.Add(ctrlMethodInvoker);
- ctrlMethodInvoker.OnLogMsgOutput = OnLogMsgOutput;
+ ctrlMethodInvoker.OnLogMsgOutput -= LogAsync;
+ ctrlMethodInvoker.OnLogMsgOutput += LogAsync;
}
public override void OnProcessUpdated()
diff --git a/src/Bro.UI.Model.Winform/UI/DockContent/MenuFrmBase.cs b/src/Bro.UI.Model.Winform/UI/DockContent/MenuFrmBase.cs
index d5fde03..c472541 100644
--- a/src/Bro.UI.Model.Winform/UI/DockContent/MenuFrmBase.cs
+++ b/src/Bro.UI.Model.Winform/UI/DockContent/MenuFrmBase.cs
@@ -10,7 +10,7 @@
public partial class MenuFrmBase : DockContent, IMenuNode, IProcessObserver, ILogOutput
{
public Action<string, IProcess> OnUploadProcess { get; set; }
- public Action<LogMsg> OnLogMsgOutput { get; set; }
+ public event Action<LogMsg> OnLogMsgOutput;
public string Id { get; set; } = Guid.NewGuid().ToString();
private IProcess process = null;
--
Gitblit v1.8.0