<< Clique para Mostrar o Sumário >>
Preparando a Coleta SOE |
Antes de utilizar os Tags de Coleta SOE, é preciso preparar o CLP com a construção de uma Tabela DB (área V) e o desenvolvimento de uma lógica programável compatível com os procedimentos de coleta SOE desenvolvida para este Driver.
Esta tabela tem como objetivo dimensionar o tamanho do buffer de eventos e gerenciar a entrada e a saída destes em uma rotina de buffer circular. Esta tabela é constantemente atualizada, tanto pelo CLP quanto pelo Driver Siemens MProt (MPI/PPI/ISO-TCP).
A Tabela de Eventos SOE deve conter registros de controle e de armazenamento dos eventos, com base na estrutura de dados descrita na tabela a seguir.
Estrutura de dados
Endereço |
Descrição |
Tipo de Dados |
---|---|---|
0.0 |
|
STRUCT |
+0.0 |
Status da tabela |
WORD (16 bits sem sinal) |
+2.0 |
Ponteiro de gravação |
WORD (16 bits sem sinal) |
+4.0 |
Status da aquisição |
WORD (16 bits sem sinal) |
+6.0 |
Limite máximo de itens do buffer circular |
WORD (16 bits sem sinal) |
+8.0 |
Buffer circular |
ARRAY[1..n] (limite de itens definido pelo usuário) |
+0.0 |
|
STRUCT |
+0.0 |
TIMESTAMP_LOLO (ano) |
WORD (16 bits sem sinal) |
+2.0 |
TIMESTAMP_LOHI (dia e mês) |
WORD (16 bits sem sinal) |
+4.0 |
TIMESTAMP_HILO (hora e minuto) |
WORD (16 bits sem sinal) |
+6.0 |
TIMESTAMP_HIHI (segundo e milissegundo) |
WORD (16 bits sem sinal) |
+8.0 |
Valor do tipo de evento 1 (um) |
Tipo de dados do evento (definido pelo usuário) |
+n.0 |
Valor do tipo de evento 2 (dois) |
Repete o mesmo tipo de dados |
+n.0 |
Valor do tipo de evento 3 (três) |
Repete o mesmo tipo de dados |
+n.0 |
Valor do tipo de evento n |
Repete o mesmo tipo de dados |
=n.0 |
|
END_STRUCT |
=n.0 |
|
END_STRUCT |
•Status da Tabela: Deve ser mantido exclusivamente pelo CLP, indicando o número de eventos disponíveis para a leitura no buffer circular. Deve ser atualizado pelo CLP sempre que novos eventos são adicionados ao buffer circular, ou após a conclusão da coleta de eventos pela aplicação, o que pode ser detectado pela mudança no Status da Aquisição
•Ponteiro de Gravação: Deve ser mantido exclusivamente pelo CLP, indicando o índice, começando em 0 (zero), da posição onde deve ser inserido o próximo evento. O índice deve ser incrementado pelo CLP a cada nova inserção de eventos no buffer circular, voltando ao índice 0 (zero) após alcançar o limite máximo do buffer circular
•Status da Aquisição: Deve ser mantido pelo CLP em conjunto com o Driver Siemens MProt (MPI/PPI/ISO-TCP), indicando o número de registros já lidos a cada transação. Após cada coleta, o Driver Siemens MProt (MPI/PPI/ISO-TCP) escreve neste registro o número de eventos que conseguiu ler. Ao detectar esta modificação, o CLP deve imediatamente descontar este valor escrito pelo Driver Siemens MProt (MPI/PPI/ISO-TCP) do Status da Tabela, e então zerar o Status da Aquisição
•Limite Máximo de Itens do Buffer Circular: Valor constante que especifica o limite máximo de eventos a armazenar no buffer circular antes do ponteiro voltar para o índice 0 (zero). Deve conter exatamente o valor limite do Array dimensionado para os eventos do buffer circular
•TIMESTAMP: Horário da ocorrência do evento
•Valor do Evento: Valor do evento ocorrido, que pode ser composto por um ou n valores, todos com o mesmo tipo de dados, e que são agrupados para o mesmo TIMESTAMP gerado na ocorrência de um evento
O TIMESTAMP é representado por quatro Words, conforme a estrutura de dados descrita na tabela a seguir.
Estrutura de dados
Word |
Conteúdo |
Intervalo |
---|---|---|
0 |
Ano |
Entre 0 (zero) e 65535 |
1 |
Dia e mês |
ddddddddmmmmmmmm |
2 |
Hora e minuto |
hhhhhhhhmmmmmmmm |
3 |
Segundo e milissegundo |
ssssssmmmmmmmmmm |
•O primeiro Word contém um valor inteiro referente ao ano
•O segundo Word está dividido em parte alta para representar o dia e em parte baixa para representar o mês
•O terceiro Word está dividido em parte alta para representar as horas e em parte baixa para representar os minutos
•O quarto Word usa os seis bits mais altos para representar os segundos e os 10 bits mais baixos para representar os milissegundos
O CLP deve iniciar a inserção dos eventos no sentido crescente, a partir do endereço base da tabela, referente ao início do buffer circular. A cada novo evento inserido, o ponteiro de gravação deve ser incrementado, passando a apontar para o próximo endereço disponível do buffer.
Este Driver executa a leitura do evento mais antigo para o mais recente. O endereço do início da leitura é calculado por este Driver através do valor do Ponteiro de Gravação e do Status da Tabela.
Se o número de eventos disponíveis é maior que o máximo permitido em um único frame de comunicação do protocolo, este Driver executa múltiplas leituras em bloco, atualizando o valor do Status da Aquisição no final do processo com o número total de eventos lidos.
Ao detectar que este Driver escreveu um valor maior que 0 (zero) no Status da Aquisição, o CLP deve imediatamente subtrair o valor do Status da Aquisição do valor do Status da Tabela e zerar o Status da Aquisição.
O CLP pode inserir novos eventos na tabela durante o processo de aquisição pelo CLP, desde que não ocorra overflow do buffer circular, incrementando o Status da Tabela.
A figura a seguir apresenta um pequeno fluxograma, em formato de Diagrama de Atividades UML, com uma sugestão de implementação para a lógica do CLP.
Fluxograma SOE