DTC_FWRMAN
Este bloco implementa uma interface para escrita de blocos de dados em um arquivo. Utiliza uma cache de dados onde a aplicação insere o dado através da função DTC_PUSH e o bloco é responsável por criar o arquivo associado caso não exista e salvar os dados presentes na cache no arquivo associado, fechando ou não o mesmo no final do processo.
Para mais informações sobre a cache de escrita, consulte o bloco DTC_MAN
Bloco
DTC_FWRMAN
+------------------+
BOOL ---|START FS_DIBS|--- DINT
| |
BOOL ---|CLOSE READY|--- BOOL
| |
BOOL ---|DELETE EV|--- BOOL
| |
BOOL ---|WAIT RESULT|--- INT
| |
USINT ---|HYSTER O_FLAGS|--- WORD
| |
STRING ---|F_NAME ---------- |---
| |
INT ---|FS_CACHE -------- |---
+------------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Opções |
Descrição |
START |
Entrada |
BOOL |
FALSE |
Ativa o bloco e inicializa o mesmo para processar os blocos inseridos na cache |
||
CLOSE |
Entrada |
BOOL |
Enquanto estiver ativo, sempre que o arquivo for aberto para escrita o mesmo é fechado no final do processo |
|||
DELETE |
Entrada |
BOOL |
Elimina o arquivo associado |
|||
WAIT |
Entrada |
BOOL |
FALSE |
Aguarda esta entrada estar inativa para ativar o processo de escrita |
||
HYSTER |
Entrada |
USINT |
1 |
Histeresse de dados para salvar em arquivo |
||
F_NAME |
Entrada/Saída |
STRING |
[*] |
Nome do arquivo associado a cache de mensagens (FS_CACHE) |
||
FS_CACHE |
Entrada/Saída |
INT |
[*] |
Cache de dados utilizada internamente para escrita pelo sistema de arquivo |
||
FS_DIBS |
Saída |
DINT |
-1 |
Nro de blocos de dados existentes no arquivo associado |
||
READY |
Saída |
BOOL |
FALSE |
Sinaliza que o bloco esta inicializado e apto para operação |
||
EV |
Saída |
BOOL |
Sinaliza com um pulso o fim de um processo do bloco (flush, delete, write) |
|||
RESULT |
Saída |
INT |
Código de retorno do processo de inicializacao ou operação |
|||
O_FLAGS |
Saída |
WORD |
Flags de status da cache e do arquivo associado |
|||
STATE |
Local |
USINT |
0 |
n_retain |
Estado corrente |
|
FS_DELETE |
Local |
BOOL |
n_retain |
Remove o arquivo associado |
||
FILE_OPENED |
Local |
BOOL |
n_retain |
flag que existe arquivo aberto |
||
LSTART |
Local |
BOOL |
FALSE |
n_retain |
Ultimo estado da entrada RUN |
|
LDELETE |
Local |
BOOL |
n_retain |
|||
UNREC_ERR |
Local |
BOOL |
n_retain |
|||
CLOSE_NEXT |
Local |
USINT |
n_retain |
Proximo estado após fechar o arquivo |
||
WRITTEN_DIBS |
Local |
UINT |
n_retain |
Tamanho em nro de blocos a serem escritos no arquivo |
||
SAVED_DIBS |
Local |
UINT |
n_retain |
Nro de blocos já salvos no arquivo (flushed) |
||
DTC |
Local |
HILS.DTC_MAN |
Gerenciador de blocos de dados em RAM |
|||
FS_OPEN |
Local |
HILS.FS_OPEN_FILE |
||||
FS_LEN |
Local |
HILS.FS_LEN_FILE |
||||
FS_CLOSE |
Local |
HILS.FS_CLOSE_FILE |
||||
FS_CREATE |
Local |
HILS.FS_CREATE_FILE |
||||
FS_WRITE |
Local |
HILS.FS_WRITE_DATA_FILE |
||||
FS_REMOVE |
Local |
HILS.FS_DELETE_FILE_DIR |
||||
FS_INFO |
Local |
HILS.FS_FILE_INFO |
Entradas
START
Habilita operação do bloco. Enquanto esta entrada estiver inativa a cache de escrita associada não será alterada pelo bloco e o arquivo associado, caso exista não será acessado. Ao ser ativada o bloco executa um processo de incialização e, quando concluído ativa a saída READY com o resultado do processo sendo apresentado na saída RESULT. Quando a entrada START for desativada, se o arquivo associado estiver aberto o mesmo será fechado e o sinal READY será desativado apenas após o arquivo ser fechado.
CLOSE
Esta entrada, se mantida ativada, para cada ciclo de escrita o bloco irá abrir o arquivo escrever os dados disponíveis na cache de escrita e fechar novamente o arquivo. Quando a entrada estiver inativa, após o primeiro ciclo de escrita o arquivo é mantido aberto otimizando o tempo de execução das subsequentes escritas. Quando a entrada for ativada o arquivo será fechado novamente.
DELETE
Esta entrada quando ativa inicia o processo de elimação do arquivo com o nome especificado pelo parâmetro F_NAME. Ao terminar o processo o arquivo estara removido do sistema de arquivo.
Nota
Se, após a eliminação do arquivo for inserido um novo dado na cache de escrita, o bloco irá criar novamente o arquivo e inserir o dado no mesmo.
WAIT
Esta entrada quando ativa suspende o processo de escrita (caso não esteja em execução), mantendo as informações corrente do arquivo disponíveis para utilização. Pode ser utilizada para sincronizar acesso de escrita e leitura a um mesmo arquivo.
HYSTER
Esta entrada define o nro de blocos de dados que devem existir na cache de escrita para que o processo de transferência dos dados para o arquivo seja iniciado. O valor default é 1 indicando que sempre que existir no mínimo 1 bloco de dados este será automaticamente transferido para o arquivo associado. Este parâmetro deve ser avaliado para não sobrecarregar o processo de escrita caso o nro de dados da aplicação a serem salvos em arquivo seja elevado. Valores maiores de histeresse indicam que o bloco irá manter uma quantidade maior de dados na cache e, quando o número de dados definido neste parâmetro for atingido o bloco irá salvar todos os dados da cache em um único processo de escrita. Quando for necessário forçar a transferencia de todos os dados para o arquivo utilize a entrada dtc_fwrman_close.
Nota
Este parâmetro por ser alterado com o bloco ativo. Quanto alterado o novo valor será avaliado na próxima inserção de dados na cache.
F_NAME
Define o nome do arquivo a ser utilizado no processo de escrita. Este parâmetro deve ser especificado com o caminho completo. O diretório raiz é identificado pelo caractere ‘/’, e desta forma este parâmetro deve sempre iniciar com este caractere.
Exemplos de nomes de arquivo origem: ‘/Dados.log’, ‘/Pasta_1/Err.dat’
O tamanho máximo permitido para o caminho completo do nome do arquivo é de 64 caracteres.
Importante
Nunca alterar este parâmetro enquando a entrada START estiver ativa.
FS_CACHE
Cache de dados de escrita mantida em memória como uma fila dos blocos de dados para serem transferidos para o sistema de arquivo. Para mais informações consulte CACHE.
Saídas
FS_DIBS
Informa o número de blocos de dados (DIBS) disponíveis no arquivo especificado pelo parâmero F_NAME. Se o arquivo não existir quando o bloco for ativado pela entrada START esta saída retornará -1 até que seja inserido um valor na cache de escrita, momento que o arquivo será criado e o valor inserido no mesmo, atualizando o valor desta saída.
Nota
Observe que o número de blocos de dados (DIB) não é necessárimente o número de valores que estão no arquivo, visto que podem exisitir dados que necessitam de mais de uma DIB para serem armazenados (ex: strings e vetores de variáveis).
READY
Quando ativa indica que o processo de inicialização do foi concluido e o bloco está apto a operar.
EV
Sinaliza com um pulso o fim de um ciclo do bloco. Neste momento o resultado da operação iniciada é reportado no parâmetro RESULT. Caso o valor de result seja zero o processo iniciado foi concluído com sucesso. Este processo pode se referir a uma escrita ativada pela inserção de dado na cache de escrita ou, o fechamento do arquivo solicitado pela ativação da entrada CLOSE ou, a remoção do arquivo solicitada pela ativação da entrada DELETE.
RESULT
Tipo Dado |
Descrição |
INT |
Código de retorno na execução da função, do tipo RET_CODE, onde:
|
O_FLAGS
Este parâmetro mapeia em bits as seguintes informaçôes:
BIT |
Descrição |
0 |
Quando em 1 indica que a cache de escrita esta vazia |
1 |
Quando em 1 indica que a cache de escrita esta cheia |
2 |
Quando em 1 indica que não existe arquivo com o nome especificado no momento |
8 |
Quando em 1 indica que ocorreu falha no processo de inicializacao do bloco. Esta condição pode ocorrer se houver algum problema com o acesso ao sistema de arquivo do equipamento:
|
9 |
Quando em 1 indica que o tamanho do arquivo associado é invalido ou seja, o número de bytes do arquivo não é multiplo de um bloco de dados. Neste caso, o bloco não paraliza o processo, apenas indica esta condição. |
Exemplo
Declaração de Variáveis
Nome |
Classe |
Tipo |
Dimensão |
Valor Inicial |
|---|---|---|---|---|
INSERT |
Local |
BOOL |
FALSE |
|
EN_FS |
Local |
BOOL |
FALSE |
|
HIST |
Local |
USINT |
1 |
|
DATA |
Local |
INT |
2468 |
|
FS_CACHE |
Local |
INT |
[0..50] |
0 |
TS |
Local |
DT |
DT#2020-06-25-15:36:55.36 |
|
ID |
Local |
INT |
123 |
|
INX |
Local |
UINT |
0 |
|
QNT |
Local |
UINT |
1 |
|
FS_WMAN |
Local |
HILS.DTC_FWRMAN |
||
LOG_NAME |
Local |
STRING |
‘/TL1.LOG’ |
Código ST
// Mantem o gerenciado operando (ativando a variavel EN_FS)
FS_WMAN( // DTC_FWRMAN
START := EN_FS, // [BOOL] Ativa o processo de inserção do dado
HYSTER := HIST, // [USINT] Histeresse de dados para salvar em arquivo
F_NAME := LOG_NAME, // [STRING] Nome do arquivo associado a cache de mensagens (FS_CACHE)
FS_CACHE := FS_CACHE // [INT] Cache de mensagens utilizada internamente para escrita pelo sistema de arquivo
);
IF INSERT THEN
// ativa a variavel INSERT para inserir um dado na cache de escrita para ser transferido para o arquivo
RET := HILS.DTC_PUSH(
ID, // ID [INT] = Identificador da mensagem no portal de telemetria
FALSE, // GEN_TS [BOOL] = Gera automaticamente o timestamp associado ao dado fornecido (ignora o valor do parâmetro TS)
TS, // TS [DT] = Timestamp a ser associado ao dado a ser salvo na cache
INX, // I_INX [UINT] = Indice inicial quando o dado for um vetor (nao utilizado quando o dado for escalar)
QNT, // QNT [UINT] = Quantidade de dados a partir do indice inicial quando o dado for um vetor (nao utilizado quando o dado for escalar)
DATA, // DATA [] = Dado ou vetor de dados a ser enviado para o portal
FS_CACHE // CACHE [INT] = Cache de mensagens de escrita
);
INSERT := FALSE;
END_IF;