Leitura do Código da Última Exceção |
Topo Anterior Próximo |
Conforme já mencionado neste Manual, os Tags Especiais para leitura do código da última exceção são utilizados para ler o último código de exceção enviado por um determinado equipamento escravo. Tais códigos são armazenados automaticamente pelo Driver em registradores internos, que podem ser acessados por meio deste Tag. Além disto, a cada comunicação bem sucedida com determinado equipamento onde nenhuma exceção for retornada, o Driver zera automaticamente o registrador associado.
Códigos de ExceçãoOs códigos de exceção são usados pelo dispositivo escravo (CLP) para informar uma falha ao executar uma determinada função. Os dispositivos ou equipamentos escravos não retornam exceções no caso de falhas de comunicação, situação em que estes simplesmente não respondem. Os códigos de exceção são retornados pelos escravos em situações em que a solicitação do mestre (no caso do Driver) foi recebida com sucesso, porém não pôde ser executada por algum motivo, como por exemplo a tentativa de ler ou escrever em um registrador inexistente. Neste caso, o código de exceção retornado indica o tipo de erro ocorrido, ou seja, o motivo pelo qual a requisição do Driver, embora recebida corretamente, não pôde ser executada. A especificação do protocolo Modbus define nove códigos de exceção. A lista de exceções padrão do protocolo pode ser consultada no tópico Lista de Exceções Padrão do Protocolo. Além destes códigos, alguns fabricantes definem códigos adicionais, específicos de seus equipamentos. Tais códigos devem estar documentados no manual do equipamento. Caso não estejam documentados, deve-se consultar o suporte do fabricante.
Configuração por Strings·Dispositivo: Valor numérico do Id do equipamento (Slave Id) seguido de dois pontos. Exemplo: "1:", "2:", "3:", etc. ·Item: "LastExceptionCode"
Configuração Numérica·B1: Endereço do dispositivo escravo (Slave Id) ·B2: 9999 ·B3: Não usado, deve ser deixado em zero ·B4: Não usado, deve ser deixado em zero
Valores dos Elementos de Bloco retornados: ·Elemento 1 (índice 0): Código da exceção retornada pelo equipamento (veja o tópico Lista de Exceções Padrão do Protocolo) ·Elemento 2 (índice 1): Parâmetro N2/B2 do Tag de Comunicação que gerou a exceção ·Elemento 3 (índice 2): Parâmetro N3/B3 do Tag de Comunicação que gerou a exceção ·Elemento 4 (índice 3): Parâmetro N4/B4 do Tag de Comunicação que gerou a exceção ·Elemento 5 (índice 4): Parâmetro Size do Tag de Comunicação que gerou a exceção ·Elemento 6 (índice 5): Parâmetro Dispositivo do Tag de Comunicação que gerou a exceção ·Elemento 7 (índice 6): Parâmetro Item do Tag de Comunicação que gerou a exceção
Utilização do Tag EspecialA utilização mais comum deste Tag durante o scan normal dos Tags de funções é através de um evento OnRead do Tag de exceção. Neste caso, o script deve antes de tudo rejeitar valores nulos, pois estes indicam o não recebimento de exceções. Em seguida, pode-se tratar a exceção executando os procedimentos adequados, conforme o código recebido. É uma boa prática zerar o registrador de exceção ao sair do script, de forma a indicar que a exceção já foi tratada. Veja o exemplo a seguir, escrito em Elipse Basic (Elipse SCADA): // Evento OnRead do Tag TagExc
// Obs.: Para este exemplo, considere TagExc
A seguir outro exemplo, escrito em VBScript (Elipse E3 e Elipse Power): ' Evento OnRead do Tag TagExc
Já nas operações de escrita por script, em que seja preciso testar o retorno de exceções logo após o envio do comando, deve-se primeiramente zerar o registrador de exceções. Isto evita que uma eventual exceção provocada pelo comando de escrita seja confundida com outra pré-existente. Executa-se então a operação de escrita e testa-se o valor do Tag Especial, que deve retornar 0 (zero) caso nenhuma exceção tenha sido recebida. Caso retorne um valor diferente de 0 (zero), pode-se então tratar apropriadamente a exceção recebida. Veja o exemplo a seguir, escrito em Elipse Basic (Elipse SCADA): // Obs: Para este exemplo, considere TagExc
A seguir outro exemplo, escrito em VBScript (Elipse E3 e Elipse Power): ' Obs: Para este exemplo, considere TagExc
|