SIDECC_ITF

Este bloco implementa uma interface para o sistema SIDECC-R. Considera as seguintes premissas de projeto para sua operação:

  • a aplicação esta utilizando um módulo de modem integrado compatível com módulo Q4GA1.

  • a configuracao do modem aponta para o portal da HI Tecnologia via MODBUS com autenticaçao V0 (porta: 16795)

  • o canal de comunicacao de acesso ao modem esta configurado com protocolo MODBUS-TCP e tamanho da cache igual a 700 bytes.

  • a aplicaçao estará por default conectado ao portal da HI Tecnologia

Nestas condições o bloco, quando ativado irá:

  1. desconectar o modem do portal de telemetria da HI Tecnologia;

  2. reconfigurar o modem para conexão no servidor SIDECC-R;

  3. abrir conexão com o servidor SIDECC-R;

  4. Sinalizar para a aplicação que a conexão com o servidor esta ativa;

  5. Aguardar a aplicação notificar que existe valor válido de vazão a ser publicado no servidor;

  6. Publicar no servidor o valor de vazão e Timestamp especificado pela aplicação;

  7. Este processo de publicação pode acontecer quantas vezes forem necessárias ou até que ocorra uma falha no processo ou que a aplicação desative o bloco;

  8. Quando desativado o bloco irá:

  • Fechar a conexão do modem com o servidor SIDECC-R;

  • Reconfigurar o modem para conexão com o portal de telemetria;

  • Abrir a conexão novamente com o o portal de telemetria.

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

               SIDECC_ITF
           +-----------------+
  BOOL ----|START       READY|---- BOOL
           |                 |
  BOOL ----|PUBLISH        EV|---- BOOL
           |                 |
  BOOL ----|SW_URL     RESULT|---- INT
           |                 |
 USINT ----|COMM_SRC         |
           |                 |
  REAL ----|FLOW             |
           |                 |
    DT ----|TS               |
           |                 |
STRING ----|METER ---------- |----
           |                 |
STRING ----|USER ----------- |----
           |                 |
STRING ----|KEY ------------ |----
           +-----------------+

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

START

Entrada

BOOL

FALSE

Habilita operação do bloco

PUBLISH

Entrada

BOOL

FALSE

Publica o dado especificado

SW_URL

Entrada

BOOL

FALSE

Reprograma URL do servidor no MODEM na inicializacao do bloco

COMM_SRC

Entrada

USINT

2

Canal de comunicação associado ao modem (default COM3)

FLOW

Entrada

REAL

Vazão a ser publicada

TS

Entrada

DT

Timestamp associado a vazão

METER

Entrada/Saída

STRING

Medidor asoociado a conta SIDECC

USER

Entrada/Saída

STRING

Usuário associado a conta SIDECC

KEY

Entrada/Saída

STRING

Chave de acesso Ao SIDECC

READY

Saída

BOOL

Bloco inicializado para operação

EV

Saída

BOOL

Pulso de notificação de evento

RESULT

Saída

INT

Resultado do evento notificado

START

Esta entrada quando ativada inicia o processo de acesso ao servidor SIDECC-R. Uma vez concluido o processo a saída READY sera ativada juntamente com um pulso na saída EV notificado a conclusão do processo de inicialização e reportando na saída RESULT o resultado do processo. Se o processo de inicializção for concluído com sucesso a aplicação pode atrevés da entrada PUBLISH notificar o bloco para publicar um dado.

Nota

Se o processo de inicialização retornar falha (valor de RESULT diferente de zero) a aplicação deverá remover o sinal START e aguardar até que a saída READY retorne para inativa. Nesta condição o bloco esta apto para um novo ciclo de operação.

PUBLISH

Quando ativada inicia o processo publicação do dado corrente no servidor SIDECC-R. Uma vez ativada a entrada, o de processo publicação do dado corrente no servidor SIDECC-R e iniciado e, uma vez concluido a saída EV irá gerar um pulso reportanto na saída RESULT o resultado do processo. Quando o evento EV ocorrer a aplicação deverá desativar a entrada PUBLISH por no mínimo um ciclo de scan e em seguida, caso necessário o processo pode ser repetido para mais dados. Quando terminarem os dados a serem publicados a aplicação deverá desativar a entrada START e aguardar até que a saída READY retorne para o estado inativo. Nesta condição o bloco esta apto para um novo ciclo de operação.

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.

COMM_SRC

Identifica o canal de comunicação associado ao módulo do modem. O canal de comunicação utilizado é especificado por um identificador (valor numérico) conforme indicado na tabela a seguir:

Nome

Ident.

Descrição

HILS.COM1_PORT_ID

0

Canal serial COM1

HILS.COM2_PORT_ID

1

Canal serial COM2

HILS.COM3_PORT_ID

2

Canal serial COM3

HILS.COM4_PORT_ID

3

Canal serial COM4

HILS.COM5_PORT_ID

4

Canal serial COM5

HILS.COM6_PORT_ID

5

Canal serial COM6

HILS.COM7_PORT_ID

6

Canal serial COM7

HILS.COM8_PORT_ID

7

Canal serial COM8

HILS.SOCK0_PORT_ID

8

Controlador Ethernet 1: Socket 0

HILS.SOCK1_PORT_ID

9

Controlador Ethernet 1: Socket 1

HILS.SOCK2_PORT_ID

10

Controlador Ethernet 1: Socket 2

HILS.SOCK3_PORT_ID

11

Controlador Ethernet 1: Socket 3

HILS.SOCK4_PORT_ID

12

Controlador Ethernet 1: Socket 4

HILS.SOCK5_PORT_ID

13

Controlador Ethernet 1: Socket 5

HILS.SOCK6_PORT_ID

14

Controlador Ethernet 1: Socket 6

HILS.SOCK7_PORT_ID

15

Controlador Ethernet 1: Socket 7

HILS.ETH2_SOCK0_PORT_ID

16

Controlador Ethernet 2: Socket 0

HILS.ETH2_SOCK1_PORT_ID

17

Controlador Ethernet 2: Socket 1

HILS.ETH2_SOCK2_PORT_ID

18

Controlador Ethernet 2: Socket 2

HILS.ETH2_SOCK3_PORT_ID

19

Controlador Ethernet 2: Socket 3

HILS.ETH2_SOCK4_PORT_ID

20

Controlador Ethernet 2: Socket 4

HILS.ETH2_SOCK5_PORT_ID

21

Controlador Ethernet 2: Socket 5

HILS.ETH2_SOCK6_PORT_ID

22

Controlador Ethernet 2: Socket 6

HILS.ETH2_SOCK7_PORT_ID

23

Controlador Ethernet 2: Socket 7

Este texto pode ser utilizado como parâmetro pois esta definido no tipo COMM_CHAN_ID disponível na biblioteca HI_STD.

Cada equipamento possui um sub-conjunto dos recursos de comunicação indicados na tabela acima. Para identificar quais recursos estão disponíveis em um dado equipamento, consulte o manual do mesmo.

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.

METER

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

USER

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

KEY

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

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 no instante que ativar a saída READY. 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.

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 retornada 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

ERR

Externa

UDINT

0

Total de erros nos acessos

LAST_ERR

Externa

INT

0

Codígo da ultima falha registrada

TOTAL

Externa

UDINT

0

Total de acessos ao sistema SIDEC-R

MAX_TRANS

Externa

UDINT

0

Maior tempo de acesso ao SIDEC-R em ms

LAST_TRANS

Externa

UDINT

0

Tempo da ultima transacao

START

Local

BOOL

FALSE

Ativa o processo

CUR_PUB_INX

Local

USINT

0

Indice do valor corrente a ser salvo para posterior publicação

RETCODE

Local

INT

0

Código de retorno do processo de publicação

PUBLISH_COUNT

Local

UINT

1

Nro de valores a serem adquiridos para publicação

SIDEC_MIN_SAMPLE

Local

UINT

10

Tempo entre aquisições da vazão

STATE

Local

USINT

0

Maquina de estado interna

BEGIN_TRANS

Local

TIME

T#0ms

Tempo de inicio de uma transação

TS

Local

DT

Timestamp a ser publicado

FLOW

Local

REAL

Valor da vazao a ser publicada

TS_VEC

Local

DT

[0..5]

Vetor de timestamp de publicacao

FLOW_VEC

Local

REAL

[0..5]

Vetor de vazão a ser publicada

METER

Local

STRING

‘01’

Nro do medidor cadastrado no sistema SIDECC-R

USER

Local

STRING

‘400943’

Nro do usuário cadastrado no sistema SIDECC-R

KEY

Local

STRING

‘Ii1uU6cC9Oo4Rr6’

Chave fornecida no cadastrado no sistema SIDECC-R

SIDEC

Local

SIDECC_ITF

bloco de interface com o sistema SIDECC-R

SID_TIMER

Local

HILS.SIDECC_TIMER

Timer de evento de captura da vazão

Clique aqui para baixar a tabela de variáveis

Código ST

(*
  Esta POU é responsavel por viabilizar a publicação de dados de vazão no
  servidor SIDECC-R do DAEE de São Paulo.

  Este bloco considera que existe um módulo de modem compativel com o
  Q4GA1 presente no equipamento na interface COM3.

  O projeto considera que o modem estara normalmente conectado ao portal
  de telemetria da HI tecnologia (IP '54.227.237.88') em MODBUS TCP com
  autenticação V0 (porta '16795').

  IMPORTANTE:  O tamanho da cache utilizada no canal do modem (COM3) deve ser
               de no mínimo 700 bytes. Com o tamanho default gerado pelo ambiente
               para o canal MODBUS não é possivel tratar a conexão com o
               servidor SIDECC-R
*)

// Identifica o momento de captura um valor para registro 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 (Teste apenas)
  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;
    STATE           := 1; // ATIVA PROCESSO DE PUBLICAÇÃO
  END_IF;
END_IF;

// Maquina de estado de publicação dos valores disponívei no servidor
CASE STATE OF
  0:
    SIDEC.START := FALSE;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1:
    SIDEC.START := TRUE;
    TRANS       := HILS.GET_SECTION_TIME();
    STATE       := 2;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2: // aguarda o manager iniciar
    IF SIDEC.EV THEN
      RETCODE   := SIDEC.RESULT;
      IF SIDEC.READY AND (RETCODE = 0) THEN
        // Pronto para publicar dados
        CUR_PUB_INX := 0;
        STATE       := 3;
      ELSE
        // Falha na inicialização do gerenciado de acesso ao SIDECC
        STATE     := 10;    // reporta falha e termina
      END_IF;
    END_IF;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  3: // ativa o processo de publicação
    TS            := TS_VEC[CUR_PUB_INX];   // Obtem o valor da timestamp
    FLOW          := FLOW_VEC[CUR_PUB_INX]; // Obtem o valor da vazao
    SIDEC.PUBLISH := TRUE;
    STATE         := 4;    // Aguarda publicação do dado

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  4: // aguarda publicação do dado
    IF SIDEC.EV THEN
      SIDEC.PUBLISH := FALSE;
      RETCODE := SIDEC.RESULT;
      // Neste caso deve-se analisar o erro ocorrido para verificar
      // se o processo deve ser cancelado ou não
      IF (RETCODE = 0) OR     //000 SUCESSO
         (RETCODE = -4) OR     //004 DATA/HORA INVÁLIDA
         (RETCODE = -5) OR     //005 MINUTO/SEGUNDO INVÁLIDO
         (RETCODE = -7) OR     //007 OUTRO VALOR GRAVADO NO MESMO MOMENTO
         (RETCODE = -8) THEN   //008 VAZÃO INFORMADA INVÁLIDA
        STATE := 5; // 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
        STATE := 10; // Cancela o processo com falha
      END_IF;
    END_IF;

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

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  6: // Aguarda o manager encerrar
    SIDEC.START := FALSE;
    IF NOT SIDEC.READY THEN
      TOTAL := TOTAL + 1;
      STATE := 11; // TERMINA
    END_IF;

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10: // reporta condição de falha
    // Falha na inicialização do gerenciado de acesso ao SIDECC
    TOTAL    := TOTAL + 1;
    ERR      := ERR + 1;
    LAST_ERR := RETCODE;
    SIDEC.START   := FALSE; // desativa o manager do SIDEC
    SIDEC.PUBLISH := FALSE;
    STATE         := 11;    // Calcula o tempo de transação e termina

  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  11: // Calcula o tempo de transação e termina
    LAST_TRANS := HILS.TIME_TO_MS(HILS.GET_SECTION_TIME() - TRANS);
    IF LAST_TRANS > MAX_TRANS THEN
      MAX_TRANS := LAST_TRANS;
    END_IF;
    STATE       := 0;     // Aguarda um novo processo de publicação

END_CASE;


SIDEC(  // SIDECC_ITF
  //START    := ,  // [BOOL] Habilita operação do bloco
  //PUBLISH  := ,  // [BOOL] Publica o dado especificado
  SW_URL   := TRUE,  // [BOOL] Reprograma URL do servidor no MODEM na inicializacao do bloco
  COMM_SRC := HILS.COM3_PORT_ID,  // [USINT] Canal de comunicação associado ao modem (default COM3)
  FLOW     := FLOW,  // [REAL] Vazão a ser publicada
  TS       := TS,  // [DT] Timestamp associado a vazão
  METER    := METER,  // [STRING] Medidor asoociado a conta SIDECC
  USER     := USER,  // [STRING] Usuário associado a conta SIDECC
  KEY      := KEY   // [STRING] Chave de acesso Ao SIDECC
  );