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á:
desconectar o modem do portal de telemetria da HI Tecnologia;
reconfigurar o modem para conexão no servidor SIDECC-R;
abrir conexão com o servidor SIDECC-R;
Sinalizar para a aplicação que a conexão com o servidor esta ativa;
Aguardar a aplicação notificar que existe valor válido de vazão a ser publicado no servidor;
Publicar no servidor o valor de vazão e Timestamp especificado pela aplicação;
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;
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 |
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
);