Comunicacao USB

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Comunicacao USB

Mensagem por Admin em Ter 24 Set - 11:14:41

Olá pessoal!!
Mostrarei um exemplo de como criar um software capaz de comunicar com um PIC via USB utlizando a biblioteca https://sites.google.com/site/microcontrolandos/arquivos/UsbLibrary.dll.

Código:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

using UsbLibrary;

namespace Test
{
   public partial class MainForm : Form
   {
      //Cria o objeto USB
      UsbHidPort usb = new UsbHidPort();
            
      public MainForm()
      {
         InitializeComponent();
         //Define vid e pid
         usb.VendorId = 0x1234; //VID
         usb.ProductId = 0x0001; //PID
         
         //Eventos da USB
         
         usb.OnSpecifiedDeviceArrived += delegate
         {
            MessageBox.Show( "Seu dispositivo foi conectado" );
         };
         
         usb.OnSpecifiedDeviceRemoved += delegate
         {
            MessageBox.Show( "Seu dispositivo foi removido" );
         };
         
         usb.OnDeviceArrived += delegate
         {
            MessageBox.Show( "Algum dispositivo foi conectado" );
         };
         
         usb.OnDeviceRemoved += delegate
         {
            MessageBox.Show( "Algum dispositivo foi removido" );
         };
         
         usb.OnDataRecieved += DadosRecebidos;
      }
      
      #region Código obrigatório
         protected override void OnHandleCreated(EventArgs e)
         {
               base.OnHandleCreated(e);
               usb.RegisterHandle(Handle);
        }
         protected override void WndProc(ref Message m)
         {
               usb.ParseMessages(ref m);
               base.WndProc(ref m);
         }
         #endregion
         
         void DadosRecebidos( object sender, DataRecievedEventArgs e )
         {
            EnviarDados( e.data );
         }
         
         void EnviarDados( byte[] dados )
         {
            usb.SpecifiedDevice.SendData( dados );
         }
   }
}   


Última edição por Admin em Seg 6 Jan - 11:49:10, editado 2 vez(es)

Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por JuniorLima em Seg 6 Jan - 0:32:04

Ao todo, quantos são os métodos desta classe ? teria como você fazer uam espécie de documentação desta biblioteca pra gente Tiago, explicando a chamada dos métodos e suas funções? Pelo menos as principais como: Leitura, escrita, Conexão, Desconexão, etc. Seria ótimo. Obrigado

JuniorLima

Mensagens : 10
Data de inscrição : 06/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Comunicação USB Proteus Windows 8

Mensagem por JuniorLima em Seg 6 Jan - 0:45:50

Olá pessoal,

Aproveitando o tópico aberto sobre comunicação USB usando a plataforma .NET com C#, queria saber com vocês se eu consigo fazer uma Simulação no Proteus da comunicação do Supervisório que eu criar no Visual Studio com o circuito criado no Proteus usando na máquina o Windows 8 64 bits?

É isso ae... parabéns ae pelo fórum!!!!

JuniorLima

Mensagens : 10
Data de inscrição : 06/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por JuniorLima em Seg 6 Jan - 10:25:38

Aonde e como eu passo meus parâmetro de VID e PID já pré configurada no arquivo USB.c do meu projeto utilizando esta biblioteca?

Obrigado.

JuniorLima

Mensagens : 10
Data de inscrição : 06/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Seg 6 Jan - 10:54:20

Olá.
Editei o meu post anterior, de uma olhada lá!!

Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por JuniorLima em Seg 6 Jan - 11:09:51

Agora complicou..

No Programa Controlador USB você usa da seguinte maneira:


using UsbLibrary;
namespace ControladorUSB
{
public partial class MainForm : Form
{
Win32Usb winUsb = new Win32Usb();

enum Comandos {None=0, Analog, DigitalIn, DigitalOut, PWM};

byte[] UsbWriteData = new byte[65];

public MainForm()
{
InitializeComponent();
}


E AGORA FICOU ASSIM:

using UsbLibrary;

namespace Test
{
  public partial class MainForm : Form
  {
     //Cria o objeto USB
     UsbHidPort usb = new UsbHidPort();
           
     public MainForm()
     {
        InitializeComponent();
        //Define vid e pid
        usb.VendorId = 0x1234; //VID
        usb.ProductId = 0x0001; //PID
      }


Qual a diferença entre este dois métodos?:

UsbHidPort usb = new UsbHidPort();    
Win32Usb winUsb = new Win32Usb();

Minha dúvida pode ser a das mais simples, mas talvez seja a de muitos que possam visitar o site, pode ajudar alguém...

Obrigado

JuniorLima

Mensagens : 10
Data de inscrição : 06/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Seg 6 Jan - 11:15:44

winUsb nao é usado...
O componente que realiza a comunicacao é o UsbHidPort.
Do jeito que eu postei lá em cima fica mais didático, pois no "ControladorUsb" o componente era declarado em outro arquivo.

Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por JuniorLima em Seg 6 Jan - 11:44:08

Então deixa eu ver se entendi....

1) Este WinUSB então não está fazendo nada no Programa.... Correto? (obs: Comentei ele no seu Programa e compilou normal)

2) Este método: Win32Usb winUsb = new Win32Usb();  Serve para que na realidade?

3) Quando você fala que o que realiza a comunicação é o: UsbHidPort, você esta falando do método: UsbHidPort usb = new UsbHidPort();    ou   do Componente USB que você adicionou no programa? (Inclusive o name do componente é usb)

4) Quando você diz que no programa o componente USB era declarado em outro arquivo, qual arquivo seria esse?

e... pra fechar....

5) Você diz... Selecione e arraste o componente USBLibrary para seu formulário e, edite suas propriedades e eventos. Quais propriedades eu mudo? não ví nenhuma propriedade que viesse a ser mudade...

Segue a imagem:
Anexos
TelaControladorUSB.jpg Tela do Visual C# marcada com as dúvidas.Você não tem permissão para fazer download dos arquivos anexados.(93 Kb) Baixado 3 vez(es)

JuniorLima

Mensagens : 10
Data de inscrição : 06/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Seg 6 Jan - 12:04:33

A classe WinUsb é usado pelo UsbHidPort para fazer as configurações da usb.

Tanto o componente adicionado no programa quanto o declarado "UsbHidPort usb = new UsbHidPort()" são do mesmo tipo. Veja, não use os dois jeitos( declarar UsbHidPort e adicionar ) tudo no mesmo programa, se nao ocorrerá conflito.

Eu utilizo o SharpDevelop pra programar e todos os Controles do formulario sao criados automaticamente e salvo em outro arquivo. No seu caso, abra o arquivo "MainForm.designer.cs".

Para alterar as propriedades voce tem que selecionar o componente. Na imagem que voce mostrou, estava selecionada a biblioteca.

Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por JuniorLima em Seg 6 Jan - 13:08:45

Isso que eu não consigo entender....

Se a classe WinUSB é usada pelo UsbHidPort para fazer as configurações da USB, porque que eu comentei a instância da classe no seu Programa e ele não me deu erro?

Porque você não faz o instanciamento da classe nesse novo exemplo do post?

JuniorLima

Mensagens : 10
Data de inscrição : 06/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Sab 11 Jan - 13:02:50

Como te falei, a classe WinUSB é usado internamente pela classe UsbHidPort é não é necessário declará-la.

Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Junior Lima em Sab 11 Jan - 13:39:12

Tiago... Aonde eu consigo ver todos os métodos e eventos desta classe USB que eu posso usar?

Não manjo muito ainda... Onde eu acho?

Valeu!

Junior Lima

Mensagens : 9
Data de inscrição : 26/10/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Sab 11 Jan - 13:57:55


Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Junior Lima em Sab 11 Jan - 14:06:33

Ah tá... entendeu... Mas Tiago,

Eu estou falando dos eventos da USB mesmo... por exemplo:

OnSpecifiedDeviceArrived
OnSpecifiedDeviceRemoved
OnDeviceArrived
OnDeviceRemoved
OnDataRecieved

Eu queria saber como faço para descobrir todos os métodos que eu posso usar... Ou são apenas esses mesmo?
Aonde eu vejo isso?

Junior Lima

Mensagens : 9
Data de inscrição : 26/10/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Junior Lima em Ter 1 Abr - 0:36:51

Thiago, teria como me ajudar???

Fiz o código mas o programa não dá nenhum sinal.
Não tem erro nenhum...

olha como ficou:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UsbLibrary;

namespace WindowsFormsApplication1
{
   
   public partial class Form1 : Form
   {
       UsbHidPort usbETEC = new UsbHidPort();

       byte[] BufferEscritaUSB = new byte[65];
       byte[] BufferAuxLeitura = new byte[65];
       
       public Form1()
       {
           InitializeComponent();
           try
           {
              usbETEC.ProductId = 1234;
              usbETEC.VendorId = 1234;
              usbETEC.CheckDevicePresent();
             
             

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }


           
       }

       #region Código obrigatório
       protected override void OnHandleCreated(EventArgs e)
       {
           base.OnHandleCreated(e);
           usbETEC.RegisterHandle(Handle);
       }
       protected override void WndProc(ref Message m)
       {
           usbETEC.ParseMessages(ref m);
           base.WndProc(ref m); // pass message on to base form
       }
       #endregion

     

       //********* Função Retorna Verdadeiro se QUALQUER dispositivo USB for CONECTADO
       void UsbOnDeviceArrived(object sender, EventArgs e)
       {
           lblPIC.Text = "Alguem Conectou";
       }

       //********* Função Retorna Verdadeiro se QUALQUER dispositivo USB for DESCONECTADO
       void UsbOnDeviceRemoved(object sender, EventArgs e)
       {
           lblPIC.Text = "Saiu Alguem";
       }

       //********* Função Retorna Verdadeiro se o dispositivo ESPCÍFICO USB for CONECTADO
       void UsbOnSpecifiedDeviceArrived(object sender, EventArgs e)
       {
           lblPIC.Text = "Conectou";
       }

       //********* Função Retorna Verdadeiro se o dispositivo ESPCÍFICO USB for DESCONECTADO
       void UsbOnSpecifiedDeviceRemoved(object sender, EventArgs e)
       {
           lblPIC.Text = "Desconectou";
       }

       //******** FUNÇÃO RESPONSÁVEL PELO RECEBIMENTO DOS DADOS DA USB  (PRECISA SER TRATADA... RODA EM OUTRA THREAD)
      /*
       void UsbOnDataRecieved(object sender, DataRecievedEventArgs args)
       {
           
           /*** Talvez use esse for para adequar os Indices da Matriz do PIC como do C#
           for (int i = 0; i < args.data.Length; i++)
           {
               BufferAuxLeitura[i] = args.data[i + 1];
           }
            ******
           

       }*/
       
   }
}

Junior Lima

Mensagens : 9
Data de inscrição : 26/10/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Dom 13 Abr - 7:57:38

Olá!
Voce não adicionou os eventos ao usbETEC.

usbETEC.OnDeviceRemoved += UsbOnDeviceRemoved;

Faça o mesmo para os outros...

Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Junior Lima em Dom 13 Abr - 11:14:10

Onde eu acrescento esses Eventos? Em qual lugar do meu código?

Obrigado pela ajuda.

Junior Lima

Mensagens : 9
Data de inscrição : 26/10/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Admin em Dom 13 Abr - 11:22:57

adicione apos:
Código:

usbETEC.VendorId = 1234;


Admin
Admin

Mensagens : 20
Data de inscrição : 16/03/2013
Idade : 23
Localização : Itajubá

Ver perfil do usuário http://microcontrolandos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Junior Lima em Dom 13 Abr - 12:03:21

Deu Ceeertooo!!!!  Very Happy Very Happy Very Happy 

Só uma observação: Quando eu coloco o sinal de += o próprio C# já cria a instância e a função.
Basta dar dois TAB.

Ficou assim então:

usbETEC.OnDataRecieved += new DataRecievedEventHandler(usbETEC_OnDataRecieved);
usbETEC.OnDataSend += new EventHandler(usbETEC_OnDataSend);
usbETEC.OnDeviceRemoved += new EventHandler(usbETEC_OnDeviceRemoved);
usbETEC.OnSpecifiedDeviceArrived += new EventHandler(usbETEC_OnSpecifiedDeviceArrived);
usbETEC.OnSpecifiedDeviceRemoved += new EventHandler(usbETEC_OnSpecifiedDeviceRemoved);
usbETEC.OnDeviceArrived += new EventHandler(usbETEC_OnDeviceArrived);

Valeu Thiago mais uma vez.

Junior Lima

Mensagens : 9
Data de inscrição : 26/10/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Comunicacao USB

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum