Q4GA1_SIDECC_R

Este bloco é responsavel pelo processo de conexão no servidor SIDECC_R e transmissão de valores de vazão. Utiliza o bloco SIDECC_R para formatar e enviat as informações para o servidor.

O Bloco controla o estado do modem recebendo do módulo de gerencia do modem Q4GA1_CONTROLLER o status de CONNECTED e ON_CONFIG. Através da saída CONN_CMD o módulo notifica ao modem para ativar ou desativar a conexão corrente.

Quando a entrada SW_URL estiver ativa, o módulo desconecta o modem e reprograma o mesmo com a URL e porta do SIDECC_R. Em seguida reconecta o modem para envio dos dados. Quando a entrada SW_URL estiver inativa o módulo considera que o modem está configurado com a URL do servidor SIDECC_R e conecta no mesmo.

Uma vez conectado esta condição e notificada pela saída READY e se ocorreu com sucesso a aplicação pode enviar os dados desejados para o servidor através da entrada PUBLISH. Cada trasição para ativo deste entrada irá enviar para o servidor o valor da vazão e timestamp espeficados nos parâmetros FLOW e TS.

Quando terminado o processo através da entrada START o bloco desconecta o modem, se a entrada SW_URL estiver ativa o bloco recarrega os parâmetros originais configurados no modem e termina o processo sinalizando para a aplicação desativando a saída READY.

Portanto, se necessário, cabe ao usuário, reabrir a conexão do modem (através da entrada CONN_ON do módulo de gerência do modem Q4GA1_CONTROLLER).

Para operação correta, o canal de comunicação utilizado para acesso ao servidor do SIDECC-R deve ser previamente configurado para operação com protocolo ASCII, sem SOF, EOF com recurso de ponto a ponto estendido desabilitado.

Importante

O tamanho da cache do canal de comunicação utilizado para acesso ao servidor do SIDECC-R deve ser de no mínimo 700 bytes.

Bloco

                Q4GA1_SIDECC_R
           +-----------------------+
  BOOL ----|START             READY|---- BOOL
           |                       |
  BOOL ----|PUBLISH              EV|---- BOOL
           |                       |
  BOOL ----|SW_URL           RESULT|---- INT
           |                       |
  BOOL ----|CONNECTED      CONN_CMD|---- USINT
           |                       |
  BOOL ----|ON_CONFIG              |
           |                       |
  REAL ----|FLOW                   |
           |                       |
    DT ----|TS                     |
           |                       |
STRING ----|USER ----------------- |----
           |                       |
STRING ----|METER ---------------- |----
           |                       |
STRING ----|KEY ------------------ |----
           |                       |
STRING ----|RESTORE_URL ---------- |----
           |                       |
STRING ----|RESTORE_PORT --------- |----
           +-----------------------+

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

START

Entrada

BOOL

FALSE

Ativa o processo de transmissão de dados para o SIDEC-R

PUBLISH

Entrada

BOOL

FALSE

Publica no servidor SIDECC-R o dado especificado

SW_URL

Entrada

BOOL

Reprograma URL do servidor no MODEM na inicializacao do bloco

CONNECTED

Entrada

BOOL

Sinal CONNECTED do gerenciador do módulo de modem Q4G4A1

ON_CONFIG

Entrada

BOOL

Sinal ON_CONFIG do gerenciador do módulo de modem Q4G4A1

FLOW

Entrada

REAL

Vazao instantanea (m3/s ou l/s)

TS

Entrada

DT

Timestamp do valor a ser transmitido

USER

Entrada/Saída

STRING

Nome do usuário cadastrado no SIDECC-R

METER

Entrada/Saída

STRING

Identificação do medidor cadastrado no SIDECC-R

KEY

Entrada/Saída

STRING

Chave de acesso obtida no cadastro no SIDECC-R

RESTORE_URL

Entrada/Saída

STRING

URL/IP a ser reprogramado no retorno (provisório)

RESTORE_PORT

Entrada/Saída

STRING

Porta a ser reprogramada no retorno (provisório)

READY

Saída

BOOL

Pronto para publicar os dados

EV

Saída

BOOL

Notifica o fim de um processo de publicação

RESULT

Saída

INT

Código de retorno da inicializacao ou do ultimo processo de publicação

CONN_CMD

Saída

USINT

Commando de conexão do MODEM (0: Idle, 1: Connecta, 2: Desconecta)

START

Esta entrada é ativada na transição de subida. Quando ativada inicia o processo de configuração do modem se necessário e em seguida abre conexão com o servidor SIDECC-R. Concluído este processo ativa a saída READY, gera um pulso na saída EV indica o resultado do processo na saída RESULT.

Nota

Se o processo de inicialização demorar mais que 30 segundos a saída READY será ativada reportando erro de timeout HILS.GL_CMD_TMO o bloco se manterá inativo até uma nova transição da entrada START.

PUBLISH

Quando ativado inicia o processo publicação do dado corrente no servidor SIDECC-R. Uma vea ativada a entrada, o processo e iniciado e uma vez concluido a saída EV irá gerar um pulso reportanto esta condição. Neste instante, o resultado do processo pode ser obtido na saída RESULT.

Se a conexão com o servidor cair durante este processo, será gerado um pulso na saída EV com o parâmetro RESULT igual a HILS.CO_CONEX_FAIL. Neste caso o bloco deverá ser reativado pulsando a entrada START.

Importante

Esta entrada só deve ser ativada após as saída READY estar ativa e o valor de result da incialização for zero indicando sucesso na abertura de conexão do modem com o servidor SIDECC-R.

SW_URL

Indica para o módulo se o modem deve ser reconfigurado para acesso ao servidor SIDECC-R. Quando ativo o bloco inicialmente reconfigura a URL e porta de acesso do modem para o servidor SIDEC-R.

Importante

Não altere o valor desta entrada enquanto a entrada START estiver ativada.

CONNECTED

Esta entrada deverá reportar o estado da saída CONNECTED do gerenciador do :ref Q4G4A1_CONTROLLER.

ON_CONFIG

Esta entrada deverá reportar o estado da saída ON_CONFIG do gerenciador do :ref Q4G4A1_CONTROLLER.

FLOW

Esta entrada é repassada para o bloco SIDECC_R. Para mais informaçãoes consulte FLOW.

TS

Esta entrada é repassada para o bloco SIDECC_R. Para mais informaçãoes consulte SIDECC_R.

USER

Esta entrada é repassada para o bloco SIDECC_R. Para mais informaçãoes consulte USER.

METER

Esta entrada é repassada para o bloco SIDECC_R. Para mais informaçãoes consulte METER.

KEY

Esta entrada é repassada para o bloco SIDECC_R. Para mais informaçãoes consulte KEY.

CONN_CMD

Esta saída reporta para o modem se o mesmo deve ser conectado ou desconectado de acordo com o código definido na tabela a seguir:

Código

Descrição

0

Sem açao sobre o módulo de modem (mantém o modem no estao corrente)

1

Ativa conexão do módulo de modem

2

Ativa a desconexão do módulo do modem.

EV

Esta saída irá gerar um pulso notificando a conclusão de um processo do módulo. Inicialmente após a ativação do bloco pela entrada START, esta saída irá notificar um fim do processo de inicialização do bloco. Posteriormente, após a ativação da entrada PUBLISH esta saída será ativada para notificar o resultado de um processo de publicação de dados no servidor SIDECC-R Sempre que a saida estiver ativa o resultado do processo pode ser obtido na saída RESULT.

Quando a entrada START for desativada, esta saída se manterá inativa.

RESULT

Esta saída retorna o resultado do processamento do bloco notificado pela saída EV. Quando o valor retornado for HILS.SUCCESS (0) o processo foi realizado com sucesso. Quando o valor retornado for maior que zero indica que ocorreu alguma falha no processamento para acessar o servidor.

Para mais informações sobre os códigos de retorno consulte RET_CODE - Códigos de retorno do firmware G5.

Quando o valor retornado for menor que zero indica uma falha na detectada pelo servidor SIDECC-R.

Para mais informações sobre estas falhas consulte SIDECC_RESP. Note qua o código de falha é positivo.

SIDECC_RESULT

Esta saída retorna o resultado da saída SIDECC_RESP do bloco de função SIDECC_R. Se for detectada alguma falha no processamento do bloco antes do acesso ao servidor SIDECC-R este parâmetro irá retornar o valor -1. Neste caso a saída RESULT irá apresentar o código de erro associado a falha. Se o valor de RESULT for HILS.SUCCESS (0) esta saída irá indicar o resultado do processamento efetuado pelo servidor SIDECC-R. Para mais informaçãoes consulte SIDECC_RESP.

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

START

Local

BOOL

FALSE

Flag de ativação do timer de publicação

TIME_TO_PUBLISH

Local

BOOL

FALSE

Flag para ativar o processo de publicação no servidor

PUB_ON_SERVER

Local

BOOL

FALSE

Flag para ativar o envio da vazao para o servidor

PUBLISH_COUNT

Local

USINT

10

Nro de dados a serem transferidos para o servidor

PUBLISH_STATE

Local

USINT

0

Estado corrente de publicação no servidor SIDECC

CUR_PUB_INX

Local

USINT

0

Indice do dado a ser enviado para o servidor SIDEC

MODEM_ON

Local

BOOL

FALSE

Entrada para ligar conexão do modem

MODEM_OFF

Local

BOOL

FALSE

Entrada para desligar conexão do modem

MODEM_RETCODE

Local

INT

0

Ultima falha no módulo de modem

MODEM_ERR_COUNT

Local

INT

0

Contador de falha do módulo de modem

SIDEC_MIN_SAMPLE

Local

USINT

10

Intervalo de tempo entre aquisições

SIDECC_RETCODE

Local

INT

0

Codigo de retorno da ultima falha do servidor SIDECC

SIDECC_ERR_COUNT

Local

INT

0

Contador de falhas na resposta do servidor SIDECC

TS_VEC

Local

DT

[0..9]

FLOW_VEC

Local

REAL

[0..9]

0.0

TS

Local

DT

DT#2024-03-30-00:00:00.00

Timestamp associado a vazão

FLOW

Local

REAL

100.123

Vazão a ser publicada

METER

Local

STRING

‘01’

Medidor asoociado a conta SIDECC

USER

Local

STRING

‘400943’

Usuário associado a conta SIDECC

KEY

Local

STRING

‘Ii1uU6cC9Oo4Rr6’

Chave de acesso Ao SIDECC

HITEL_IP

Local

STRING

‘54.227.237.88’

Endereço do portal de telementria HI

HITEL_PORT

Local

STRING

‘16795’

Porta de acesso MODBUS V0

MODEM

Local

HILS.Q4GA1_CONTROLLER

Gerenciador de conexão com o MODEM

MODEM_SIDEC

Local

HILS.Q4GA1_SIDECC_R

Bloco de acesso ao SIDEC via MODEM

SID_TIMER

Local

HILS.SIDECC_TIMER

Bloco de temporização para publicação no SIDECC

Clique aqui para baixar a tabela de variáveis

Código ST

// Identifica o momento de registrar um valor de vazão no servidor
SID_TIMER(  // SIDECC_TIMER
  START    := START,  // [BOOL] Ativa o bloco
  UTC_TIME := HILS.GET_UTC_SYSTIME(),  // [DT] Hora corrente em UTC
  INTERVAL := SIDEC_MIN_SAMPLE   // [USINT] Intervalo de tempo em minutos entre registros
  );

IF SID_TIMER.EV THEN
  // Guarda em um vetor os valores para publicação
  TS_VEC[CUR_PUB_INX]   := SID_TIMER.OUT_TIME;
  FLOW_VEC[CUR_PUB_INX] := FLOW;

  // Simula um novo valor de vazão
  FLOW := FLOW + 1.0;

  CUR_PUB_INX           := CUR_PUB_INX + 1;
  IF CUR_PUB_INX = PUBLISH_COUNT THEN
    // Ativa o processo de pulicação de todos os dados salvos
    CUR_PUB_INX     := 0;
    TIME_TO_PUBLISH := TRUE;
  END_IF;
END_IF;

// Se dado em processo de publicação libera o modem para ser controlado
// pelo bloco de função do SIDECC-R
IF TIME_TO_PUBLISH OR MODEM_SIDEC.READY THEN
  MODEM_ON  := (MODEM_SIDEC.CONN_CMD = 1);
  MODEM_OFF := (MODEM_SIDEC.CONN_CMD = 2);
END_IF;

// Gerencia de acesso ao módulo do modem
MODEM(  // Q4GA1_CONTROLLER
  CONN_ON  := MODEM_ON, // [BOOL] Habilita CONEXAO
  CONN_OFF := MODEM_OFF // [BOOL] Habilita CONFIGURACAO
  );

IF (MODEM.EV) THEN
  IF (MODEM.RESULT <> HILS.SUCCESS) THEN
    //(* ... *) Falha identificada no modem
    // Avaliar o trtamento adequado neste caso
    MODEM_RETCODE   := MODEM.RESULT;
    MODEM_ERR_COUNT := MODEM_ERR_COUNT + 1;
  END_IF;
END_IF;

// Gerencia de configuração e acesso ao servidor SIDECC-R
MODEM_SIDEC(  // Q4GA1_SIDECC_R
  START        := TIME_TO_PUBLISH,  // [BOOL] Ativa o processo de transmissão de dados para o SIDEC-R
  PUBLISH      := PUB_ON_SERVER,    // [BOOL] Publica no servidor SIDECC-R o dado especificado
  SW_URL       := TRUE,             // [BOOL] Reprograma URL do servidor no MODEM na inicializacao do bloco
  CONNECTED    := MODEM.CONNECTED,  // [BOOL] Sinal CONNECTED do gerenciador do módulo de modem Q4G4A1
  ON_CONFIG    := MODEM.ON_CONFIG,  // [BOOL] Sinal ON_CONFIG do gerenciador do módulo de modem Q4G4A1
  FLOW         := FLOW,             // [REAL] Vazao instantanea (m3/s ou l/s)
  TS           := TS,               // [DT] Timestamp do valor a ser transmitido
  USER         := USER,             // [STRING] Nome do usuário cadastrado no SIDECC-R
  METER        := METER,            // [STRING] Identificação do medidor cadastrado no SIDECC-R
  KEY          := KEY,              // [STRING] Chave de acesso obtida no cadastro no SIDECC-R
  RESTORE_URL  := HITEL_IP,         // [STRING] URL/IP a ser reprogramado no retorno (provisório)
  RESTORE_PORT := HITEL_PORT        // [STRING] Porta a ser reprogramada no retorno (provisório)
  );

// Maquina de esta de publicação dos valores disponívei no servidor
CASE PUBLISH_STATE OF
  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  0:
    IF MODEM_SIDEC.READY THEN
      IF MODEM_SIDEC.RESULT = 0 THEN
        // Pronto para publicar dados
        PUBLISH_STATE := 1;    // Inicia o processo de publicação
      ELSE
        // Falha na inicialização do gerenciado de acesso ao SIDECC
        SIDECC_RETCODE   := MODEM_SIDEC.RESULT;
        SIDECC_ERR_COUNT := SIDECC_ERR_COUNT + 1;
        TIME_TO_PUBLISH  := FALSE; // desativa o BLOCO
      END_IF;
    END_IF;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1: // Inicia o processo de publicação
    CUR_PUB_INX   := 0;
    PUBLISH_STATE := 2;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2: // Publica o dado corrente
    IF MODEM_SIDEC.READY THEN
      TS            := TS_VEC[CUR_PUB_INX];   // Obtem o valor da timestamp
      FLOW          := FLOW_VEC[CUR_PUB_INX]; // Obtem o valor da vazao
      PUB_ON_SERVER := TRUE; // sinaliza para publicar no servidor
      PUBLISH_STATE := 3;
    ELSE
      PUBLISH_STATE := 0; // Aguarda habilitar novamente o bloco
    END_IF;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  3: // Aguarda a publicação do módulo
    IF MODEM_SIDEC.EV THEN
      PUB_ON_SERVER  := FALSE;
      SIDECC_RETCODE := MODEM_SIDEC.SIDECC_RESULT;

      // Neste caso deve-se analisar o erro ocorrido para verificar
      // se o processo deve ser cancelado ou não
      IF (SIDECC_RETCODE = 0) OR     //000 SUCESSO
         (SIDECC_RETCODE = 4) OR     //004 DATA/HORA INVÁLIDA
         (SIDECC_RETCODE = 5) OR     //005 MINUTO/SEGUNDO INVÁLIDO
         (SIDECC_RETCODE = 7) OR     //007 OUTRO VALOR GRAVADO NO MESMO MOMENTO
         (SIDECC_RETCODE = 8) THEN   //008 VAZÃO INFORMADA INVÁLIDA
        PUBLISH_STATE := 4; // Se erro ignora o erro e publica o proximo
      ELSE
        //001         SERVIÇO DE ENVIO INATIVO
        //002         USUÁRIO OU CHAVE INVÁLIDO
        //003         MEDIDOR INVÁLIDO
        //006         ERRO REGISTRANDO O VALOR, TENTE MAIS TARDE
        //500         ERRO PROCESSANDO REQUISIÇÃO TENTE NOVAMENTE MAIS TARDE
        //999         ERRO NO PROCESSAMENTO DA REQUISIÇÃO
        PUBLISH_STATE := 5; // Cancela o processo
      END_IF;
    END_IF;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  4: // Avalia se publicou todos os dados
    CUR_PUB_INX := CUR_PUB_INX + 1;
    IF CUR_PUB_INX < PUBLISH_COUNT THEN
      // Publica o proximo dado
      PUBLISH_STATE := 2;
    ELSE
      // Fim do processo de publicação
      PUBLISH_STATE := 5;
    END_IF;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  5: // Fim do processo de publicação
    // O resuultado do processo esta em SIDECC_RETCODE
    PUB_ON_SERVER   := FALSE;
    TIME_TO_PUBLISH := FALSE;
    PUBLISH_STATE := 6;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  6: // Aguarda o processo de desconexão do modem terminar
    IF NOT MODEM_SIDEC.READY THEN
      CUR_PUB_INX     := 0; // reinicializa o indice para recarregar o vetor
      PUBLISH_STATE   := 0; // termina processo da máquina de estados
    END_IF;

  END_CASE;