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