protected void ConfirmProgram(short programNumber, SealerBar selectedSealerBar) { Thread.Sleep(500); SendMessage(new InnovacVacuumSealer.DeviceCommandAckMessage() { EventCode = InnovacVacuumSealer.DeviceEvent.SelectProgramConfirm }); Thread.Sleep(500); SelectedProgramNumber = programNumber; SelectedSealerBar = selectedSealerBar; Message message = new ConfirmProgramMessage() { ProgramNumber = programNumber, SelectedSealerBar = selectedSealerBar }; ManualResetEvent waitHandle = new ManualResetEvent(false); Message response = null; AckNakReceived action = delegate(Message msg) { response = msg; waitHandle.Set(); }; try { AckNakEvent += action; for (int i = 0; i < 5; i++) { Thread.Sleep(100); SendMessage(message); if (waitHandle.WaitOne(5000)) { waitHandle.Reset(); if (response != null && response is DeviceEventAckMessage) { Log.Info("ConfirmProgram;ProgramNumber:{0:D};SelectedSealerBar:{1};Success", programNumber, selectedSealerBar.ToString()); return; } } else { Log.Info("ConfirmProgram No Reply!!"); } } // Log.Warn("ConfirmProgram;ProgramNumber:{0:D};SelectedSealerBar:{1};Timeout",programNumber,selectedSealerBar.ToString()); throw new TimeoutException(); } catch (Exception ex) { // Log.Error("ConfirmProgram;ProgramNumber:{0:D};SelectedSealerBar:{1};Exception:{2}",programNumber,selectedSealerBar.ToString(),ex.ToString()); LastException = ex; throw; } finally { AckNakEvent -= action; } }
public void SelectAndConfirmProgram(short programNumber, SealerBar selectedSealerBar) { // Log.Info("SelectProgram;ProgramNumber:{0:D};SelectedSealerBar:{1}",programNumber,selectedSealerBar.ToString()); SelectedProgramNumber = programNumber; SelectedSealerBar = selectedSealerBar; Message message = new SelectProgramMessage() { ProgramNumber = programNumber, SelectedSealerBar = selectedSealerBar }; ManualResetEvent waitHandle = new ManualResetEvent(false); SelectProgramConfirmMessage response = null; SelectProgramConfirmReceived action = delegate(SelectProgramConfirmMessage msg) { response = msg; waitHandle.Set(); }; try { SelectProgramConfirmEvent += action; for (int i = 0; i < 10; i++) { SendMessage(message); // Select program requires long timeout. if (waitHandle.WaitOne(10000)) { waitHandle.Reset(); if (response != null && response.ProgramNumber.Equals(programNumber) && response.SelectedSealerBar.Equals(selectedSealerBar)) { // Log.Info("SelectProgram;ProgramNumber:{0:D};SelectedSealerBar:{1};Success",programNumber,selectedSealerBar.ToString()); // Immediately Confirm Program. Thread.Sleep(100); ConfirmProgram(programNumber, selectedSealerBar); return; } Thread.Sleep(800); } else //no reply { Log.Info("Sealer No Reply program number!!"); } } // Log.Warn("SelectProgram;ProgramNumber:{0:D};SelectedSealerBar:{1};Timeout",programNumber,selectedSealerBar.ToString()); throw new TimeoutException(); } catch (Exception ex) { // Log.Error("SelectProgram;ProgramNumber:{0:D};SelectedSealerBar:{1};Exception:{2}",programNumber,selectedSealerBar.ToString(),ex.ToString()); LastException = ex; throw; } finally { SelectProgramConfirmEvent -= action; } }
public SelectProgramMessage(MessageCode code, byte[] message, out byte[] innerMessage) : base(code) { SelectedSealerBar = (SealerBar)message[0]; ProgramNumber = short.Parse(Encoding.ASCII.GetString(message, 1, 4)); if (message.Length > 5) { byte[] msg = new byte[message.Length - 5]; Array.Copy(message, 5, msg, 0, msg.Length); innerMessage = msg; } else { innerMessage = new byte[] { }; } }
public SealingErrorException(short errorCode, short programNumber, SealerBar selectedSealerBar) { ErrorCode = errorCode; ProgramNumber = programNumber; SelectedSealerBar = selectedSealerBar; }