Sintaxe de um Modelo JSON

<< Clique para Mostrar o Sumário >>

 

Sintaxe de um Modelo JSON

Para extrair ou montar o conteúdo de uma mensagem é necessário declarar um modelo, ou template, que permite informar o formato desta mensagem e quais partes devem ser transformadas em dados. Cada template deve utilizar palavras-chave colocadas no lugar dos valores a serem extraídos. As palavras-chave disponíveis estão descritas na tabela a seguir.

Palavras-chave disponíveis para templates

Palavra-chave

Descrição

TS_TEXT(format)

Estampa de tempo, no formato Texto, que é usada como estampa de tempo de um Tag Bloco ou Tag de Comunicação. O significado de cada campo está descrito na tabela Opções disponíveis para a palavra-chave TS_TEXT

TS_UNIX

Estampa de tempo, no formato de segundos desde 1970, ou formato UNIX. Este valor pode ser um número ou um texto, e é usado como estampa de tempo de um Tag Bloco ou Tag de Comunicação, como por exemplo 1504198675 ou "1504198675"

QL_OPC

Qualidade, no padrão OPC DA, utilizando 1 (um) byte. Este valor é usado diretamente como valor de qualidade em um Tag Bloco ou Tag de Comunicação, sem transformações. Para mais informações, consulte a tabela Padrão OPC DA

QL_BOOL

Qualidade, no padrão Booleano. Se este valor é maior que 0 (zero) ou a expressão "true" ou "TRUE", a qualidade é boa. Se o valor é igual a 0 (zero) ou a expressão "false" ou "FALSE", a qualidade é ruim

E3VAL

Especifica um valor que é extraído na sequência que ocorre para um Tag Bloco, cada valor em um Elemento de Bloco. Se há apenas um valor E3VAL em uma mensagem, o template também pode ser usado com um Tag de Comunicação

DUMMY

Campo variável, mas cujo valor não deve ser enviado para Tags de Comunicação

Repeat_E3VAL

Palavra-chave que só pode ser usada dentro de um array no formato JSON para indicar que os elementos repetidos dentro deste array devem ser processados de forma independente por este Driver, retornando uma leitura para cada conjunto. Um template pode ter esta palavra-chave apenas uma vez

 

Opções disponíveis para a palavra-chave TS_TEXT

Opção

Descrição

%a

Dia da semana abreviado, em inglês

%A

Dia da semana completo, em inglês

%b

Mês abreviado, em inglês

%B

Mês completo, em inglês

%C

Século

%d

Dia do mês, começando com 0 (zero)

%e

Dia do mês, começando com um espaço

%f

Milissegundos, de 0 (zero) a 999

%h

Hora, no formato de 12 horas

%H

Hora, no formato de 24 horas

%m

Mês

%M

Minuto

%p

AM ou PM

%S

Segundos

%y

Ano com dois dígitos

%Y

Ano com quatro dígitos

%Z

Nome do fuso horário, um código internacional que transforma o horário para o formato GMT (Greenwich Mean Time)

%+

Deslocamento ou offset do horário GMT no formato ±HH:MM

 

O código a seguir contém exemplos de estampas de tempo formatados pela palavra-chave TS_TEXT.

"2014-07-11T15:26:37Z" -> "TS_TEXT(%y-%m-%dT%H:%M:%SZ)"
"Mon Jul 10 11:04:47 BRT 2017" -> "TS_TEXT(%a %b %d %H:%M:%S %Z %Y)"
"2018-05-02T10:29:28.622-02:00" -> "TS_TEXT(%Y-%m-%dT%H:%M:%S.%f%+)"

 

Padrão OPC DA

Bit

7

6

5

4

3

2

1

0

Descrição

Q

Q

S

S

S

S

L

L

 

Opções disponíveis para o padrão OPC DA

Opção

Descrição

QQ

Dois bits de qualidade

SSSS

Quatro bits de sub-status

LL

Dois bits de limite

QQ

Os valores possíveis são 0: BAD, 1: UNCERTAIN ou 3: GOOD

SSSS

Os valores possíveis são 0: BAD_NONSPECIFIC, 1: BAD_CONFIGERROR, 2: BAD_NOTCONNECTED, 3: BAD_DEVICEFAILURE ou 4: BAD_SENSORFAILURE

SSSS

Os valores possíveis são 0: UNCERT_NONSPECIFIC, 1: UNCERT_LASTUSABLEVALUE ou 4: UNCERT_SENSORNOTACCURATE

SSSS

Os valores possíveis são 0: GOOD_NONSPECIFIC, 1: GOOD_LOCALOVERRIDE ou 6: GOOD_NONSPECIFICLOCALTIMESTAMP

LL

Os valores possíveis são 0: FREE, 1: LOW, 2: HIGH ou 3: CONST

 

Exemplos de Configuração de Modelos no Formato JSON

Um arquivo no formato JSON contendo um array com múltiplos conjuntos de dados deve incluir a palavra-chave Repeat_E3VAL no template imediatamente após o colchete que inicia este array, conforme o exemplo a seguir.

{
  "MessageType":"DUMMY",
  "TagData": [
    Repeat_E3VAL {
      "Temperature": "E3VAL",
      "Humidity": "E3VAL"
    }
  ],
  "MessageDesc": "DUMMY"
}

 

Neste caso, ao receber uma mensagem com 2 (dois) conjuntos de dados, por exemplo, o evento OnRead de um Tag Bloco é disparado para cada conjunto, como mostrado no código a seguir.

Sub [Sensor-001_OnRead]()
  Application.Trace Item("Temperature").Value
  Application.Trace Item("Humidity").Value
End Sub

 

Se outros valores do tipo E3VAL são declarados antes ou depois de um valor do tipo Repeat_E3VAL, estes são replicados para cada conjunto, com o valor do tipo Repeat_E3VAL sempre como o último valor no Tag Bloco de recebimento, como no exemplo a seguir.

{
  "MessageType": "E3VAL",
  "TagData": [
    Repeat_E3VAL {
      "Temperature": "E3VAL",
      "Humidity": "E3VAL"
    }
  ],
  "MessageDesc": "E3VAL"
}

 

Um Tag Bloco com os Elementos de Bloco Tipo, Descrição, Temperatura e Umidade pode gerar, a cada evento OnRead, valores como no código a seguir.

"Teste";"Descrição";11;12 => Primeiro evento OnRead
"Teste";"Descrição";14;66 => Segundo evento OnRead
"Teste";"Descrição";70;55 => Terceiro evento OnRead

 

Caso sem Repetição de Leitura por Conjunto

Se não há necessidade de disparar um evento OnRead para cada conjunto, um template pode ser declarado sem um valor do tipo Repeat_E3VAL, usando apenas uma palavra-chave do tipo E3VAL para capturar o array, conforme o exemplo a seguir.

{
  "MessageType": "DUMMY",
  "TagData": "E3VAL",
  "MessageDesc":"DUMMY"
}

 

Nesse caso, o array recebido é expandido com base na quantidade de elementos, resultando em uma única leitura no evento OnRead, no formato do exemplo a seguir.

array(11, 12); array(14, 66); array(70, 55) => Evento OnRead único

 

Se um template contém mais de uma palavra-chave do tipo E3VAL, ou seja, não DUMMY, o array não é expandido, conforme o exemplo a seguir.

{
  "MessageType": "E3VAL",
  "TagData": "E3VAL",
  "MessageDesc": "E3VAL"
}

 

A leitura é realizada em um único evento OnRead, no formato do exemplo a seguir.

"Teste"; array(array(11, 12), array(14, 66), array(70, 55)); "Descrição"=> Evento OnRead único

Esta página foi útil?