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

Driver Modicon Modbus

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çã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 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 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. Veja o exemplo a seguir, 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

 

A seguir outro exemplo, escrito em VBScript (Elipse E3 e 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 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
// 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

 

A seguir outro exemplo, escrito em VBScript (Elipse E3 e 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 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 (Tag PLC no Elipse SCADA), sem necessidade de usar Tags Bloco. Neste caso, os procedimentos recomendados permanecem os mesmos.

 
Esta seção da documentação ajudou você a configurar este Driver?
Sim Não
Comentários (opcional):