4.5 Implementa¸c˜ ao do Sistema de Comunica¸c˜ ao e Controlo
4.5.3 N´ o Diagn´ ostico
Quando se pretende fazer um diagn´ostico da rede, ´e poss´ıvel “escutar” mensagens
que circulam no barramento, ligando um n´o diagn´ostico. Esse n´o recebe todas
as mensagens e retransmite-as pela porta s´erie para o computador. Mas antes de
as retransmitir para o computador, o n´o diagn´ostico converte a frame CAN numa
frame Serial (/’[email protected].@l/), que pode ser enviada pela porta s´erie e interpretada pela
aplica¸c˜ao que corre no computador.
Para se poder utilizar a porta s´erie ´e necess´ario ter esta porta configurada, de forma
a poder enviar e receber informa¸c˜ao. Para se utilizar a porta s´erie criaram-se as
vari´aveis presentes no c´odigo 4.5.
public String port = "/dev/ttyUSB0";
public int baudRate = 9600;
private BufferedWriter bw;
private BufferedReader br;
private OutputStreamWriter osw;
4.5. IMPLEMENTAC¸ ˜AO DO SISTEMA DE COMUNICAC¸ ˜AO E CONTROLO 99
private SerialPort sp = null;
C´odigo 4.5: Vari´aveis de configura¸c˜ao da porta s´erie no Java
O utilizador, quando inicia o processo de an´alise das mensagens CAN pela porta
s´erie, escolhe a porta a utilizar, porta essa onde tem a sua liga¸c˜ao USB ao PIC. Para
facilitar esta tarefa e permitir que v´arias portas estejam ligadas e o utilizador apenas
escolha uma (n˜ao obrigatoriamente a porta por defeito), foi criado um sistema de
janelas (figuras4.19 e 4.21) para que este disponha de uma forma mais intuitiva de interagir com o sistema.
Figura 4.19 – Janela criada para escolher a porta s´erie a utilizar
Depois de escolher a porta a utilizar e clicar em SET, a janela fecha e aparece outra,
vis´ıvel na Figura 4.20, que permite enviar um buffer de valores pela porta s´erie selecionada.
Figura 4.20 – Janela criada para escolher a porta s´erie a utilizar
100 CAP´ITULO 4. CAP´ITULO DE COMUNICAC¸ ˜AO E CONTROLO
tecla Enter. Os valores introduzidos s˜ao colocados no buffer de sa´ıda e s˜ao pos-
teriormente enviados pela porta s´erie, com RS232, para o PIC, onde ser˜ao depois
colocados na lista de sa´ıda para colocar a mensagem CAN no barramento.
Um dos objetivos do n´o diagn´ostico ´e escutar o barramento e colocar mensagens
no mesmo. A tentativa inicial foi enviar uma String com os valores, que permitiu
uma implementa¸c˜ao mais simples e r´apida do c´odigo. No entanto, esta forma de
retransmiss˜ao das mensagens n˜ao ´e a mais vi´avel. Quando a troca de dados ´e muito
grande, enviar carateres em vez do pr´oprio valor faz com que o sistema perca frames.
O tempo de transmiss˜ao das mensagens ´e mais elevado.
Assim criou-se a frame Serial, com a composi¸c˜ao que se pode ver na Figura4.21.
Figura 4.21 – Esquema da frame Serial desenvolvida
Para que o n´o diagn´ostico seja capaz de saber que vai come¸car a receber uma men-
sagem nova pela porta s´erie RS232, foi necess´ario atribuir um start of frame (SOF)
`
as mensagens. O valor escolhido foi 0x7E. Como este valor indica o in´ıcio de uma
mensagem nova, n˜ao pode ser utilizado no meio de uma mensagem, pois pode con-
fundir o algoritmo de leitura da porta s´erie. Ent˜ao optou-se por codificar o valor
0x7E, fazendo o XOR do mesmo com 0x04, sempre que ´e necess´ario colocar o valor
4.5. IMPLEMENTAC¸ ˜AO DO SISTEMA DE COMUNICAC¸ ˜AO E CONTROLO 101
que o valor 0x7C passa a indicar que o valor original foi codificado. Esta codifica¸c˜ao
´
e muito importante na fase de codifica¸c˜ao da mensagem CAN para uma mensagem
Serial, e posteriormente na leitura e descodifica¸c˜ao da frame Serial no algoritmo de
rece¸c˜ao do computador.
A Figura 4.22 mostra a m´aquina de estados que foi utilizada para ler a mensagem Serial.
A fun¸c˜ao de leitura vSerial ReadBuffer vai verificar se o buffer de entrada est´a
pronto a receber dados, verificando uma flag, e se chegou algum valor pela porta
s´erie. Caso ambas as condi¸c˜oes sejam verdadeiras, o programa lˆe o valor e se este
for igual a 0x7E, que indica o in´ıcio de uma frame Serial, passa `a etapa seguinte.
Caso as condi¸c˜oes n˜ao sejam ambas verdadeiras ou o valor lido n˜ao seja o SOF, o
programa mant´em-se no mesmo estado.
Na etapa seguinte o programa vai esperar que chegue um valor. Quando fizer a sua
leitura, vai guard´a-lo numa vari´avel. Este valor indica o n´umero de valores que se
seguem, isto ´e, indica o tamanho da restante parte da frame.
Depois desta etapa, os valores que chegam podem ser codificados, pelo que ´e sempre
necess´ario verificar se o valor que ´e lido ´e igual a 0x7C. Desta forma, quando o
programa se encontra no 3oestado, vai ler o valor que chega e se este for igual a 0x7C
passa para outra etapa que lˆe o pr´oximo valor e utiliza-o para descodificar o valor
original, fazendo 0x7C XOR “carater lido”. Na etapa seguinte o valor descodificado
´
e gravado no buffer de entrada. Caso o valor lido na 3a etapa n˜ao seja 0x7C, o
102 CAP´ITULO 4. CAP´ITULO DE COMUNICAC¸ ˜AO E CONTROLO
4.5. IMPLEMENTAC¸ ˜AO DO SISTEMA DE COMUNICAC¸ ˜AO E CONTROLO 103
buffer.
Este processo de leitura, descodifica¸c˜ao (sempre que necess´aria) e grava¸c˜ao ´e repetido
at´e o n´umero de valores lidos ser igual ao valor gravado na vari´avel que cont´em o
tamanho da frame. O ´ultimo valor lido, na ´ultima etapa, ´e o checksum da mensagem.
Este indica-nos se os campos da frame foram recebidos anteriormente, uma vez que
´
e a soma modular de todos os valores da mensagem, excluindo o SOF e o tamanho
da frame. `A medida que foram lidos os v´arios valores, estes foram somados a uma
vari´avel local de checksum que depois ´e comparada com o valor de checksum que ´e
lido da porta s´erie.
Sempre que o programa tenta fazer uma leitura da porta s´erie, ´e iniciado um con-
tador. Se ao fim de 20 segundos o programa n˜ao for capaz de ler o valor ou o valor
n˜ao chegar, ´e feito um timeout, que leva a m´aquina de estados para o estado inicial.
Utilizando a fun¸c˜ao vSerial ReadBuffer, o programa est´a sempre a ler a porta
s´erie mas apenas lˆe uma nova frame quando a frame gravada anteriormente for
processada por um m´etodo que interpreta essa mensagem.
Figura 4.23 – Fluxograma da fun¸c˜ao de envio pela porta s´erie
104 CAP´ITULO 4. CAP´ITULO DE COMUNICAC¸ ˜AO E CONTROLO
fun¸c˜ao que segue um funcionamento como o que est´a representado na m´aquina de
estados da do esquema da Figura 4.23.
Depois de converter a mensagem CAN para o formato da frame Serial, o programa
coloca a 1 a flag do buffer de sa´ıda. Quando o valor da flag ´e 1, a m´aquina de
estados passa para o segundo estado. Se a flag estiver a 0, a fun¸c˜ao fica a aguardar
que o buffer esteja pronto a enviar.
No segundo estado, a fun¸c˜oes verifica o estado da porta s´erie. Se a porta s´erie n˜ao
estiver pronta a enviar, a m´aquina de estados manter-se nesta etapa. Mas se a porta
estiver livre dispon´ıvel, o programa salta de estado.
No ´ultimo estado o programa envia um valor do buffer de sa´ıda que cont´em a
mensagem. Enviado o valor, o programa toma uma decis˜ao: tentar enviar mais
valores, ou voltar ao estado inicial. Se a mensagem ainda n˜ao foi totalmente enviada,
o programa volta ao estado 2 e o processo volta a repetir-se enquanto todos os valores
da mensagem n˜ao forem enviados. Quando a mensagem foi completamente enviada,
a fun¸c˜ao vSerial SendBuffer inverte o estado da flag do buffer e volta ao estado
inicial, onde volta a ficar `a espera que o buffer tenha uma mensagem codificada
5
Cap´ıtulo de Processamento
Digital de Imagem
Neste cap´ıtulo ser˜ao descritos os algoritmos utilizados para processar as imagens ad-
quiridas, descrevendo algumas t´ecnicas existentes de processamento digital de ima-
gem e explicando de que forma s˜ao usadas para detetar e seguir o movimento de pei-
xes. Os conceitos de processamento digital de imagem e vis˜ao computacional ser˜ao
discutidos no aspeto te´orico e pr´atico, apresentando exemplos de implementa¸c˜ao.
Ser´a ainda explicada a aplica¸c˜ao desenvolvida para fazer a dete¸c˜ao, seguimento
e contagem de peixes, descrevendo o funcionamento geral da mesma bem como
t´ecnicas espec´ıficas dentro da aplica¸c˜ao. Os resultados das t´ecnicas de processamento
de imagem utilizadas ser˜ao apresentados de forma mais detalhada e descriminada
no cap´ıtulo de Testes e Resultados.
A an´alise do movimento dos peixes pode ser usado como indicador da forma como
o seu desenvolvimento pode ser influenciado por elementos presentes no seu habitat
ou condi¸c˜oes (temperatura, polui¸c˜ao, concentra¸c˜ao de oxig´enio, etc) que os afetem
106 CAP´ITULO 5. CAP´ITULO DE PROCESSAMENTO DIGITAL DE IMAGEM
diretamente.