UNIDADE 3 - Passagem
de dados de Loops por "Túneis"
Ponto 5 - Shift-Registers
- Acesso a dados de iterações anteriores
5 de 7
Acesso a Dados de Ciclos Prévios
Quando programar com ciclos,
necessita de aceder a dados de iterações de ciclos
anteriores. Por exemplo, pode existir um VI que lê a temperatura
e a disponibiliza num gráfico. Se desejar disponibilizar
a média da temperatura, necessita de utilizar dados gerados
em prévias iterações. As duas formas de aceder
a esses dados incluem o shift register e o Feedback
Node.
Shift
Registers
Utilize shift
registers em For Loops e
While Loops para transferir valores
de um ciclo de iteração para o próximo. Shift
registers são semelhantes a variáveis estáticas
em linguagens de programação baseadas em texto.
Um shift registers aparece como
um par de terminais, Figura 1,
opostos verticalmente no limite do ciclo. O terminal do lado direito
contém uma seta direccionada para cima e guarda os dados
aquando da conclusão de uma iteração. O LabVIEW
trasfere os dados ligados ao lado direito do register (registador)
para a próxima iteração. Crie um shift
register clicando o ciclo no limite do lado esquerdo ou
o lado direito e seleccione Add Shift Register
do menu de atalho.
O shift register transfere qualquer
tipo de dados e automaticamente altera o tipo de dados para o
tipo de dados do primeiro objecto ligado ao shift
register. Os dados a ligar aos terminais de cada shift
register têm que ser do mesmo tipo de dados.
Para inicializar o shift register,
ligue qualquer valor externo ao ciclo ao terminal esquerdo. Se
não iniciar o shift register,
o ciclo utiliza o valor escrito no shift
register da última vez que o ciclo foi executado;
se o ciclo nunca foi executado é utilizado o valor por
defeito (conforme o tipo de dados).
Utilize o ciclo com um shift register
não iniciado para executar o VI repetitivamente, para que
cada vez que o VI seja executado, a saída inicial do shift
register é o último valor da execução
prévia. Utilize um shift register
não iniciado para preservar o estado de informações
entre execuções subsequentes de um VI. O último
valor armazenado no shift register
continua no terminal direito depois da execução
do ciclo. Se ligar o terminal direito fora do ciclo, o cabo transfere
o último valor guardado no shift
register.
Pode adicionar mais do que um shift register
a um ciclo. Se tiver múltiplas operações
dentro de um ciclo utilize múltiplos shift
register para armazenar os valores dos dados dos diferentes
processos na estrutura. O diagrama de blocos (Figura
1) utiliza dois shift register
inicializados.
Figura 1
Stacked
Shift Registers (Registo de alterações em pilha)
Para criar um tacked
shift register, clique lado direito o terminal esquerdo
e seleccione Add Element do menu
de atalho. Stacked shift registers
permitem aceder a dados de iterações de ciclos anteriores.
Stacked shift registers recordam
os valores de iterações prévias e levam estes
valores para as próximas iterações.
Stacked shift registers (Figura
2) só podem ocorrer no lado esquerdo do ciclo porque
o terminal direito transmite apenas os dados gerados da iteração
actual para a próxima iteração.
Figura 2
Se adicionar mais de dois elementos
ao terminal esquerdo, os valores das últimas três
iterações são levados para a próxima
iteração; o valor da iteração mais
recente encontra-se guardado no topo do shift
register. O segundo terminal guarda os dados transmitidos
da iteração anterior, o terminal de baixo guarda
os dados da penúltima iteração.
Feedback
Nodes O Feedback
Node, aparece automaticamente no For
Loop ou While Loop se ligar
a saída, função ou grupo de subVIs à
entrada função ou grupo de subVIs de um VI. Tal
como o shift register quando o ciclo
compara uma iteração e envia esse valor à
próxima iteração do ciclo; transfere qualquer
tipo de dados. Utilize o Feedback Node
para evitar cabos compridos desnecessários aos ciclos.
A seta do Feedback Node indica em
que direcção os dados devem avançar ao longo
do cabo.
Pode também seleccionar o Feedback
Node na palete Structures
e colocá-lo dentro do For Loop
ou While Loop. Se colocar o Feedback
Node no cabo antes de ligar o cabo que liga os dados ao
túnel, o Feedback Node passa
cada valor de volta à entrada do VI e depois passa o último
valor par ao túnel. O exercício Accessing Previous
Data VI contém um exemplo desse comportamento.