Access Violation

quinta-feira, julho 27, 2006

SerialWizard : Frames
No post anterior comecei a falar sobre o SerialWizard e suas funcionalidades.

Um dos elementos apresentados foi uma "janela" chamada "Frames". Mas o que é um frame? Este conceito é muito usado na área de comunicação de dados, neste caso específico de comunicação via porta serial. Um frame é um conjunto de dados com início e fim bem definidos.

Por exemplo em comunicação de dados via porta serial frames são delimitados por caracteres de controle como STX e ETX.

Um dos principais recursos do SerialWizard é ser capaz de carregar um arquivo com a definição de um frame e, a medida que os dados são recebidos e/ou enviados, separar os diversos elementos (fields) deste frame.

Este arquivo (XML) possui a seguinte sintaxe:
Created with colorer-take5 library. Type 'xml'

<?xml version="1.0" encoding="ISO-8859-1"?>
<protocol>
<frame>
<stx />

<len length='2' encoding='int/hex-string'/>
<payload length='[len]'>

<signature length='4' /> <!-- <signature value='xxx' /> not supported -->

<command length='3' mapping='commands'/>
<status length='1' mapping='status'/>

<data />
</payload>
<etx/>
<lrc length='1' />

</frame>

<commands>
<item value='001' description='Command 1' />

<item value='002' description='Command 2' />
</commands>

<status>
<item value='004' description='status 004' />

<item value='008' description='status 008' />
</status>

</protocol>
Neste exemplo definimos um "frame" com o seguinte formato:

  • Primeiro campo é o caracter de controle STX
  • O segundo campo (Len) possui 2 bytes de tamanho e representa um número inteiro em uma string hexadecimal (por exemplo "12" ou 18 em decimal).
  • O próximo campo (payload) possui len bytes de tamanho (ou seja, se o valor do campo len for "15" (em hexa) então este campo possui 21 bytes) e possi os seguintes subcampos:
  • signature, com 4 bytes
  • command, com 3 bytes
  • status, com 1 byte
  • e data com len - 4 - 3- 1 bytes.
  • Caracter de controle ETX
  • LRC com 1 byte.

Abaixo apresentamos a janela principal do programa após a carga de dados formatados segundo o frame acima:

Observe que a janela "frames" foi populada com a estrutura exata do frame. Além disso podemos selecionar os dados relativos ao campo do frame clicando no respectivo checkbox na janela frames (observe o campo data).

No próximo post farei uma breve explicação sobre os elementos que definem um frame.

Abraços.

Adriano

[+/-] mostrar/esconder este post