Leitura do Código da Última Exceção

<< Clique para Mostrar o Sumário >>

 

Leitura do Código da Última Exceção

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 por este Driver em registradores internos, que podem ser acessados por meio deste Tag. Além disto, a cada comunicação bem sucedida com determinado equipamento em que nenhuma exceção é retornada, este Driver zera automaticamente o registrador associado.

 

Códigos de Exceção

Os 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 deste 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 deste 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 Modbus. Além destes códigos, alguns fabricantes definem códigos adicionais, específicos dos 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, como por exemplo "1:", "2:", "3:", e assim por diante

Item: "LastExceptionCode"

 

Configuração Numérica

B1: Endereço do dispositivo escravo (Slave Id)

B2: 9999

B3: Não usado, deve ser deixado em 0 (zero)

B4: Não usado, deve ser deixado em 0 (zero)

 

Valores dos Elementos de Bloco retornados:

Elemento 1 (índice 0): Código da exceção retornada pelo equipamento. Para mais informações, consulte o tópico Lista de Exceções Padrão do Protocolo Modbus

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 de um Tag Especial

A 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. O exemplo a seguir está escrito em Elipse Basic (Elipse SCADA).

// Evento OnRead do Tag TagExc
// Obs.: Para este exemplo, considere TagExc
// com leitura e escrita automática habilitadas
 
If TagExc == 0
  Return
EndIf
 
If TagExc == 1
  ... // Trata a exceção 1
ElseIf TagExc == 2
  ... // Trata a exceção 2
Else
  ... // Trata as demais exceções
EndIf
 
TagExc = 0 // Zera o registrador de exceções

 

O exemplo a seguir está escrito em VBScript (E3 ou Elipse Power).

' Evento OnRead do Tag TagExc
' Obs.: Para este exemplo, considere TagExc
' com leitura e escrita automática habilitadas
 
Sub TagExc_OnRead()
  If Value = 0 Then
    Exit Sub
  End If
 
  If Value = 1 Then
    ... ' Trata a exceção 1
  ElseIf Value = 2 Then
    ... ' Trata a exceção 2
  Else
    ... ' Trata as demais exceções
  End If
 
  Value = 0 ' Zera o registrador de exceções
End Sub

 

Já nas operações de escrita por script, em que é 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. O exemplo a seguir está escrito em Elipse Basic (Elipse SCADA).

// Obs: Para este exemplo, considere TagExc
// com leitura e escrita automática habilitadas
// e TagVal com escrita automática desabilitada
 
TagExc = 0 // Zera o registrador de exceções
 
TagVal.WriteEx(10) // Escreve o valor 10
 
If TagExc <> 0
  ... // Trata a exceção
EndIf

 

O exemplo a seguir está escrito em VBScript (E3 ou Elipse Power).

' Obs: Para este exemplo, considere TagExc
' com leitura e escrita automática habilitadas
' e TagVal com escrita automática desabilitada
 
' Zera o registrador de exceções
Application.GetObject("Tags.TagExc").Value = 0
 
' Escreve o valor 10
Application.GetObject("Tags.TagVal").WriteEx(10)
 
If Application.GetObject("Tags.TagExc").Value <> 0 Then
  ... ' Trata a exceção
End If

 

NOTA

Este Tag Especial retorna, além do código da exceção retornado no Elemento 0 (zero), também os parâmetros do Tag cuja comunicação provocou a exceção. Caso estas informações não sejam necessárias, pode-se perfeitamente ler o mesmo registro através de um Tag simples, ou Tag PLC no Elipse SCADA, sem a necessidade de usar Tags Bloco. Neste caso, os procedimentos recomendados permanecem os mesmos.

Esta página foi útil?