Bematech Software Partners

 
  • mai 28 2009

    Edição 37 – Criando a primeira aplicação

    Caro Parceiro,

    Dando continuidade ao nosso mini-curso sobre o microterminal FIT Básico, veremos agora como declarar as funções da BemaSB32.dll e de como utilizá-las na aplicação.

    Nesta edição, iremos iniciar com as funções de comunicação com o microterminal.

    Obs: Não podemos esquecer que na edição 31 fizemos a configuração do microterminal FIT Básico, definindo o seu IP para a comunicação e demais opções, e na edição 33 conhecemos a BemaSB32.dll e sua configuração. É importante estarmos com tudo isso preparado para podermos iniciar o desenvolvimento.

    - Declarando as Funções

    A declaração das funções varia de acordo com a linguagem de programação que é utilizada. Em nosso mini-curso, utilizaremos o Delphi 7 e o Visual Basic 6 nas implementações.

    • Declaração das Funções da BemaSB32.dll em Delphi

    function Bematech_FIT_IniciaComunicacao: integer; stdcall; external ‘BEMASB32.DLL’ ;
    function Bematech_FIT_FechaComunicacao: integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_SelecionaProtocolo( iProtocolo: integer ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_LimpaDisplay( Terminal: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_EscreveDisplay( Terminal: byte; Mensagem: string ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_PosicionaCursor( Terminal: byte; Linha: byte; Coluna: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_LerBuffer( Terminal: byte ): char; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_EnviaSerial( Terminal: byte; Dados: byte; Serial: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_ApagaLinha( Terminal: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_DeslocaCursorCima( Terminal: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_DeslocaCursorDireita( Terminal: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_VersaoFirmware( Terminal: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_ComandoGenerico( Terminal: byte; Comando: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_LeituraCodidoBarras( Terminal: byte ): integer; stdcall; external ‘BEMASB32.DLL’;
    function Bematech_FIT_EnviaComando( Comando: string ): integer; stdcall; external ‘BEMASB32.DLL’;

    • Declaração das Funções da BemaSB32.dll em Visual Basic

    Private Declare Function Bematech_FIT_IniciaComunicacao Lib “BemaSB32.dll” () As Integer
    Private Declare Function Bematech_FIT_FechaComunicacao Lib “BemaSB32.dll” () As Integer
    Private Declare Function Bematech_FIT_SelecionaProtocolo Lib “BemaSB32.dll” (ByVal Protocolo As Integer) As Integer
    Private Declare Function Bematech_FIT_LimpaDisplay Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_EscreveDisplay Lib “BemaSB32.dll” (ByVal Terminal As Byte, ByVal Mensagem As String) As Integer
    Private Declare Function Bematech_FIT_PosicionaCursor Lib “BemaSB32.dll” (ByVal Terminal As Byte, ByVal Linha As Byte, ByVal Coluna As Byte) As Integer
    Private Declare Function Bematech_FIT_LerBuffer Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_EnviaSerial Lib “BemaSB32.dll” (ByVal Terminal As Byte, ByVal Dados As Byte, ByVal Serial As Byte) As Integer
    Private Declare Function Bematech_FIT_ApagaLinha Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_DeslocaCursorCima Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_DeslocaCursorDireita Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_VersaoFirmware Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_ComandoGenerico Lib “BemaSB32.dll” (ByVal Terminal As Byte, ByVal Comando As Byte) As Integer
    Private Declare Function Bematech_FIT_LeituraCodidoBarras Lib “BemaSB32.dll” (ByVal Terminal As Byte) As Integer
    Private Declare Function Bematech_FIT_EnviaComando Lib “BemaSB32.dll” (ByVal Comando As String) As Integer

    - Iniciando a Comunicação

    Agora, vamos implementar em nossa aplicação de exemplo algumas funções para a comunicação com o microterminal FIT Básico.

    O primeiro passo é implementarmos a função que irá iniciar a comunicação com o microterminal – a função Bematech_FIT_IniciaComunicação. Esta função inicia os sockets de comunicação da dll, abrindo a porta configurada no arquivo BemaSB32.ini para “conversar” com o microterminal via TCP/IP.

    Então, vamos criar um botão no formulário para implementar esta função, chamando-o de “Iniciar Comunicação”. Abrindo o botão para codificar, criamos a variável iRetorno do tipo inteira para receber o retorno da função, e a implementamos assim:

    tela01

    - Em Delphi

    procedure TForm1.Button1Click(Sender: TObject);
    var
      iRetorno: integer;
      begin

      iRetorno := Bematech_FIT_IniciaComunicacao();

      if ( iRetorno = 0 ) then
        Application.MessageBox( ‘Erro de Inicialização!’, ‘ERRO’, MB_ICONINFORMATION + MB_OK );
    end;

    - Em VB

    Private Sub Command1_Click()
      Dim iRetorno As Integer

      iRetorno = Bematech_FIT_IniciaComunicacao

      If iRetorno = 0 Then ‘Verificação de retorno de erro da função’
        MsgBox “Erro de Inicialização”, vbInformation + vbOKOnly, “Atenção”
      End If
    End Sub

    Após a implementação do código, executamos o formulário e testamos a comunicação. Se tudo estiver correto, podemos observar a mudança de mensagem no display do microterminal, indicando que a comunicação foi estabelecida:

    img_desconectado ->  img_conectado

    Conforme o código acima, fizemos um teste na variável iRetorno para verificar se a execução foi bem sucedida, apresentando uma mensagem de erro caso não tenha conseguido iniciar os sockets de comunicação.

    - Finalizando a Comunicação

    Para finalizar a comunicação (sockets) é preciso usar a função Bematech_FIT_FechaComunicacao. Esta função irá apresentar no display do microterminal a mensagem de “Desconectado”, conforme a imagem apresentada acima.

    tela02

    - Em Delphi

    procedure TForm1.Button2Click(Sender: TObject);
    var
      iRetorno: integer; 
      begin

      iRetorno := Bematech_FIT_FechaComunicacao();

      if ( iRetorno = 0 ) then
        Application.MessageBox( ‘Erro de Fechamento!’, ‘ERRO’, MB_ICONINFORMATION + MB_OK );

    end;

    - Em VB

    Private Sub Command2_Click()
      Dim iRetorno As Integer

      iRetorno = Bematech_FIT_FechaComunicacao

      If iRetorno = 0 Then
        MsgBox “Erro na Finalização”, vbInformation + vbOKOnly, “Atenção”
      End If
    End Sub

    Neste código vemos que o procedimento é o mesmo que o de inicialização, até mesmo a forma de verificação da variável iRetorno.

    - Selecionando o Protocolo de Comunicação

    O microterminal FIT Básico permite trabalhar com dois tipos de protocolo: o VT-100 ESC e o VT-100 STX/ETX. Então, vamos implementar a função “Bematech_FIT_SelecionaProtocolo” que seleciona o protocolo para envio dos comandos, mas antes, usaremos no formulário uma regra para que possa ser escolhido qual protocolo se deseja utilizar.

    Para isso, inserimos um “GroupBox” e dois “RadioButton”, um para cada protocolo (conforme imagem abaixo).

    tela03

    Vamos implementar esta função dentro do botão “Iniciar Comunicação”, assim o protocolo já é setado.

    - Em Delphi

    procedure TForm1.Button1Click(Sender: TObject);
    var
      iRetorno: integer;
    begin

      iRetorno := Bematech_FIT_IniciaComunicacao();

      if ( iRetorno = 0 ) then
        Application.MessageBox( ‘Erro de Inicialização!’, ‘ERRO’, MB_ICONINFORMATION + MB_OK );

      if ( RadioButton1.Checked = True ) then
        begin
          iRetorno := Bematech_FIT_SelecionaProtocolo( 1 );
        end
      else
        begin
          iRetorno := Bematech_FIT_SelecionaProtocolo( 0 );
        end;

    end;

    - Em VB

    Private Sub Command1_Click()
      Dim iRetorno As Integer

      iRetorno = Bematech_FIT_IniciaComunicacao

      If iRetorno = 0 Then ‘Verificação de retorno de erro da função’
        MsgBox “Erro de Inicialização”, vbInformation + vbOKOnly, “Atenção”
      End If

      If Option1.Value = True Then
        iRetorno = Bematech_FIT_SelecionaProtocolo(1)
      Else
        iRetorno = Bematech_FIT_SelecionaProtocolo(0)
    End If

    End Sub

    - Verificando a Versão do Firmware

    Para termos a certeza de que tudo está funcionando corretamente, vamos implementar uma função que retorna do microterminal sua versão de software básico (firmware) – a função “Bematech_FIT_VersaoFirmware”. Além disso, é necessário usar uma outra função que irá trazer a versão do software básico, então implementamos também a função “Bematech_FIT_LerBuffer”.

    Antes de implementarmos o código, vamos criar um novo botão chamado “Versão do Firmware”, um “TextBox” para receber o número do terminal que iremos trabalhar e um campo “Memo” no caso do Delphi ou “ListBox” no caso do VB, para receber as informações da versão do firmware, conforme imagem:

    tela04

    No botão “Versão do Firmware” implementamos o código:

    - Em Delphi

    procedure TForm1.Button3Click(Sender: TObject);
    var
      tmp: Char;
      buffer: String;
    begin
      iRetorno := Bematech_FIT_VersaoFirmware( strtoint( Edit1.Text ) );
      if ( iRetorno = 0 ) then
        begin
          application.MessageBox(‘Erro na execução do comando!’,'ERRO’,MB_ICONINFORMATION + MB_OK );
        end
      else
        begin
          while ( tmp <> #03 ) do
            begin
              sleep( 100 );
              tmp := Bematech_FIT_LerBuffer( strtoint( Edit1.Text ) );
              buffer := buffer + tmp;
            end;
            Memo1.Text := buffer;
        end;
    end;

    - Em VB

    Private Sub Command3_Click()
      Dim iRetorno As Integer
      Dim tmp As Byte
      Dim buffer As String

      iRetorno = Bematech_FIT_VersaoFirmware(CInt(Text1.Text))

      If iRetorno = 0 Then ‘Verificação de retorno de erro da função’
        MsgBox “Erro na execução do comando”, vbInformation + vbOKOnly, “Atenção”
      Else
        buffer = “”
        Do While (Chr(tmp) <> Chr(3))
          Sleep (100)
          tmp = Bematech_FIT_LerBuffer(CInt(Text1.Text))
          buffer = buffer + Chr(tmp)
        Loop
      End If
      List1.AddItem (buffer)
    End Sub

    A função “Bematech_FIT_LerBuffer” retorna byte-a-byte os dados. Então, a implementamos dentro de um laço de repetição que é quebrado quando o último byte for “ETX” (3), que corresponde ao final da transmissão. Além disso, usamos um “Sleep” de 100 milisegundos para garantir o tráfego de pacotes na rede, assim evitando a perda dos dados. Este timer pode ser modificado dependendo do fluxo da rede.

    Próxima edição:

    Vamos ter uma interatividade maior com o microterminal FIT Básico, utilizando as funções de controle do Display.

    Não perca!

    Até lá e boas implementações!

    Related posts:

    1. 29ª Edição – Conhecendo o Microterminal FIT Integra Bematech Caro parceiro, Esta edição de nosso Flash-Tip destina-se ao conhecimento...
    2. Edição 48 – Explorando a MFD nas impressoras fiscais Bematech Caro parceiro, Muitos nos questionam sobre a usabilidade das impressoras...
    3. Transferência Eletrônica de Fundos (T.E.F.) – Discado – Passo 10/10 Realizando uma venda com mais de uma transação TEF Chegamos...
    4. Bematech Flash Tip – 8a. Edição – Programando para o micro-terminal SB-2030 E (Ethernet) Bematech Caro parceiro, Estamos iniciando uma série de Flash-Tips, em forma...
    5. Edição 76 – Acionando o Buzzer na Impressora Não Fiscal Caro Partner e Desenvolvedor, Um dos recursos disponíveis nas impressoras...

     

Nenhum Comentário

Deixe um comentário