Template JSON

<< Clique para Mostrar o Sumário >>

Template JSON

JSON (JavaScript Object Notation) é um formato de troca de dados de fácil compreensão para humanos, e também simples para que programas realizem o processamento e extração de informações. O formato JSON é construído sobre uma coleção de pares contendo nome e valor e uma lista ordenada destes pares.

Um Objeto é uma lista não ordenada de pares de nomes e valores. Um objeto é delimitado por chaves, cada nome é definido dentro de aspas duplas seguido por dois pontos e o respectivo valor, e cada par é separado por vírgulas.

Um Array é uma lista ordenada de valores. Um array é delimitado por colchetes e os valores são separados por vírgulas. Valores podem ser números ou textos, que devem ser representados entre aspas duplas. O código a seguir contém um exemplo de uma mensagem no formato JSON.

{"s":1, "t":"2014-07-11T15:26:37Z", "q":192,"c":1, "x":-1.234,"y":0.234, "z":-0.234}

 

O código a seguir contém um possível Template para extrair o conteúdo da mensagem anterior.

{"s":"DUMMY", "t":"TS_TEXT(%y-%m-%dT%H:%M:%SZ)","q":"QL_OPC", "c":"DUMMY", "x":"E3VAL","y":"E3VAL", "z":"E3VAL"}

 

Neste caso, deve ser criado um Tag Bloco com três Elementos de Bloco, e cada Elemento de Bloco recebe um dos valores x, y e z, respectivamente.

O código a seguir contém outro exemplo de mensagem no formato JSON.

{
  "n_channels":2,
  "timestamp":1504198675,
  "hash":"1842E0F97392F08BDF996961A8333832AB06D113",
  "battery":5.13,
  "gmt":-3,
  "tag_channels":["Analog1","Analog2"],
  "value_channels":[28.100,27.200],
  "tag_units":["°C","°C"],
  "alarm_low":[0,0],
  "alarm_high":[0,0],
  "buzzer_state":0
}

 

O código a seguir contém um possível Template para o exemplo anterior.

{
  "n_channels":"DUMMY",
  "timestamp":"TS_UNIX",
  "hash":"DUMMY",
  "battery":"V1",
  "gmt":"V2",
  "tag_channels":["V3","V4"],
  "value_channels":["V5","V6"],
  "tag_units":["V7","V8"],
  "alarm_low":["V9","V10"],
  "alarm_high":["V11","V12"],
  "buzzer_state":"V13"
}

 

OBSERVAÇÃO

Tanto mensagens quanto Templates devem ser objetos ou arrays, portanto devem começar com um caractere de chaves ({) ou colchetes ([), respectivamente.

 

Repetição de Valores

Os arrays podem ser usados para receber um número variável de elementos. Os códigos a seguir mostram exemplos de mensagens.

 

Mensagem 1 (um):

{
  "MessageType": "Teste",
  "TagData": [
    {
      "Temperature": 11,
      "Humidity": 50
    },
    {
      "Temperature": 14,
      "Humidity": 80
    }
  ]
}

 

Mensagem 2 (dois):

{
  "MessageType": "Teste",
  "TagData": [
    {
      "Temperature": 11,
      "Humidity": 12
    },
   {
      "Temperature": 14,
      "Humidity": 66
    }
   {
      "Temperature": 70,
      "Humidity": 55
    }
  ]
}

 

Dentro do array é possível ter 1 (um), 2 (dois), 3 (três) ou n conjuntos de temperatura e umidade em uma única mensagem, e seria interessante se um Tag Bloco "Teste" com dois Elementos, Temperature e Humidity, pudesse receber uma leitura a cada conjunto.

Para isto, declare o Template com uma palavra-chave Repeat_E3VAL imediatamente após o colchete que marca o início do array, como no exemplo a seguir.

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

 

Desta forma, ao receber a mensagem 2 (dois), por exemplo, tem-se uma chamada do evento OnRead do Tag Bloco para cada conjunto, conforme o exemplo a seguir.

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

 

Exemplo de log:

910         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          11           14
911         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          12           14
912         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          14           14
913         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          66           14
914         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          70           14
915         2021-08-05 10:06:15.826              0x3FF8  0x3210  APPTRACE          55           14

 

Ao declarar mais valores E3VAL antes da posição de repetição, estes valores são repetidos para cada conjunto. Como exemplo, para um Template declarado conforme o código a seguir:

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

 

Pode-se ter um Tag Bloco com 3 (três) Elementos, tipo, temperatura e umidade, e seriam recebidos os valores a seguir a cada evento OnRead.

"Teste";11;12 ' => primeiro OnRead
"Teste";14;66 ' => segundo OnRead
"Teste";70;55 ' => terceiro OnRead

Esta página foi útil?