.. include:: glb_defs.txt .. |ico| image:: ../shared_img/_cmd/o3.png .. _`Movimentação Indexada Estendida`: Movimentação Indexada Estendida ################################# +--------------------------------------------------------------+ |Movimentação Indexada Estendida | +-------------------+------------------------------------------+ |Caminho |Programa/Editor Ladder/Elementos/Movimento| +-------------------+------------------------------------------+ |Grupo |Movimento | +-------------------+------------------------------------------+ |Tecla de Atalho |Nenhuma | +-------------------+------------------------------------------+ |Parâmetros |4 | +-------------------+------------------------------------------+ |Entradas |1 | +-------------------+------------------------------------------+ |Tamanho do elemento|4 linhas | +-------------------+------------------------------------------+ |Ícone ||ico| | +-------------------+------------------------------------------+ .. only:: hitec +------------------------------------------------------------------------------------------------------------------------+ |:ref:`compatibilidade de firmware` | +-------------------+----------------------------------------------------------------------------------------------------+ |Geração de Firmware| G3, G3S, G3R, disponível na família ZAP-900 GII a partir do firmware versão 1.8.02 | +-------------------+----------------------------------------------------------------------------------------------------+ Símbolo ******** .. image:: _img/_elem/8N.jpg :width: 25 mm Este elemento possibilita a movimentação de um grupo de variáveis (R, M, D ou L) ou constante string (W) da base de dados do controlador, sendo que os endereços origem e destino das variáveis movimentadas podem ser indexadas. O tipo de variável (R, M, D ou L) ou constante string (W) a ser movimentada é especificado no parâmetro P1, os endereços origem e destino das variáveis a serem movimentadas são especificadas ou indexadas pelos parâmetros P2 e P3 respectivamente, e por fim a quantidade de variáveis a ser movimentada é especificada no parâmetro P4. Para inseri-lo no programa deve-se posicionar o cursor na posição desejada, selecionar no menu à esquerda o grupo "Movimento" e clicar no botão |ico|. Considere o exemplo indicado na figura a seguir. No instante T1, antes do elemento de movimentação indexada estendido ser executado, o conteúdo das variáveis é o apresentado na tabela T1. Durante a execução do elemento, é realizada a seguinte seqüência de operações: A. O tipo de variável a ser movimentada é extraído para parâmetro P1. Neste exemplo, P1 = M1, e como o conteúdo de M1 = 2, indica o tipo de variável associada ao código 2, no caso, este código indica variáveis do tipo M. Assim esta operação de movimentação será realizada em variáveis do tipo M. B. O número da memória M inicial origem dos dados a serem transferidos é extraído do parâmetro P2. Neste exemplo, P2 = M2, e como o conteúdo de M2 = 6, indica que a variável origem da movimentação será a variável M6. C. O número da memória M inicial destino dos dados a serem transferidos é extraído do parâmetro P3. Neste exemplo, P3 = M3, e como o conteúdo de M3 =10, indica que a variável destino da movimentação será a variável M10. D. O parâmetro P4 indica a quantidade de variáveis a serem movimentadas. No exemplo, P4 = M4, e como o conteúdo de M4 = 2, indica que serão transferidas 2 memórias M consecutivas, a partia da memória origem (M6) para a memória destino (M10). Sendo assim, no instante T2, após a execução da movimentação, os valores 18 e 19 presentes nas memórias M6 e M7 são transferidos para as memórias M10 e M11, respectivamente, conforme ilustrado na figura abaixo: .. image:: _img/ed_ladder_mov_index_est.jpg :width: 60 mm Movimentação com operandos K ou M *********************************** Os parâmetros P1, P2, P3 e P4 podem ser do tipo constantes inteiras K ou memórias inteiras M. Quando especificada uma constante K para o parâmetro, o elemento de movimentação trata o valor da constante como o valor do parâmetro, caso contrário, se for especificada uma variável M, considera-se o conteúdo da respectiva variável M o valor do parâmetro. E neste último caso, através do conteúdo destes parâmetros do tipo M pode-se indexar as variáveis origem e destino da movimentação de dados. Parâmetros ************ Observações ============= +------------------------------------------------------------------------------------------+ |Descrição dos Parâmetros | +=============+=========+===========+======================================================+ |Parâmetro |Tipo(s) |Valores |Descrição | +-------------+---------+-----------+------------------------------------------------------+ |P1 |K |0..Max(K) |Quando do tipo K, o valor da constante especifica | | | | |o código do tipo de variável (R, M, D ou L) ou | | | | |constante string (W) a ser movimentada. |Z1| | | +---------+-----------+------------------------------------------------------+ | |M |0..Max(M) |Quando do tipo M, o conteúdo desta memória | | | | |especifica o código do tipo de variável (R, M, D ou L)| | | | |ou constante string (W) a ser movimentada. |Z1| | +-------------+---------+-----------+------------------------------------------------------+ |P2 |K |0..Max(K) |Especifica o número inicial da variável origem para a | | | | |movimentação de dados. | | | | |Quando do tipo K, o valor da constante especifica o | | | | |número da variável (R, M, D ou L) ou constante | | | | |string (W) a ser utilizada como origem dos dados | | | | |para a operação de movimentação de dados. | | +---------+-----------+------------------------------------------------------+ | |M |0..Max(M) |Quando do tipo M, o conteúdo desta memória | | | | |especifica o número da variável (R, M, D ou L) ou | | | | |constante string (W) a ser utilizada como origem | | | | |dos dados para a operação de movimentação de dados. | +-------------+---------+-----------+------------------------------------------------------+ |P3 |K |0..Max(K) |Especifica o número inicial da variável destino para | | | | |a movimentação de dados. | | | | |Quando do tipo K, o valor da constante especifica | | | | |o número da variável (R, M, D ou L) ou string (X) | | | | |a ser utilizada como destino dos dados para a | | | | |operação de movimentação de dados. | | +---------+-----------+------------------------------------------------------+ | |M |0..Max(M) |Quando do tipo M, o conteúdo desta memória | | | | |especifica o número da variável (R, M, D ou L) ou | | | | |string (X) a ser utilizada como destino dos dados | | | | |para a operação de movimentação de dados. | +-------------+---------+-----------+------------------------------------------------------+ |P4 |K |0..Max(K) |Especifica a quantidade de dados que serão | | | | |movimentados a partir da variável origem para a | | | | |variável destino. | | | | |Quando do tipo K, o valor da constante especifica | | | | |a quantidade de variáveis (R, M, D ou L) ou | | | | |constante string (W) a serem movimentadas. | | +---------+-----------+------------------------------------------------------+ | |M |0..Max(M) |Quando do tipo M, o conteúdo desta memória | | | | |especifica a quantidade de variáveis (R, M, D ou L) | | | | |ou constante string (W) a serem movimentadas. |Z2| | +-------------+---------+-----------+------------------------------------------------------+ .. only:: hitec or incon .. rst-class:: tbobs ============== ========================================================================================================= |Z1| Os códigos disponíveis para movimentação de variáveis são: \ a. 0 = movimentação de variáveis do tipo R para R. b. 2 = movimentação de variáveis do tipo M para M. c. 4 = movimentação de variáveis do tipo D para D. d. 6 = movimentação de variáveis do tipo L para L, se disponível no controlador utilizado. e. 50 = movimentação de constante string W para string X, se disponível no controlador utilizado. f. 204 = movimentação de variáveis do tipo M para D. g. 402 = movimentação de variáveis do tipo D para M. h. 208 = movimentação de variáveis do tipo M para F. i. 802 = movimentação de variáveis do tipo F para M. \ As opções f,g,h,i estão disponíveis apenas em controladores G3S como por exemplo: \ * P7C à partir do firmware versão 1.3.13 * ZAP91X S à partir do firmware versão 2.3.12 * NEON à partir do firmware versão 1.3.17 |Z2| O sinal (positivo ou negativo) associado a este parâmetro indica a ordem de movimentação dos dados, conforme descrito abaixo: \ a. Quando a quantidade é um valor positivo, a movimentação dos dados ocorre em ordem crescente ou seja, a partir da variável origem, incrementando o número da variável a cada valor movimentado até atingir a quantidade de movimentações especificada. b. Quando a quantidade é um valor negativo, a movimentação dos dados ocorre em ordem decrescente, ou seja, a partir da variável "Origem + Quantidade", decrementando o número da variável a cada valor transferido até atingir a quantidade de movimentações especificada. ============== ========================================================================================================= .. only:: weg .. rst-class:: tbobs ============== ========================================================================================================= |Z1| Os códigos disponíveis para movimentação de variáveis são: \ a. 0 = movimentação de variáveis do tipo R para R. b. 2 = movimentação de variáveis do tipo M para M. c. 4 = movimentação de variáveis do tipo D para D. d. 6 = movimentação de variáveis do tipo L para L, se disponível no controlador utilizado. e. 50 = movimentação de constante string W para string X, se disponível no controlador utilizado. f. 204 = movimentação de variáveis do tipo M para D. g. 402 = movimentação de variáveis do tipo D para M. h. 208 = movimentação de variáveis do tipo M para F. i. 802 = movimentação de variáveis do tipo F para M. j. 1608 = movimentação de variáveis do tipo W ou X para F (litle endian). k. 1609 = movimentação de variáveis do tipo W ou X para F (big endian). \ As opções f,g,h,i estão disponíveis apenas em controladores G3S como por exemplo: \ * P7C à partir do firmware versão 1.3.13 * ZAP91X S à partir do firmware versão 2.3.12 * NEON à partir do firmware versão 1.3.17 |Z2| O sinal (positivo ou negativo) associado a este parâmetro indica a ordem de movimentação dos dados, conforme descrito abaixo: \ a. Quando a quantidade é um valor positivo, a movimentação dos dados ocorre em ordem crescente ou seja, a partir da variável origem, incrementando o número da variável a cada valor movimentado até atingir a quantidade de movimentações especificada. b. Quando a quantidade é um valor negativo, a movimentação dos dados ocorre em ordem decrescente, ou seja, a partir da variável "Origem + Quantidade", decrementando o número da variável a cada valor transferido até atingir a quantidade de movimentações especificada. ============== ========================================================================================================= Entradas ========= +------------------------------------------------------------------------------------+ |Descrição das Entradas | +=======+===========+==========+=====================================================+ |Entrada|Função |Estado |Descrição | +-------+-----------+----------+-----------------------------------------------------+ |A1 |Ativação |Inativo |Com a entrada A1 inativa, a operação não é realizada | | | | |e portanto nenhuma movimentação de dados ocorre. | | | | |Nesta condição, a saída do bloco é desativada. | | | +----------+-----------------------------------------------------+ | | |Ativo |Com a entrada A1 ativa, a operação de movimentação é | | | | |realizada e, caso ocorra sem erros, a saída do | | | | |elemento é mantida ativa. No caso de erro no processo| | | | |de movimentação, a saída é desativada para sinalizar | | | | |a falha. Nesta condição o conteúdo das variáveis | | | | |destino permanecem inalteradas. | +-------+-----------+----------+-----------------------------------------------------+ Saída ====== +-------------------------------------------------------------------------------------------+ |Descrição das Saídas | +=======+=============+=========+===========================================================+ |Saída |Função |Estado |Descrição | +-------+-------------+---------+-----------------------------------------------------------+ |B1 |Energização |Inativo |Se a entrada A1 estiver inativa, indica que a função | | | | |associada não foi executada. Se a entrada A1 estiver | | | | |ativa,indica que houve falha na execução da função e neste | | | | |caso o conteúdo das memórias destino não é alterado. As | | | | |possíveis causas de falha na execução desta função são: | | | | |**Tipo de variável inválida**: o código do tipo de variável| | | | |a ser movimentada é inválido, ou não é suportado pelo | | | | |controlador, por exemplo, se o controlador não possuir | | | | |suporte para variáveis do tipo L(Long). | | | | |**Overflow na movimentação**: a quantidade de dados | | | | |espeecificada na transferência (origem e/ou destino), | | | | |ultrapassa o número de variáveis disponíveis na base | | | | |de dados do controlador. | | | +---------+-----------------------------------------------------------+ | | |Ativo |Indica que a entrada do elemento estava ativa e a | | | | |transferência definida foi realizada com sucesso. | +-------+-------------+---------+-----------------------------------------------------------+ Este bloco MXX incorpora toda a funcionalidade do bloco :ref:`Movimentação Indexada`, com os recursos adicionais que permitem a movimentação de outros tipos de dados além do tipo M. .. tip:: Utilizando este bloco com o parâmetro P4 com valor negativo, é fácil implementar um buffer circular. Considere o seguinte exemplo: Uma aplicação necessita de um buffer de 20 memórias do tipo M que serão alocadas nas posições M100 a M119. A memória M30 contém um novo valor a ser inserido na posição M100 depois que todos os valores forem deslocados de uma posição para a direita. Para deslocar os valores do buffer de uma posição para a direita utilize o elemento de movimentação indexada estendida com os seguintes parâmetros: MXX (P1, P2, P3, P4), com P1 = 2, P2 = 100, P3 = 101 e P4 = -19. Após a execução do bloco acima, o conteúdo do buffer definido será deslocado de uma posição para a direita, perdendo-se o valor da memória M119 e liberando a memória M100 para receber o novo valor disponível na memória M30. .. raw:: pdf PageBreak