ElipseDocsDocumentação
PDF

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

Bit76543210
DescriçãoQQSSSSLL

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