|
<< 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%+)"
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 |
|---|---|
Dois bits de qualidade |
|
SSSS |
Quatro bits de sub-status |
LL |
Dois bits de limite |
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 |
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
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