SIDECC_ITF
Gerencia a interface de publicação de dados de vazão no servidor SIDECC-R, reconfigurando um modem compatível com o módulo Q4GA1 para conectar ao servidor, publicar os valores notificados pela aplicação e, ao ser desativado, restaurar a conexão do modem com o portal de telemetria. É um bloco de função (mantém estado entre scans; requer instância).
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
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 ------------ |----
+-----------------+
O bloco pressupõe uma aplicação com modem integrado compatível com o módulo Q4GA1_SIDECC_R, configurado para o portal da HI Tecnologia via MODBUS-TCP com autenticação V0 (porta 16795), em um canal de comunicação cuja cache tenha no mínimo 700 bytes. Quando ativado, o bloco desconecta o modem do portal, reconfigura a URL para o servidor SIDECC-R, abre a conexão, sinaliza prontidão e passa a publicar os valores de vazão/timestamp notificados pela aplicação. Ao ser desativado, fecha a conexão com o SIDECC-R, reconfigura o modem e reabre a conexão com o portal de telemetria.
A entrada START inicia o processo de acesso ao servidor; concluída a inicialização,
a saída READY é ativada junto a um pulso em EV, com o resultado em RESULT.
Com o bloco pronto, a entrada PUBLISH dispara a publicação do dado corrente e um
novo pulso em EV reporta o resultado em RESULT. Após cada evento, a aplicação
deve desativar PUBLISH por ao menos um ciclo de scan antes de publicar o próximo dado.
A entrada SW_URL, quando ativa, força a reconfiguração da URL e porta do modem para
o servidor SIDECC-R na inicialização do bloco. A entrada COMM_SRC identifica o canal
de comunicação associado ao modem por um identificador numérico:
Identificador |
Valor |
Canal |
|---|---|---|
|
0 .. 7 |
Portas seriais COM1 a COM8. |
|
8 .. 15 |
Sockets 0 a 7. |
|
16 .. 23 |
Sockets 0 a 7 da segunda interface Ethernet. |
As entradas FLOW, TS, METER, USER e KEY são repassadas ao bloco
SIDECC_R; consulte FLOW, METER,
USER e KEY para detalhes.
Importante
Não altere o valor de SW_URL enquanto START estiver ativada. O canal de
comunicação usado para acesso ao servidor SIDECC-R deve ter cache de no mínimo
700 bytes — com o tamanho default gerado pelo ambiente para o canal MODBUS não é
possível tratar a conexão.
Nota
Se a inicialização retornar falha (RESULT diferente de zero), a aplicação deve
remover o sinal START e aguardar até que READY retorne para inativa; nesta
condição o bloco está apto para um novo ciclo de operação.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
START |
IN |
BOOL |
FALSE |
— |
Habilita a operação do bloco e inicia o acesso ao servidor SIDECC-R. |
PUBLISH |
IN |
BOOL |
FALSE |
— |
Dispara a publicação do dado corrente no servidor SIDECC-R. |
SW_URL |
IN |
BOOL |
FALSE |
— |
Reprograma a URL/porta do servidor no modem durante a inicialização do bloco. |
COMM_SRC |
IN |
USINT |
2 |
|
Canal de comunicação associado ao modem (default 2 = COM3). |
FLOW |
IN |
REAL |
— |
— |
Vazão a ser publicada. Repassada ao bloco |
TS |
IN |
DT |
— |
— |
Timestamp associado à vazão. Repassado ao bloco |
METER |
IN_OUT |
STRING |
— |
— |
Medidor associado à conta SIDECC. |
USER |
IN_OUT |
STRING |
— |
— |
Usuário associado à conta SIDECC. |
KEY |
IN_OUT |
STRING |
— |
— |
Chave de acesso ao SIDECC. |
READY |
OUT |
BOOL |
FALSE |
— |
Sinaliza que o bloco foi inicializado e está apto a operar. |
EV |
OUT |
BOOL |
FALSE |
— |
Pulso de notificação de conclusão de um processo (inicialização ou publicação). |
RESULT |
OUT |
INT |
0 |
RET_CODE |
Resultado do processo notificado por |
Códigos de retorno
RESULT é atualizado a cada pulso de EV e usa os identificadores com o
namespace HILS (ex.: HILS.SUCCESS):
0(HILS.SUCCESS): processo realizado com sucesso.> 0: falha no processamento local para acessar o servidor (falha de comunicação, configuração ou hardware). Consulte a lista de códigos em RET_CODE - Códigos de retorno do firmware G5.< 0: falha reportada pelo próprio servidor SIDECC-R (o código de falha é positivo). Consulte SIDECC_RESP.
Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
A aplicação deve usar um módulo de modem integrado compatível com o módulo Q4GA1.
O canal de comunicação de acesso ao modem deve estar configurado com protocolo MODBUS-TCP e cache de no mínimo 700 bytes.
Por default a aplicação deve estar conectada ao portal da HI Tecnologia via MODBUS com autenticação V0 (porta 16795).
METER,USEReKEYdevem estar preenchidos com o cadastro do medidor no SIDECC-R.
Observações
A saída
EVgera um pulso ao final de cada processo: primeiro na conclusão da inicialização (junto deREADY) e depois a cada publicação disparada porPUBLISH.Ao final da publicação de todos os dados, desative
STARTe aguardeREADYretornar para o estado inativo antes de iniciar um novo ciclo.O resultado da saída
SIDECC_RESPdo blocoSIDECC_Ré refletido internamente: se houver falha antes do acesso ao servidor,RESULTapresenta o código de erro associado; comRESULT=HILS.SUCCESS(0), o resultado corresponde ao processamento efetuado pelo servidor. Consulte SIDECC_RESP.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
START : BOOL := FALSE; (* Ativa o processo *)
CUR_PUB_INX : USINT := 0; (* Indice do valor corrente a ser salvo para posterior publicação *)
RETCODE : INT := 0; (* Código de retorno do processo de publicação *)
PUBLISH_COUNT : UINT := 1; (* Nro de valores a serem adquiridos para publicação *)
SIDEC_MIN_SAMPLE : UINT := 10; (* Tempo entre aquisições da vazão *)
STATE : USINT := 0; (* Maquina de estado interna *)
TRANS : TIME := T#0ms; (* Tempo de inicio de uma transação *)
TS : DT; (* Timestamp a ser publicado *)
FLOW : REAL; (* Valor da vazao a ser publicada *)
TS_VEC : ARRAY [0..5] OF DT; (* Vetor de timestamp de publicacao *)
FLOW_VEC : ARRAY [0..5] OF REAL; (* Vetor de vazão a ser publicada *)
METER : STRING := '01'; (* Nro do medidor cadastrado no sistema SIDECC-R *)
USER : STRING := '400943'; (* Nro do usuário cadastrado no sistema SIDECC-R *)
KEY : STRING := 'Ii1uU6cC9Oo4Rr6'; (* Chave fornecida no cadastrado no sistema SIDECC-R *)
SIDEC : HILS.SIDECC_ITF; (* bloco de interface com o sistema SIDECC-R *)
SID_TIMER : HILS.SIDECC_TIMER; (* Timer de evento de captura da vazão *)
END_VAR
VAR_EXTERNAL
ERR : UDINT := 0; (* Total de erros nos acessos *)
LAST_ERR : INT := 0; (* Codígo da ultima falha registrada *)
TOTAL : UDINT := 0; (* Total de acessos ao sistema SIDEC-R *)
MAX_TRANS : UDINT := 0; (* Maior tempo de acesso ao SIDEC-R em ms *)
LAST_TRANS : UDINT := 0; (* Tempo da ultima transacao *)
END_VAR
(*
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 à vazão
METER := METER, // [STRING] Medidor associado à conta SIDECC
USER := USER, // [STRING] Usuário associado à conta SIDECC
KEY := KEY // [STRING] Chave de acesso ao SIDECC
);