Ir para conteúdo
Fórum Script Brasil
  • 0

Receber Informação De Leitor


alexandremanowar

Pergunta

E aí pessoal beleza

Eu tenho uma máquina colleter TED-1010 TCP/IP, essa máquina tem um pequeno teclado numérico e um enter, vem com uma dll de controle e um software que configura o ip dela na rede e cria uma porta de comunicação, no caso deixei como com4 ela fica plugada direto no meu suite, a empresa libera essa dll para usar em vb onde eu crio a comunicação de envio de dados da máquina de um software em vb e o vb devolve resposta no pequeno visor que a máquina tem.

O modelo da máquina que comprei é esse : Modelo da máquina

A máquina vem com um software em vb de teste instalei a máquina e o software em vb e a comicação funcionou normal tudo o que digitava na máquina e teclava o enter dela aparecia no software vb, e o software vb jogava uma MSN na tela da máquina, o software de exemplo dos caras foi feito em vb 6, mas eu estou estudando vb.net 2005 para desktop

Eu li o manual que veio com a máquina e entendi o seguinte com essa dll eu abro a porta que esta a máquina e recebo a informação e evio a resposta, quando eu fechar o programa ele vai fechar a porta

Eu gostaria de aprender como eu faço um software desse em vb.net 2005 desktop nunca fiz, como eu uso essa biblioteca para receber os dados da máquina e exibir na tela em um label e enviar a resposta de recebimento para o visar da máquina?

O nome da dll é: TIBethvb.dll

Alguém pode me explicar? obrigado

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

E aí Graymalkin beleza

Consegui fazer e deu tudo certo, achei uns tutoriais na net e consegui chamar a dll e executar a função de enviar e receber informação da máquina olha como esta o código:

Esse é o modulo:

Module Funcoes
    Public Declare Function abreporta Lib "caminho\TIBethvb.dll" (ByVal n%) As Integer
    Public Declare Function closecom Lib "caminho\TIBethvb.dll" (ByVal m%) As Integer
    Public Declare Function envtmsg Lib "caminho\TIBethvb.dll" (ByVal mConj%, ByVal mcan%, ByVal mstr$) As Integer
    Public Declare Function getcnt Lib "C:\caminho\TIBethvb.dll" (ByRef mstr$, ByRef mcan%, ByVal conj%) As Integer

    Public x As Integer

   
End Module
Esse é o código que esta no form:
Public Class Principal

    Public Sub Principal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        x = abreporta(4)
       

    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
        x = envtmsg(0, 0, "Graças a Deus")

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick


        'Dim r2 As String
        Dim canal As Integer
        Dim conjunto As Integer
        Dim recebe As String
        recebe = Space(255)
        conjunto = 0
        Dim retorno As Integer

        retorno = getcnt(recebe, canal, conjunto)
        If retorno <> 0 Then
            MessageBox.Show(recebe,"resultado")
        End If



    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        x = closecom(0)
        End
    End Sub


End Class

Existe alguma forma melhor de fazer isso? Se existir me explique por favor

Tenho uma dúvida ainda nesse tópico por exemplo eu declarei a funcção dessa forma no móduloPublic Declare Function abreporta Lib "C:\vb\Deals Access\TIBethvb.dll" (ByVal n%) As Integer

Essa parte: "C:\vb\projetoTIBethvb.dll" eu tive que declarar o caminho físico da dll não tem como eu incluir ela no meu projeto para não precisar colocar o caminho físico? porque dessa forma na hora de distribuir o projeto vai dar problemas por que ele vai ser instalado dentro do arquivos de programas!

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

  • 0

Uma forma mais organizada seria colocar tudo em uma classe. Inclusive a parte do Timer você poderia embutir em um método de forma que você não precisaria ter um no form que fosse fazer a comunicação.

Quanto ao caminho, acredito que se você colocar a biblioteca junto com as demais bibliotecas do seu programa (que ficam em bin\Debug e/ou bin\Release), basta você informar o nome ("TIBethvb.dll") para que ele encontre.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E a e graymalkin beleza

Então não entendi essa parte:

Uma forma mais organizada seria colocar tudo em uma classe. Inclusive a parte do Timer você poderia embutir em um método de forma que você não precisaria ter um no form que fosse fazer a comunicação.

Parece ser mais organizada você poderia me explicar como se faz?

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Veja como ficaria o seu código em uma classe:

Public Class Leitor
    Private Declare Function abreporta Lib "TIBethvb.dll" (ByVal n As Integer) As Integer
    Private Declare Function closecom Lib "TIBethvb.dll" (ByVal m As Integer) As Integer
    Private Declare Function envtmsg Lib "TIBethvb.dll" (ByVal mConj As Integer, ByVal mcan As Integer, ByVal mstr As String) As Integer
    Private Declare Function getcnt Lib "TIBethvb.dll" (ByRef mstr As String, ByRef mcan As Integer, ByVal conj As Integer) As Integer
    Private WithEvents tempo As Timer

    Public Event DadosRecebidos(ByVal dados As String)

    Public Sub New(ByVal porta As Integer)
        abreporta(4)
        tempo = New Timer()
        tempo.Interval = 100
        tempo.Start()
    End Sub

    Public Sub Enviar(ByVal dados As String)
        envtmsg(0, 0, dados)
    End Sub

    Protected Overrides Sub Finalize()
        MyBase.Finalize()
        tempo.Stop()
        closecom(0)
    End Sub

    Private Sub tempo_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tempo.Tick
        Dim recebe As String = Space(255)
        Dim retorno As Integer

        retorno = getcnt(recebe, 0, 0)
        If retorno <> 0 Then
            RaiseEvent DadosRecebidos(recebe)
        End If
    End Sub
End Class
Depois, você poderia usá-la em um form de uma maneira mais limpa e clara:
Public Class Form1
    Private WithEvents L As Leitor

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        L = New Leitor(4) 'Criando o objeto
    End Sub

    Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
        L.Enviar("Enviando dados!") 'Enviando dados por um método
    End Sub

    Private Sub L_DadosRecebidos(ByVal dados As String) Handles L.DadosRecebidos
        MessageBox.Show(dados) 'Recebendo dados por um evento
    End Sub
End Class

Capisce? ;)

Obs: não pude testar o código porque não possuo o leitor aqui, por isso pode ser que seja necessário fazer algum ajuste no código da classe.

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi cara valeu, realmente dessa forma fica mais claro o código.

Aproveitando que estamos falando de limpeza de código rsrs eu fiz um módulo de conexão dessa forma:

Module conexao_local
    'conecta ao banco de dados local
    Public conectar_local As String = "server=localhost;user id=root;password='';database=banco"
    Public conn_local As New MySqlConnection(conectar_local)
End Module
Aí dentro do form é que eu estou puxando o restante da consulta dessa forma:
....
   conn_net.Open()

                Dim consulta As New MySqlCommand("select * from cadastro where codigo = " & Trim(recebe) & " limit 1", conn_net)
                Dim da As New MySqlDataAdapter(consulta)
                Dim ds As New DataSet()
                da.Fill(ds)
....
O que eu queria era deixar essa parte Dim da As New MySqlDataAdapter(consulta), Dim ds As New DataSet() junto com o módulo assim aqui eu só chamaria aí eu deixei no módulo desse jeito:
Module conexao_local
    'conecta ao banco de dados local
    Public conectar_local As String = "server=localhost;user id=root;password='';database=banco"
    Public conn_local As New MySqlConnection(conectar_local)

   Dim da As New MySqlDataAdapter
   Dim ds As New DataSet()
End Module
No módulo não deu pau mas não sei como chamar dentro do form! eu chamei assim:
....
   conn_local.Open()

                Dim consulta As New MySqlCommand("select * from banco where campo1 = " & Trim(recebe) & " limit 1", conn_local)
            da(consulta)
            da.Fill(ds)
....

Mas esta dando que da e ds não forão declados! Porque se já esta no módulo?

Outra coisa que eu gostaria de aprender é como deixar a função de consulta no módulo também ou seja essa parte Dim consulta As New MySqlCommand aí nos forms ou botões eu só chamava a consulta e jogava a query do banco. É possível?

Um outro problema que estou enfrentando é para reduzir a quantidade de carcteres de um string por exemplo quando pego a string de um campo do banco e armazeno eu uma variável e quero limitar em 10 caracteres para exibir na tela como se faz isso?

Velu pela força

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

  • 0
O que eu queria era deixar essa parte Dim da As New MySqlDataAdapter(consulta), Dim ds As New DataSet() junto com o módulo assim aqui eu só chamaria aí eu deixei no módulo desse jeito:
Concerteza, você está declarando essas variáveis como locais, não como públicas. Use a palavra chave Public ao invés de Dim.

Agora outra coisa: quando você coloca o New, você está chamando o Construtor, e o construtor pede parâmetros, por isso não dá certo. Faiz o Seguinte:

Public da as MySqlDataAdapter
Public ds as DataSet
Ai você coloca, quando for usar, o Construtor:
da = New MySqlDataAdapter(consulta)
ds = New DataSet()
Outra coisa que eu gostaria de aprender é como deixar a função de consulta no módulo também ou seja essa parte Dim consulta As New MySqlCommand aí nos forms ou botões eu só chamava a consulta e jogava a query do banco. É possível?
É só criar um procedimento, com essa sintaxe:
Public consulta As New MySqlCommand("select * from banco where campo1 = " & Trim(recebe) & " limit 1", conn_local)
consulta.executenonquery()

Aí toda vez que você chamar a Sub, o comando será executado.

Um outro problema que estou enfrentando é para reduzir a quantidade de carcteres de um string por exemplo quando pego a string de um campo do banco e armazeno eu uma variável e quero limitar em 10 caracteres para exibir na tela como se faz isso?

Ai depende, explica direito seu problema aí pra gente...

Flws!

Link para o comentário
Compartilhar em outros sites

  • 0

E aí beleza

Cara valeu pelas explicações!

O problema da string que estou tendo é o seguinte. Por exemplo eu faço uma consulta em um banco e um dos campos é o campo "nome" aí eu pego o nome que esta armazenado nesse campo que pode ser "Epamindas aaaa bbbb pereira dos campos matos nascimento" Aí esse nome é enorme e eu armazenei ele na variável "nome" e vou exibir em algum lugar porém quero exibir apenas os primeiros 10 caracteres e não o nome inteiro que esta na variável. Como eu faço isso?

Agora quanto as minhas outras perguntas acima, analisando bem é meio inútil declarar as mesmas dentro do módulo porque de certa forma eu tenho que repetir ela dentro do botão ou form que eu vou usar! logo só estou duplicando código. Ou estou errado?

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

  • 0
O problema da string que estou tendo é o seguinte. Por exemplo eu faço uma consulta em um banco e um dos campos é o campo "nome" aí eu pego o nome que esta armazenado nesse campo que pode ser "Epamindas aaaa bbbb pereira dos campos matos nascimento" Aí esse nome é enorme e eu armazenei ele na variável "nome" e vou exibir em algum lugar porém quero exibir apenas os primeiros 10 caracteres e não o nome inteiro que esta na variável. Como eu faço isso?
Isso dai voce pode fazer com o substring, utilizando essa sintaxe:

VARIAVELSTRING = VARIAVELSTRING.Substring

Ai se dá uma olhada nos parâmetros porque eu não lembro direito, mais esse método corta a string de acordo com os parâmetros...

Agora quanto as minhas outras perguntas acima, analisando bem é meio inútil declarar as mesmas dentro do módulo porque de certa forma eu tenho que repetir ela dentro do botão ou form que eu vou usar! logo só estou duplicando código. Ou estou errado?

Você está se referindo ao declarar o objeto no Módulo sem o New e no código com o New??? Não entendi direito, é isso?

Link para o comentário
Compartilhar em outros sites

  • 0
Agora quanto as minhas outras perguntas acima, analisando bem é meio inútil declarar as mesmas dentro do módulo porque de certa forma eu tenho que repetir ela dentro do botão ou form que eu vou usar! logo só estou duplicando código. Ou estou errado?

Não que seja inútil, mas pode tornar o programa mais complexo de ser analisado posteriormente. Amanhã ou depois quando você for olhar o código você vai ficar caçando de onde veio o danado do "da" ou do "ds", até que vai encontrá-los no módulo. Por isso é melhor declarar objetos no lugar que você realmente vai utilizá-los.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E a e pessoal beleza

Então fiz a quebra da variável dessa forma: VARIAVELSTRING = VARIAVELSTRING.Substring(0,16)

Funcionou legal

Entendi o esquemas dos da e ds. Vou declarar onde vou usar mesmo como disse o Graymalkin fica melhor na hora de mexer denovo no código.

Valeu pela força pessoal mais uma vez tive uma ótima aula aqui com o pessoal do fórum

Um abraço at+

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...