<< Clique para Mostrar o Sumário >>
Comandos no Protocolo DNP Escravo |
Este Driver suporta o recebimento de comandos Select, Operate ou Direct Operate para os objetos 12 Variação 1 e 41 Variações 1, 2, 3 ou 4.
Caso a opção Command Response Profile esteja definida como Wait for Application Response, a sequência completa para tratar um comando é a seguinte:
1.Um comando Select, Operate ou Direct Operate é recebido.
2.Um Tag individual ou Tag Bloco com o parâmetro N2 ou B2 igual a 3 (três), 4 (quatro) ou 5 (cinco) deve ser lido e tratado pela aplicação, como por exemplo repassando para outro Driver reenviá-lo para um equipamento.
3.Ao receber a resposta deste comando ao equipamento, deve-se escrever de volta no mesmo Tag cujo status de comando foi lido. Se a resposta do comando ao equipamento foi positiva, deve-se escrever o mesmo valor de volta. Caso contrário, deve-se escrever um valor diferente.
4.Se nenhuma escrita é realizada no Tag no intervalo de 10 segundos, o Driver envia uma resposta com status igual a 6, ou seja, Request Not Accepted. Hardware Problems.
Para receber uma solicitação de comando destes objetos, pode-se utilizar um Tag Individual ou um Tag Bloco, conforme os objetos a seguir.
Para um Tag individual, O valor do Tag quando lido contém o valor do campo Control Code. Para o uso dos comandos Select e Operate devem ser criados dois Tags, cada um recebendo a leitura no momento em que o comando correspondente ocorrer, Select ou Operate. Para o uso do comando Direct Operate (5) só é necessário um único Tag com os seguintes parâmetros:
•N1: Não usado
•N2: 3, 4 ou 5
•N3: 1201 ou 41XX
•N4: Índice do ponto
Para um Tag Bloco, use as mesmas configurações anteriores, porém este Tag Bloco pode ter até seis Elementos. A diferença é que independente do comando, Select, Operate ou Direct Operate, só é necessário um único Tag Bloco com os Elementos a seguir, pois a operação é retornada no Elemento 5 (cinco).
•Elemento 0: Control Code
•Elemento 1: Count
•Elemento 2: On Time
•Elemento 3: Off Time
•Elemento 4: Status
•Elemento 5: Comando (3: Select, 4: Operate ou 5: Direct Operate)
Para um Tag individual, o valor do Tag quando lido contém o valor do campo Control Code. Para o uso dos comando Select e Operate devem ser criados dois Tags, cada um recebendo a leitura no momento em que o comando correspondente ocorrer, Select ou Operate. Para o uso do comando Direct Operate (5) só é necessário um único Tag com os seguintes parâmetros:
•N1: Não usado
•N2: 5
•N3: 1201 ou 41XX
•N4: Índice do ponto
Para um Tag Bloco, use as mesmas configurações anteriores, porém este Tag Bloco pode ter até três Elementos:
•Elemento 0: Valor
•Elemento 1: Status
•Elemento 2: Comando
O exemplo a seguir trata a recepção de comandos em um Objeto 12 Variação 1.
// O Tag 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 inválido
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
'Status esperados pelo Mestre em caso de erro
'Select Case WStatus
' Case 1
' Endtext = "Operate recebido depois do time-out 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