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); } }
/// <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; }
/// <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); }