예제 #1
0
        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;
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
 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[] { };
     }
 }
예제 #4
0
 public SealingErrorException(short errorCode, short programNumber, SealerBar selectedSealerBar)
 {
     ErrorCode         = errorCode;
     ProgramNumber     = programNumber;
     SelectedSealerBar = selectedSealerBar;
 }