From 3f6e94d7de9694378114773ab48d8a61bcc3a01e Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期一, 01 二月 2021 09:22:20 +0800 Subject: [PATCH] 1. 报警生成前后端异步调用 2. 安全光栅方法单线程调用 3. 复位完成时修改界面显示 4. 机台状态拆分执行状态 --- src/Bro.M071.Process/UI/M071_MainForm.cs | 11 +++++ src/Bro.M071.Process/M071Process.cs | 26 +++++++++++-- src/Bro.M071.Process/M071Process_MotionCard.cs | 60 +++++++++++++++++------------ src/Bro.Process/ProcessControl.cs | 7 ++- src/Bro.M071.Process/Properties/AssemblyInfo.cs | 4 +- 5 files changed, 75 insertions(+), 33 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 7165338..7666577 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -48,6 +48,7 @@ public event Action<IShapeElement> OnElementUpdated; public event Action<MachineState> OnMachineStateChanged; public event Action OnFullResetDone; + public event Action OnResetDone; #endregion string _precision = "f3"; @@ -197,6 +198,8 @@ object productionLock = new object(); List<ProductionMeasurement> productionList = new List<ProductionMeasurement>(); + bool _isdoing = false; + [ProcessMethod("", "StartJob", "寮�濮嬫壂鎻�", InvokeType.TestInvoke)] [MethodImpl(MethodImplOptions.Synchronized)] public ProcessResponse StartJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) @@ -207,6 +210,7 @@ } string hint = ""; + //if (MachineState != MachineState.Ready) //{ // hint = "鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�"; @@ -221,6 +225,8 @@ OnCheckHintUpload?.Invoke(hint, true); throw new ProcessException(hint); } + + _isdoing = true; MachineState = MachineState.Running; @@ -317,6 +323,7 @@ }); LogAsync(DateTime.Now, $"{pMeasure.Barcode}娴嬮噺鍔ㄤ綔瀹屾垚", ""); + _isdoing = false; GC.Collect(0, GCCollectionMode.Optimized); @@ -330,8 +337,11 @@ get => isLeftStart; set { - isLeftStart = value; - StartCheck(); + if (IsLeftStart != value) + { + isLeftStart = value; + StartCheck(); + } } } @@ -341,8 +351,11 @@ get => isRightStart; set { - isRightStart = value; - StartCheck(); + if (isRightStart != value) + { + isRightStart = value; + StartCheck(); + } } } @@ -350,6 +363,11 @@ { if (isRightStart && isLeftStart) { + if (_isdoing) + { + OnCheckHintUpload?.Invoke("璁惧杩愯涓�", false); + return; + } StartJob(null, null, null); } } diff --git a/src/Bro.M071.Process/M071Process_MotionCard.cs b/src/Bro.M071.Process/M071Process_MotionCard.cs index 8806106..c49221c 100644 --- a/src/Bro.M071.Process/M071Process_MotionCard.cs +++ b/src/Bro.M071.Process/M071Process_MotionCard.cs @@ -7,6 +7,7 @@ using System.ComponentModel; using System.Drawing.Design; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -34,6 +35,8 @@ Task.Run(() => { + OnMachineStateChanged?.Invoke(machineState); + switch (machineState) { case MachineState.Ready: @@ -123,9 +126,7 @@ default: break; } - }); - - OnMachineStateChanged?.Invoke(machineState); + }); } } @@ -248,7 +249,9 @@ MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice); (invokeDevice as MotionCardBase).ResetAlarm(); + _isdoing = false; RaisedAlarm(""); + OnCheckHintUpload?.Invoke("", false); //if (MachineState != MachineState.Pause) //{ @@ -268,6 +271,7 @@ } LogAsync(DateTime.Now, "鏅�氬浣嶅姩浣滃畬鎴�", ""); + OnResetDone?.Invoke(); return new ProcessResponse(true); } @@ -646,39 +650,43 @@ ManualResetEventSlim _pausedHandle = new ManualResetEventSlim(true); MachineState _machineStateBeforePause = MachineState.Unknown; - private void CheckMachinePauseState() + object _pauseLock = new object(); + private async void CheckMachinePauseState() { - //await Task.Run(() => + await Task.Run(() => { - if (IsMachinePaused) + lock (_pauseLock) { - if (MachineState == MachineState.Ready || MachineState == MachineState.Running) + if (IsMachinePaused) { - _machineStateBeforePause = MachineState; - } - MachineState = MachineState.Pause; - _pausedHandle.Reset(); + if (MachineState == MachineState.Ready || MachineState == MachineState.Running) + { + _machineStateBeforePause = MachineState; + } + MachineState = MachineState.Pause; + _pausedHandle.Reset(); - if (_machineStateBeforePause == MachineState.Running) - { - Pause(); - } - } - else - { - if (MachineState == MachineState.Pause) - { if (_machineStateBeforePause == MachineState.Running) { - Resume(true); + Pause(); } - _pausedHandle.Set(); - RaisedAlarm(""); - MachineState = _machineStateBeforePause; + } + else + { + if (MachineState == MachineState.Pause) + { + if (_machineStateBeforePause == MachineState.Running || _machineStateBeforePause == MachineState.Ready) + { + Resume(true); + } + _pausedHandle.Set(); + RaisedAlarm(""); + MachineState = _machineStateBeforePause; + } } } } - //); + ); } public bool IsMachinePaused @@ -687,6 +695,7 @@ } [ProcessMethod("", "SafetyDoorSignal", "瀹夊叏闂ㄤ俊鍙风洃鎺э紝姝e父ON锛孫FF鏃舵姤璀�", InvokeType.TestInvoke)] + [MethodImpl(MethodImplOptions.Synchronized)] public ProcessResponse SafetyDoorSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) { //if (MachineState != MachineState.Running && MachineState != MachineState.Pause) @@ -706,6 +715,7 @@ } [ProcessMethod("", "SafetyBeamSignal", "瀹夊叏鍏夊箷淇″彿鐩戞帶锛屾甯窸N锛孫FF鏃舵姤璀�", InvokeType.TestInvoke)] + [MethodImpl(MethodImplOptions.Synchronized)] public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) { if (opConfig.InputPara == null || opConfig.InputPara.Count == 0) diff --git a/src/Bro.M071.Process/Properties/AssemblyInfo.cs b/src/Bro.M071.Process/Properties/AssemblyInfo.cs index 974f550..86af5ac 100644 --- a/src/Bro.M071.Process/Properties/AssemblyInfo.cs +++ b/src/Bro.M071.Process/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ //鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊� //閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.3.0")] -[assembly: AssemblyFileVersion("1.0.3.0")] +[assembly: AssemblyVersion("1.0.4.1")] +[assembly: AssemblyFileVersion("1.0.4.1")] diff --git a/src/Bro.M071.Process/UI/M071_MainForm.cs b/src/Bro.M071.Process/UI/M071_MainForm.cs index c92a0ec..1266611 100644 --- a/src/Bro.M071.Process/UI/M071_MainForm.cs +++ b/src/Bro.M071.Process/UI/M071_MainForm.cs @@ -119,6 +119,9 @@ Process_M071.OnFullResetDone -= Process_M071_FullResetDone; Process_M071.OnFullResetDone += Process_M071_FullResetDone; + Process_M071.OnResetDone -= Process_M071_ResetDone; + Process_M071.OnResetDone += Process_M071_ResetDone; + Config.PropertyChanged -= Config_PropertyChanged; Config.PropertyChanged += Config_PropertyChanged; @@ -129,6 +132,14 @@ Process_M071.OnOperatorLogin = OnOperatorLogin; } + private void Process_M071_ResetDone() + { + lblCT.BeginInvoke(new Action(() => + { + lblCT.Text = ""; + })); + } + private void Config_PropertyChanged(object sender, PropertyChangedEventArgs e) { txtBarcode.Enabled = !Config.IsBarcodeManualInputBlocked; diff --git a/src/Bro.Process/ProcessControl.cs b/src/Bro.Process/ProcessControl.cs index 9519754..7e900ab 100644 --- a/src/Bro.Process/ProcessControl.cs +++ b/src/Bro.Process/ProcessControl.cs @@ -732,9 +732,12 @@ OnAlarmUpdate?.BeginInvoke(alarmMsg, null, null); } - public virtual void RaisedAlarm(string alarmMsg) + public async virtual void RaisedAlarm(string alarmMsg) { - OnAlarmUpdate?.Invoke(alarmMsg); + await Task.Run(() => + { + OnAlarmUpdate?.Invoke(alarmMsg); + }); } #endregion -- Gitblit v1.8.0