Tratamento de comandos de escrita com o driver DNP Slave.

O driver DNP Slave suporta o recebimento de comandos SELECT, OPERATE ou DIRECT OPERATE para os seguintes objetos:

Objeto 12 – Variação 1
Objeto 41 – Variações 1, 2, 3 ou 4

Para que os comandos sejam tratados pela aplicação, a opção Command Response Profile deve ser definida como Wait for Application Response. A sequência completa para o tratamento de um comando é a seguinte:

1. O comando SELECT, OPERATE ou DIRECT OPERATE é recebido pelo driver escravo.

2. Um tag ou bloco com N2 = 3, 4 ou 5 deve ser lido e tratado pela aplicação (por exemplo, repassado para outro driver, que vai reenviá-lo para um equipamento).

3. Ao receber a resposta desse comando ao equipamento, escreva de volta no mesmo tag de cujo comando foi lido o status. Se a resposta do comando ao equipamento foi positiva, escreva o mesmo valor de volta; caso contrário, escreva um valor diferente.

4. Se nenhuma escrita for realizada no tag no intervalo de 10 segundos, o próprio driver enviará uma resposta com status=6 (Request Not Accepted. Hardware Problems.)

Para receber uma solicitação de comando, pode-se utilizar um Tag Individual ou um Tag Bloco.

Objeto 12 Variação 1:

Tag Individual: N1 = Não Importa; N2 = 3, 4 ou 5; N3 = 1201; N4 = Índice do Ponto. Quando lido, o valor do Tag conterá o valor do campo CONTROL CODE. Para o uso de SELECT e OPERATE, devem ser criados dois tags; cada um receberá a leitura no momento que a operação correspondente (SELECT ou OPERATE) ocorrer. Para o uso de DIRECT OPERATE (5), só é necessário um único tag.

Tag Bloco: Possui as mesmas configurações acima, porém o bloco poderá ter até seis elementos. A diferença é que a operação (SELECT, OPERATE, DIRECT OPERATE) não importa, só será necessário um único bloco, pois a operação é retornada no Elemento 5.

Objeto 41 Variações 1, 2, 3 ou 4:

Tag Individual: N1 = Não Importa; N2 = 3, 4 ou 5; N3 = 4101, 4102, 4103 ou 4104; N4 = Índice do Ponto. Quando lido, o valor do Tag conterá o valor do campo CONTROL CODE. Para o uso de SELECT e OPERATE devem ser criados dois tags; cada um receberá a leitura no momento que a operação correspondente (SELECT ou OPERATE) ocorrer. Para o uso de DIRECT OPERATE (5), só é necessário um único tag.

Tag Bloco: Possui as mesmas configurações acima, porém o bloco poderá ter até três elementos:
Elemento 0: VALOR
Elemento 1: STATUS
Elemento 2: OPERAÇÃO

Exemplo de Script para tratar a recepção de comandos (objeto 12 Variação 1):

// O Bloco AbreFecha é formado por 5 elementos.
// O Exemplo supõe o envio do comando recebido para um outro driver DNP Mestre

Sub AbreFecha_OnRead()
  Set Digitais = Parent.Parent.Item(“LeituraDigitais”)
  ControlCode = Item(“ControlCode”).Value
  Trip = 1
  Close = 0
  CmdOk = 1

Select Case ControlCode
    Case 65 ‘Pulse On Close
             VComando = Close
   Case 66 ‘Pulse off close
             VComando = Close
   Case 67 ‘Latch On Close
            VComando = Close
   Case 68 ‘Latch Off Close
             Vcomando = Close
   Case 129 ‘Pulse On Trip
             VComando = Trip
   Case 130 ‘Pulse Off Trip
             VComando = Trip
   Case 131 ‘Latch On Trip
             VComando = Trip
   Case 132 ‘Latch Off Trip
             VComando = Trip
   Case Else   ‘Comando invalido / não formatado
              CmdOk = 0
   End Select

If NOT(CmdOk) Then
    WStatus = 7
Else
       IF Digitais.Item(“ESTADODL01”).WriteEx(VComando, , , WStatus) Then
           WStatus = 0 ‘Força valor 0 – Sucesso na escrita
           ‘Status esperados pelo Mestre em caso de erro:
           ‘select case WStatus
           ‘case 1
                     ‘Endtext = “Operate recebido depois do Timeout de Seleção”
           ‘case 2
                      ‘Endtext = “Sem Mensagem de Seleção anterior”
           ‘case 3
                      ‘Endtext = “Erro de Formatação no Comando”
           ‘case 4
                      ‘Endtext = “Operação não suportada para este ponto”
           ‘case 5
                      ‘Endtext = “Fila está cheia ou ponto já está ativo”
           ‘case 6
                      ‘Endtext = “Problemas de Hardware”
           ‘case else
                      ‘Endtext = “Problema não definido”
          ‘end select
       Else
               WStatus = 7
       End If
End If
Item(“Status”).Value = WStatus
Write(EWriteSyncMode)
End Sub

Aplicação exemplo em anexo desenvolvida no Elipse E3 v4.5.245.

Anexos:

CROB

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *