示例#1
0
 private void IndicaEnderecoEmUso(ProgramaBasico _pl, TipoEnderecamentoDispositivo _te)
 {
     _pl.endereco.LimpaIndicacaoEmUso();
     foreach (LinhaCompleta _lc in _pl.linhas)
     {
         _lc.simbolos.AddRange(_lc.saida);
         foreach (SimboloBasico _sb in _lc.simbolos)
         {
             switch (_sb.getCI())
             {
             /// pporque disso aqui
             case CodigosInterpretaveis.CONTATO_NA:
             case CodigosInterpretaveis.CONTATO_NF:
             case CodigosInterpretaveis.BOBINA_SAIDA:
             case CodigosInterpretaveis.TEMPORIZADOR:
             case CodigosInterpretaveis.CONTADOR:
             case CodigosInterpretaveis.RESET:
                 if (_sb.getOperandos(0) != null)
                 {
                     EnderecamentoLadder _el = (EnderecamentoLadder)_sb.getOperandos(0);
                     if (_el.TpEnderecamento == _te)
                     {
                         _el.EmUso = true;
                     }
                 }
                 break;
             }
         }
         _lc.simbolos.RemoveRange(_lc.simbolos.Count - _lc.saida.Count, _lc.saida.Count);
     }
 }
示例#2
0
 /// <summary>
 /// Construtor
 /// </summary>
 /// <param name="_tpE">Tipo da endereco</param>
 /// <param name="_indicePosInicial">Indice identificador do endereco no tipo</param>
 public EnderecamentoLadder(TipoEnderecamentoDispositivo _tpE, int _indice, DispositivoLadder dispositivo)
 {
     this.dispositivo = dispositivo;
     indice           = _indice;
     BitsPorta        = dispositivo.QtdBitsPorta;
     TpEnderecamento  = _tpE;
 }
示例#3
0
        /// <summary>
        /// Aloca e realoca na No objeto de enderecamento do programa atual
        /// uma quantidade especificada do tipo de memoria solicitado
        /// </summary>
        /// <param name="e">Enderecamento do programa</param>
        /// <param name="tp">tipo de memoria a ser realocada</param>
        /// <param name="qtdEnd">Quantidade do tipo desejada</param>
        public int AlocaEnderecamentoMemoria(List <EnderecamentoLadder> _lstE, TipoEnderecamentoDispositivo tp, int qtdEnd)
        {
            /// Atalho para o No de enderecamento
            TreeNode _NoEnderecamento = ArvoreProjeto.Nodes["NoProjeto"].Nodes["NoEnderecamento"];
            String   _txtNoEndereco   = "";

            int _qtdAtual = 1;

            switch (tp)
            {
            case TipoEnderecamentoDispositivo.DIGITAL_MEMORIA:
                _txtNoEndereco = "NoMemoria";
                break;

            case TipoEnderecamentoDispositivo.DIGITAL_MEMORIA_CONTADOR:
                _txtNoEndereco = "NoContadores";
                break;

            case TipoEnderecamentoDispositivo.DIGITAL_MEMORIA_TEMPORIZADOR:
                _txtNoEndereco = "NoTemporizadores";
                break;
            }

            IndicaEnderecoEmUso(this.programa, tp);

            _NoEnderecamento.Nodes[_txtNoEndereco].Nodes.Clear();
            _qtdAtual = _lstE.Count;
            if ((_qtdAtual == 0) || (_qtdAtual < qtdEnd))
            {
                for (int i = _qtdAtual + 1; i <= qtdEnd; i++)
                {
                    _lstE.Add(new EnderecamentoLadder(tp, i, programa.dispositivo));
                }
            }
            else if (_qtdAtual > qtdEnd)
            {
                for (int i = (_qtdAtual - 1); i >= qtdEnd; i--)
                {
                    if (!_lstE[i].EmUso)
                    {
                        _lstE[i] = null;
                        GC.Collect();
                        _lstE.RemoveAt(i);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            foreach (EnderecamentoLadder el in _lstE)
            {
                _NoEnderecamento.Nodes[_txtNoEndereco].Nodes.Add(el.Nome, el.Nome + (el.Apelido == "" ? "" : " - " + el.Apelido));
                _NoEnderecamento.Nodes[_txtNoEndereco].Nodes[el.Nome].Tag = el;
                el.MudouComentario += new MudouComentarioEventHandler(Endereco_MudouComentario);
            }

            return(0);
        }
        public EnderecamentoLadder Find(TipoEnderecamentoDispositivo tpEnderecamento, Int32 indice)
        {
            List <EnderecamentoLadder> _lstGenerica;

            switch (tpEnderecamento)
            {
            case TipoEnderecamentoDispositivo.DIGITAL_MEMORIA:
                _lstGenerica = lstMemoria;
                break;

            case TipoEnderecamentoDispositivo.DIGITAL_MEMORIA_CONTADOR:
                _lstGenerica = lstContador;
                break;

            case TipoEnderecamentoDispositivo.DIGITAL_MEMORIA_TEMPORIZADOR:
                _lstGenerica = lstTemporizador;
                break;

            case TipoEnderecamentoDispositivo.DIGITAL_ENTRADA:
                _lstGenerica = lstIOEntrada;
                break;

            case TipoEnderecamentoDispositivo.DIGITAL_SAIDA:
                _lstGenerica = lstIOSaida;
                break;

            default:
                return(null);
            }

            foreach (EnderecamentoLadder _endCada in _lstGenerica)
            {
                if (_endCada.TpEnderecamento == tpEnderecamento &&
                    _endCada.Indice == indice)
                {
                    return(_endCada);
                }
            }

            return(null);
        }
        /// <summary>
        /// Aloca e realoca na No objeto de enderecamento do programa atual
        /// uma quantidade especificada do tipo de memoria solicitado
        /// </summary>
        /// <param name="e">Enderecamento do programa</param>
        /// <param name="tp">tipo de memoria a ser realocada</param>
        /// <param name="qtdEnd">Quantidade do tipo desejada</param>
        public int AlocaEnderecamentoMemoria(DispositivoLadder dispositivo, List <EnderecamentoLadder> _lstE, TipoEnderecamentoDispositivo tp, int qtdEnd)
        {
            int _qtdAtual = 1;

            _qtdAtual = _lstE.Count;
            if ((_qtdAtual == 0) || (_qtdAtual < qtdEnd))
            {
                for (int i = _qtdAtual + 1; i <= qtdEnd; i++)
                {
                    _lstE.Add(new EnderecamentoLadder(tp, i, dispositivo));
                }
            }
            else if (_qtdAtual > qtdEnd)
            {
                for (int i = (_qtdAtual - 1); i >= qtdEnd; i--)
                {
                    if (!_lstE[i].EmUso)
                    {
                        _lstE[i] = null;
                        GC.Collect();
                        _lstE.RemoveAt(i);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            return(0);
        }