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

terça-feira, julho 25, 2006

SerialWizard for dummies :)

Como comentei no último post, vou descrever melhor as funcionalidades do SerialWizard; abaixo segue um screenshot da tela principal do programa.




Nesta figura podemos observar alguns elementos:

  • Data window.
  • Frames window.
  • Detail window.

os quais descreverei individualmente:

Data Window

Este é a janela mais simples de se entender. A mesma apresenta os dados (em hexadecimal) enviados/recebidos pela porta serial ou dados carregados de um arquivo. Nela podemos selecionar dados, navegar pelos mesmos (com as teclas de navegação) além de realizar buscas (básicas na versão corrente).

Esta janela é dividida em duas "sub-janelas": uma para apresentar os dados em hexadecimal e outra para apresentar os dados como strings. Observe que ao selecionar um (ou mais bytes) em uma destas "sub-janelas" os bytes correspondentes na outra também serão selecionados.

Frames

Esta janela apresenta uma visão mais estruturada dos dados visualizados na janela data; em outras palavras nesta janela temos uma visão dos diversos campos (fields) que compõe um buffer. Este recurso é útil para analizarmos protocolos pois nos permite visualizar mais rapidamente os diversos campos do mesmo.

Para que este recurso esteja habiltiado é necessário que o programa conheça a estrutura do protocolo (saiba fazer parse do protocolo). Em um próximo post veremos como "ensinar" o programa a fazer parse de um protocolo.

Observe que ao selecionarmos um (ou mais) campo(s) (através do checkbox da treeview) os dados correspondentes serão selecionados.

Details

A janela details possui duas tabs: Details e Commands.

A primeira apresenta os dados selecionados em um (ou mais) formato(s) selecionado(s) (levando-se em consideração os respectivos tamanhos dos tipos de dado). Por exemplo se Signed16 estiver marcado e dois ou mais bytes (16 ou mais bits) estiverem selecionados o valor correspondente aos dados selecionados convertidos para um número sinalizado de 16 bits será apresentado.

A segunda tab (commands) é utilizada para enviar dados pela porta serial.


[+/-] mostrar/esconder este post

segunda-feira, julho 24, 2006

Novo aplicativo...
A algum tempo atraz eu comecei a trabalhar em uma empresa de desenvolvimento que depende muito de comunicação com dispositivos através da porta serial (RS232) e tive contato com um programa desenvolvido internamente (acredito que pela matriz) que permitia o envio de dados pela serial; ainda que semelhante ao HyperTerminal do Windows, este programa adicionava algumas características interessantes:

  • Cálculo automático de LRC.
  • Tratamento de dados no formato hexadecimal
Apesar destes recursos notei alguns problemas com o mesmo:

  • Bugs: O programa possuía vários erros e eu não tinha acesso ao código fonte.
  • Recursos não implementados
Somado a estas questões havia o fato de eu procurar algo interessante para desenvolver usando a plataforma Dot Net; assim decidi implementar um aplicativo com as seguintes funcionalidades:

  • Visualização de dados no formato Hexadecimal
  • Envio de dados pela porta serial com suporte a cálculo automático de LRC e tratamento de dados hexadecimal
  • Parse de "frames", ou seja, dado um buffer contendo um frame separar os vários campos deste frame
Assim nasceu o SerialWizard (sei lá porque este nome).


Neste final de semana liberei a primeira versão (ainda em alpha e com vários bugs e funcionalidades ainda não implementadas). no sourceforge. Na medida do possível implementarei novas funcionalidades e corrigirei bugs no mesmo.

Ao longo dos próximos posts irei descrever as principais funcionalidades do programa; mas não espere por isso! Baixe o mesmo e comece a brincar agora mesmo! :)

Abraços.

Adriano

[+/-] mostrar/esconder este post