Ejemplo n.º 1
0
        public frmSupervisorio()
        {
            InitializeComponent();
            FlagsEscrita = new FlagsEscrita();
            FlagsLeitura = new FlagsLeitura();

            if (File.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "configs.json")))
            {
                Configs = JsonConvert.DeserializeObject <Configs>(File.ReadAllText(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "configs.json")));
            }

            if (!(Configs is null))
            {
                Credentials    = new NetworkCredential(Configs.Username, Configs.Password, Configs.Domain);
                NetworkPath    = Configs.NetworkPath;
                TimeoutLeitura = Configs.TimeoutRead;
            }

            #region Scanner
            _scannerService = new ScannerService(Configs.ScannerSerialPort, FlagsEscrita, FlagsLeitura);
            _scannerService.StartListening(out string statusScanner);

            if (statusScanner != string.Empty)
            {
                //GravarLog(statusScanner);
            }
            #endregion
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Cria uma instancia da classe SerialListener que tenta escutar a porta serial informada com os seguintes parametros:
 ///   BaudRate = 9600
 ///   Parity = None
 ///   DataBits = 8
 ///   StopBits = One
 /// </summary>
 public ScannerService(string portName, FlagsEscrita escrita, FlagsLeitura leitura)
 {
     PortName     = portName;
     BaudRate     = 115200;
     Parity       = Parity.None;
     DataBits     = 8;
     StopBits     = StopBits.One;
     flagsEscrita = escrita;
     flagsLeitura = leitura;
 }
Ejemplo n.º 3
0
        private async void CallCLP()
        {
            foreach (Lote lote in LotesEnfileirados)
            {
                bolEmProducao  = true;
                lote.Status    = Lote.StatusLote.EmProducao;
                LoteEmProducao = lote;
                List <Blank> blanks = lote.Blanks;

                while (bolEmProducao)
                {
                    FindDeviceConnection();
                    SetAutomaticMode();

                    // Envia comando de Leitra de Status
                    byte[] response    = _deviceService.ReadStatus(FlagsEscrita.GetHiFlags(), FlagsEscrita.GetLoFlags());
                    bool   statusFrame = _deviceService.StatusFrameIsOk();

                    TrataResposta(response, statusFrame);

                    // Quando Leitura QR Pendente 0 -> 1
                    if ((FlagsLeitura.UltimoLeituraQrPendente != FlagsLeitura.ImpressaoQrPendente) && FlagsLeitura.ImpressaoQrPendente)
                    {
                        FlagsEscrita.QrLeituraConcluida = false;
                    }

                    // Quando lote finalizado 0 -> 1
                    if ((FlagsLeitura.UltimoLoteFinalizado != FlagsLeitura.LoteFinalizado) && FlagsLeitura.LoteFinalizado)
                    {
                        // Concluir o lote atual
                        Lote loteFinalizando = LotesEnfileirados.Where(l => l.Status == Lote.StatusLote.Finalizando).FirstOrDefault();
                        loteFinalizando.Status  = Lote.StatusLote.Concluido;
                        FlagsEscrita.FinalLote  = false;
                        FlagsEscrita.LoteValido = false;
                    }

                    if (FlagsLeitura.SistemaModoManual)
                    {
                        // Se o sistema estiver em manual mandar comando de modo Auto novamente
                        SetAutomaticMode();
                    }

                    if (!Directory.GetFiles(NetworkPath).Any(file => file.Contains(".png")))
                    {
                        CopiaQrParaPastaLaser(blanks);
                    }

                    if (FilaLotes.Count > 0)
                    {
                        FlagsEscrita.TemProximoLote = true;
                    }
                    else
                    {
                        FlagsEscrita.TemProximoLote = false;
                    }

                    if (blanks.All(b => b.Status == Blank.StatusBlank.Validado || b.Status == Blank.StatusBlank.NaoOk))
                    {
                        bolEmProducao = false;
                        FilaLotes.Dequeue();
                        LoteEmProducao.Status   = Lote.StatusLote.Finalizando;
                        FlagsEscrita.FinalLote  = true;
                        FlagsEscrita.LoteValido = blanks.Any(b => b.Status == Blank.StatusBlank.NaoOk) ? false : true;

                        if (FilaLotes.Count == 0)
                        {
                            //Recarregar nova fila de lotes para produção
                            //LotesEnfileirados.Clear();
                        }
                    }

                    if (Token.IsCancellationRequested)
                    {
                        break;
                    }
                    Token.WaitHandle.WaitOne(1000);
                    await Task.Delay(100);
                }
            }
        }