How to create modbus rtu request

If you have serial Modbus/RTU slaves attached to embebbed serial modules, then you'll need to create the original Modbus/RTU requests to send. This is quite easily done with Python.

Projeto utilizando Device Drivers

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

segunda-feira, 22 de agosto de 2011

Programação Python Networking














O Python fornece dois níveis de acesso aos serviços de rede. Em um nível baixo, você pode acessar o suporte de socket básicos no sistema operacional subjacente, que permite implementar clientes e servidores para ambos os protocolos orientado a conexão e sem conexão.
Python também tem bibliotecas que fornecem o acesso de nível superior  a protocolos específicos em nível de aplicativo de rede, como FTP, HTTP, e assim por diante.
Este post tem como objetivo falar sobre programação de socket.

O que são sockets?
Sockets são interfaces para a comunicação via rede, quando se cria um socket,se está criando um canal de comunicação bidirecional entre o cliente/servidor.

Eles podem se comunicar dentro de um processo, entre processos na mesma máquina, ou entre processos em diferentes continentes.
Pode ser implementado ao longo de vários tipos de canais diferentes: sockets de domínio Unix, TCP, UDP, e assim por diante. A biblioteca de sockets fornece classes específicas para lidar com o transporte comum, bem como uma interface genérica para lidar com o resto.

  • Domain : A família de protocolos que serão utilizados como mecanismo de transporte. Estes valores são constantes, tais como AF_INET, PF_INET, PF_UNIX, PF_X25, e assim por diante.
  • Type : O tipo de comunicação entre os dois terminais, normalmente SOCK_STREAM para orientação a conexão protocolos e SOCK_DGRAM para protocolos de conexão.
  • Protocol :  Geralmente nulo, este campo pode ser usado para identificar uma variante de um protocolo dentro de um domínio e tipo.
  • Hostname :  O identificador de uma interface de rede.
  • Port : Cada servidor lista clientes "chamando" em uma ou mais portas. Uma porta pode ser um número de porta Fixnum, uma string contendo um número de porta, ou o nome de um serviço. 

O módulo de socket 

Para criar um socket, você deve usar a função socket.socket () disponível no módulo de socket, que tem a seguinte sintaxe:

s = socket.socket (socket_family, socket_type, protocol=0)

Parâmetros:
- socket_family : Este é ou AF_UNIX ou AF_INET.
- socket_type : Este é ou SOCK_STREAM ou SOCK_DGRAM.
- protocol : = 0 descartado.

Depois de ter objeto socket, então você pode usar as funções necessárias para criar o seu cliente ou o programa servidor. A tabela a seguir contem a lista de funções necessárias:

























 


Um servidor simples: 


Para escrever servidores de Internet, nós usamos a função de socket disponíveis no módulo para criar um objeto. Um objeto é então usado para chamar outras funções para configurar um servidor socket.
Agora chamar bind (função, hostname porta para especificar uma porta para o seu serviço na máquina host).
Em seguida, chamar o método de aceitar o objeto retornado. Este método aguarda até que um cliente se conecta à porta que você especificou, e retorna um objeto de conexão que representa a conexão com esse cliente.




#!/usr/bin/python           

import socket               # Importa o modulo de socket

s = socket.socket()         # Cria um objeto de socket
host = socket.gethostname() # Retorna o nome da máquina local
port = 12345                # Reserva uma porta para o seu serviço
s.bind((host, port))        # Bind para a porta

s.listen(5)                 # Esperar a conexão do cliente
while True:
   c, addr = s.accept()     # Estabelecer conexão com o cliente
   print 'Recebeu a conexão de', addr
   c.send('Conexão deu certo')
   c.close()                # Encerra a conexão

Um cliente simples: 

Agora vamos escrever um programa cliente muito simples que vai abrir uma conexão com uma determinada porta 12345 e determinado host.
O Socket.connect (hosname, porta) abre uma conexão TCP para o nome na porta.
Depois de ter um socket aberto, você pode lê-lo como qualquer outro objeto IO. Quando terminar, lembre-se de fechá-lo.
O código a seguir é um cliente muito simples que se conecta a um determinado host e porta, lê todos os dados disponíveis a partir do socket, e depois sai:

#!/usr/bin/python           

import socket             

s = socket.socket()         # Cria um objeto de socket
host = socket.gethostname() # Retorna o nome da máquina local
port = 12345                # Reserva uma porta para o seu serviço

s.connect((host, port))
print s.recv(1024)
s.close                     # encerra

Agora execute este server.py ( em background) e em seguida, execute client.py para ver o resultado.

# Após iria iniciar um servidor em background:
 $ Python server.py & 

 # Uma vez servidor é iniciado cliente executado:

 $ Python client.py
 
 Resultado: 

Recebeu a conexão de ('127.0.0.1', 48437) 
Conexão deu certo

quarta-feira, 17 de agosto de 2011

Device Drivers em Linux Embarcado

Recentemente apresentei na faculdade meu ultimo projeto ( trabalho de conclusão de curso) , onde tive a felicidade de poder escolher o tema desejado, eu escolhi : Device Drivers em Linux Embarcado. O desafio estava lançado. A ideia era conseguir explicar o que são device drivers porem voltado para um projeto prático colocando todos os detalhes de implementação.

Parte 1 - Bibliografia
Como já não é novidade , bons materiais sobre device drivers são em inglês, a maioria dos livros que abordam bem especificado este tema . Somente alguns artigos na internet e alguns blogs contém alguma informação util valida para um projeto maior, recomendo o  blog do Sergio Prado .  Como o projeto é uma monografia devemos evitar ao máximo sites, no meu  caso eu utilizei somente sites referente as especificacoes da placa que nós utilizamos e o webserver.

Parte 2 - Teoria
Primeiramente o desafio foi : Como abordar um tema destes de uma forma que qualquer leitor entenda? Não é uma tarefa simples, devemos seguir uma linha lógica de tópicos até chegarmos aonde queremos. No caso deste tema primeiramente, a ideia foi especificar seus métodos de funcionamento, como é a estrutura basica de um device driver , a maneira que ele interage com o sistema ( kernel space / user space) , dentre outras caracteristicas importantes para entendermos a parte prática.

Parte 3- Projeto Prático
O projeto prático foi feito da seguinte forma, com a ajuda do meu colega Ramon, nós escolhemos o kit Friendly ARM Mini 2440 onde decidimos fazer um device driver para a porta GPIO. Como podemos ver na figura abaixo:


O que esta porta irá controlar? Motores ( carro ) . Foi ai que a ideia se concretizou, batizamos de PorscheARM. A ideia era o seguinte : Controlar o carro via browser , ou seja, nós teriamos um webserver embarcado nesta placa, então nós utilizamos um webserver que é pequeno e eficiente para isto o Boa webserver . O sistema que utilizamos foi o Linux 2.6 baixado o ultimo kernel do proprio site da ARM. Para mostrar didaticamente o funcionamento de um device driver criamos um nó device para cada direção : direita, esquerda, pra baixo , pra cima . A pagina web (feita em CGI) mandava os comandos para o device driver que controlava os motores. (WEB) -> DEVICE -> Motores . Abaixo fotos do projeto











 Parte 3 - Utilizando o acelerometro do iphone como controle
Com o intuito de aprimorar mais o sistema foi feito um código em javascript que capturava a posição X,Y,Z do iphone e mandava pro nosso webserver e com isso atraves do device driver comunicava com os motores indo pra direção conforme orientava o celular. Note que não observamos nenhum atraso com este teste.


Parte 4 - Testes
Os testes do projeto foram feitos e filmados pelo Ramon , podemos ver os videos abaixo:

E testado no ginásio da faculdade




Quer ver mais detalhado?
Estou disponibilizando neste link o trabalho completo deste projeto, teórico e prático, onde os códigos fontes estão no anexo deste pdf compartilhado ou no github, segue o link do PDF :  TCC_Device Drivers em Linux Embarcado 

Espero ter ajudado alguém com este post . É uma área que tenho muito interesse e estou sempre disposta a compartilhar conhecimento sobre isto e espero que vocês compartilhem também. =)

 

 



segunda-feira, 15 de agosto de 2011

GIT - Breve guia para iniciantes

  Como foi falado anteriormente no post sobre controle de versões , o GIT é o sistema de controle de revisão/versão criado pelo  Linus Torvalds: famoso devido à falta de satisfação com as soluções existentes. A ênfase principal no projeto foi na velocidade, ou mais especificamente, a eficiência. GIT aborda muitas das deficiências dos sistemas anteriores, e faz tudo isso em muito menos tempo.


O que o GIT faz?
Vamos dizer que você está trabalhando na criação de um site para clientes. Eles afirmam o  que eles querem, você projetá-o, eles analisam e fazem revisões. Com cada conjunto de revisões do cliente, o site muda e cresce. Mais tarde, o cliente pode dizer "Eu gosto mais do jeito que estava em setembro do ano passado". Em circunstâncias normais, você tem um problema. Você não pode ter todos os arquivos e dados a partir desse momento, e seu código pode ter mudado tanto que reverter seria difícil ou impossível.
  O ponto de um sistema de controle de versões é a de resolver quase todos os problemas no parágrafo acima. Você pode acompanhar cada mudança no seu código e arquivos, e reverter em qualquer ponto de volta(point back) como as coisas eram.

Como o GIT funciona? 

O diretório de cada projeto tem seu repositório git próprio. Você mantem todos os seus arquivos para esse projeto nesse diretório, e, periodicamente, diz para o git  atualizar suas informações com o estado atual dos arquivos. Esse processo de mandar gravar o estado dos arquivos é um commit. Cada vez que você ''comitar'' (que deve ser frequentemente) git varre sobre todos os arquivos que ele foi instruído a rastrear e salva as diferenças nesses arquivos para o diretório git.. Cada commit torna-se um ponto para salvar novos pontos de desenvolvimento do seu projeto.
Opcionalmente, você pode empurrar seu repositório git locais para um host ( diretório online), como GITHUB. Isto permite que vários colaboradores mexam em um mesmo  projeto, em seguida, agrupar todos os commits locais em uma única atualização para o repositório online. Esta é uma das coisas que faz Git mais rápido de usar do que alguns outros VCS sistemas: você pode "comitar" com freqüência para seu repositório local sem desperdiçar tempo e largura de banda ter que fazer o upload para um servidor de cada para cada um. O que diferencia o git de outros sistemas é exatamente a velocidade.

Instalando GIT 


A maioria dos usuários Linux devem ter Git (ou git-core) disponíveis nos repositórios padrões de sua distro. Os usuários do Ubuntu podem instalá-lo clicando aqui , ou no terminal:
sudo apt-get install git-core 
 
  Estes exemplos são destinados para Linux, mas é bem parecido para todas as plataformas suportadas pelo Git.

Usando o GIT 


O processo de criação de um repositório Git local é rápido e fácil. Crie um diretório que você pretende usar para o seu projeto e abra seu terminal para esse local. Na linha de comando (terminal), digite o comando:
git init 
Isso irá criar o diretório git para manter suas informações repositório. Provavelmente, você vai querer começar a adicionar alguns arquivos. Vamos começar criando um arquivo README de teste, adicionando a lista do repositório de arquivos para assistir, então commitar o nosso arquivo para o repositório.
# Inserir um texto em um novo arquivo
 echo "TODO: Criar documentação" > README.txt

 # Agora diga ao Git para acompanhar as mudanças deste arquivo
 # Isso só precisa ser feito uma vez por arquivo
 git add README.txt

 # E agora salvar o estado no repositório
 git commit README.txt 
Você será levado para uma tela de editor de texto onde você deve digitar qualquer nota sobre este commit (log). Estes são geralmente breves resumos das mudanças que ocorreram desde o último commit. Uma vez que você salve e saia do editor de texto a confirmação deve ser concluída com êxito.
Adicionando e comprometendo cada arquivo individualmente ( se forem muitos),  pode ser entediante. Para contornar isso, você pode adicionar de uma só vez todos os arquivos no diretório atual com o comando:
# Observe a direita "."
 git add. 
e você pode cometer todos os conhecidos, os arquivos modificados de uma vez com
git commit-a 
Algumas outras opções de comando git útil incluem:
# Fazer um clone completo de repositório existente, como a partir do site
 #de um projeto de software
 git clone (git URL, ou seja:. //github.com / github/ linux-2.x.git ) 
note que 2.x , x é a versão que você esta utilizando no meu caso aqui 
é linux-2.6.git
 
# Mover / renomear um arquivo.  Isto poupa-lo de ter de remover e
 # adicionar novamente o arquivo
 # Se tivesse sido movido pelo bash
 git mv (fonte) (destino)

 # Apagar um arquivo e retire do repo Git
 rm git (target)

 # Veja ramos neste repositório
 git branch

 # Criar um novo ramo da árvore Git
 git branch (new branch name, ou seja, "experimental")

 # Mude de um ramo para outro
 git checkout (branch name, ou seja, "experimental")

 # Mesclar ramo (branch) em árvore atual
 git merge (branch) 

Isso, é claro, é apenas o começo do que Git pode fazer. Se você achar que é útil, eu recomendo o livro oficial da comunidade git  para ter uma idéia muito mais profunda de como usar esta ferramenta inteligente de software.



 

Curso online de Stanford grátis


Atualmente a tendência é termos uma série de cursos e aulas online facilitando o aprendizado em qualquer lugar do mundo. Uma novidade imperdivel é que professores da Universidade Stanford disponibilizaram gratuitamente o curso oficial de Introdução a Inteligência Artificial .

Cadastre no site : www.ai-class.com e espere as aulas a partir do dia 10 de outubro. As inscrições vão até o dia 20 de setembro, não perca esta chance!

2 semanas após anunciar o curso já tinha 56.000 estudantes cadastrados.