Ir para conteúdo
  • Cadastre-se

dev botao

Daruma DR800


Ver Solução Respondido por moacirg,
  • Este tópico foi criado há 1939 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

2 horas atrás, Robson Sousa disse:

Amigo, no caso do controla porta ativo quando faz a impressão você não executa os comandos Device.Ativar/Device.Desativar, é isso? E no caso de querer verificar se a impressora está ligada, como você verifica?

Bom dia Robson,

Para fazer a impressão eu Ativo o Device, efetuo a impressão e logo em seguida já desativo. Assim :

 dm_comum.Pos_Printer_Comum.Device.ativar;

dm_comum.Pos_Printer_Comum.Imprimir( '</ae>'+ stTexto);

dm_comum.Pos_Printer_Comum.Device.Desativar;

 

Agora pra saber o Status de retorno da impressora você pode usar a classe "LerStatusImpressora" do POSPRINTER.

Segue abaixo a classe feita pela equipe ACBR  pra vc entender os retornos e logo em seguida minha implementação, veja se ajuda em algo.

procedure TACBrEscDaruma.LerStatus(var AStatus: TACBrPosPrinterStatus);
var
  B: Byte;
begin
  try
    B := Ord(fpPosPrinter.TxRx( ENQ )[1]);
    if TestBit(B, 0) then
      AStatus := AStatus + [stImprimindo];
    if TestBit(B, 3) then
      AStatus := AStatus + [stErro];
    if not TestBit(B, 4) then
      AStatus := AStatus + [stOffLine];
    if TestBit(B, 5) then
      AStatus := AStatus + [stSemPapel];
    if TestBit(B, 7) then
      AStatus := AStatus + [stTampaAberta];

    B := Ord(fpPosPrinter.TxRx( GS + ENQ )[1]);
    if TestBit(B, 0) then
      AStatus := AStatus + [stPoucoPapel];
    if TestBit(B, 1) then
      AStatus := AStatus + [stSemPapel];
    if TestBit(B, 3) then
      AStatus := AStatus + [stOffLine];
    if not TestBit(B, 4) then
      AStatus := AStatus + [stTampaAberta];  // Sem papel sobre o sensor
    if TestBit(B, 6) then
      AStatus := AStatus + [stErro];  // Impressora em falha
    if TestBit(B, 7) then
      AStatus := AStatus + [stGavetaAberta];  // Impressora em falha
  except
    AStatus := AStatus + [stErro];
  end;
end;

--------------------------------------------------------------

Minha implementação. 

function Tform_principal.sat_ler_status_pos_printer: boolean;
var
  status: TACBrPosPrinterStatus;
  i: TACBrPosTipoStatus;
begin

  result := true;

  if fl_verifica_status_pos_printer = false then
      exit;

  astr_pos_impressao := EmptyStr;
  status := dm_comum.Pos_Printer_Comum.LerStatusImpressora;

  if status = [] then
       ShowMessage('Nenhum status encontrado')
   else
   begin
       for i := Low(TACBrPosTipoStatus) to High(TACBrPosTipoStatus) do
       begin
           if i in status then
           begin
               astr_pos_impressao := astr_pos_impressao + GetEnumName(TypeInfo(TACBrPosTipoStatus), integer(i)) + ', ';
               if (integer(i) =  0)
                  or (integer(i) =  3)
                  or (integer(i) =  6)
                  or (integer(i) =  7) then
                   result := false;

           end;
        end;
   end;

   if result = false then
   begin
         raise Exception.Create('Erro Status Impressora ' + astr_pos_impressao );
   end;

//         ShowMessage(astr);
//    0         1             2            3             4              5            6           7
//  stErro, stNaoSerial, stPoucoPapel, stSemPapel, stGavetaAberta, stImprimindo, stOffLine, stTampaAberta);

end;

--------------------------------

Espero ter clareado em algo.

 

Abraço

 

 

Em 22/02/2016 at 10:12, moacirg disse:

Liguei no suporte da Daruma, ainda não fiz os testes porque minha DR800 não esta comigo hoje.

Na conversa com o Regys nos posts acima, ele disse que não teve nenhum problema com a impressora. Já todos nós, estamos aqui apanhando.

No meu caso,  estava usando a impressora na porta serial, e ao plugar o cabo atrás dela, aparece a opção Configurar Velocidade Porta Serial no menu do Firmware da impressora. Esta opção aparece quando o cabo serial é conectado atrás ou se nenhum cabo estiver conectado. Se colocar cabo USB essa opçao nao aparece.

Pra aparecer o menu do Firmware é preciso Desligar a impressora, e ligar novamente com o botão Avanço pressionado.

Na DR 700, tinhamos o Daruma Tool pra configurar a Velocidade da Porta.

Já na Dr 800, esse menu esta na propria impressora.

As vezes pode ser isso que o Régys conseguiu imprimir sem problemas e nós estamos aqui quebrando a cabeça.

Ela vem de Fabrica com o Baud de 9600.

Testem e postem galera !!!!!

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Depois de varias tentativas frustradas (emissão de papel em branco, impressão bugada), em emitir a Danfe com Fortes + driver spooler da dr800, tive que criar em minha aplicação, rotina pra usar EscPos somente com a dr800. Minha duvida é onde configuro no componente o espaçamento de linhas antes do corte do papel?

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Moderadores

Boa Tarde,

Estava enfrentando o problema descrito em uma DR800 onde o controle da porta era feito pela aplicação mas como era um WebService ele abrir e fechava a porta a cada processo como se o controle da porta estive-se True.

O QR hora era impresso hora não, assim como o Texto impresso posteriormente no NFCe e SAT, após setar o valor FPosPrinter.Device.SendBytesInterval := 100; como mencionado pelo @Régys Silveira o problema parou de ocorrer, realizei o teste utilizando os modelos DR700 e DR800 utilizando o valor marcado e em ambas a impressão foi realizada com sucesso não sendo necessário adicionar o Sleep como mencionado em outros comentários.

Pedro E. Braga

Product Owner/ System Analyst / Programmer

WhatsApp (47) 98925-0951

E-mail: [email protected]

Skype: [email protected]

http://bragatec.blogspot.com.br

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Pessoal, aconteceu esse problema comigo tambem. Na minha minha maquina funcionava e no cliente não, ai comecei a analisar a instalação do sistema e da impressora, foi quando descobri que a instalação da impressora do cliente fui feita com o driver baixado do site da daruma atualizado e na minha maquina estava com o driver da daruma baixado a um ano atrás. Minha conclusão é que o problema foi gerado pela atualização do driver pela daruma, por isso em alguns da o problema e em outros não. 

Espero ter contribuido...

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

 

Em 23/09/2016 at 14:29, Pedro E. Braga disse:

Boa Tarde,

Estava enfrentando o problema descrito em uma DR800 onde o controle da porta era feito pela aplicação mas como era um WebService ele abrir e fechava a porta a cada processo como se o controle da porta estive-se True.

O QR hora era impresso hora não, assim como o Texto impresso posteriormente no NFCe e SAT, após setar o valor FPosPrinter.Device.SendBytesInterval := 100; como mencionado pelo @Régys Silveira o problema parou de ocorrer, realizei o teste utilizando os modelos DR700 e DR800 utilizando o valor marcado e em ambas a impressão foi realizada com sucesso não sendo necessário adicionar o Sleep como mencionado em outros comentários.

Dessa forma também me resolveu!

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

Bom dia sobre a impressora DR800 tente atualizar a bios da mesma pra que não trave nem dê erro na hora da impressão.

http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2011/Utilitarios/AtualizaDR800.zip

Pra saber em qual versão está sua impressora desligue a mesma e ligue com o botão AVANÇO pressionado ate imprimir uma mensagem dai dá um click em avanço pra saber qual a versão atual da sua impressora.

A própria Daruma orienta atualizar a versão sempre que puder.

Link para o comentário
Compartilhar em outros sites

  • 8 meses depois ...
  • Membros Pro

Bom dia pessoal.

Estou com o mesmo problema, e seguindo as instruções acima nada mudou.

Alguém encontrou uma solução diferente?

O pessoal da Daruma reconhece que há problemas com a DR800 e dizem que estão buscando soluções, mas até agora nada. Indicam usar a sua framework, mas se temos o AcBr para portabilidade com várias marcas, porque ficar limitado a dll do fabricante? Creio que eles estão forçando barra para nossos aplicativos ser exclusivo para eles.

Link para o comentário
Compartilhar em outros sites

Galera no Forum se matando com a Daruma Dr 800. Antes tivesse ficado apenas na DR 700 que rodava que era uma beleza e nunca dava esses paus.

Eu trabalho com a DR 800 tmb no seu SW de Automação e cada cliente é uma Aventura.

Se contar pra vcs o que eu fiz na Classe Synaser.pas pra resolver esses erros da Daruma, acho que serei Expulso do Forum, mas vamos lá.

No meu caso, a Daruma retornava um Erro de Time Out 9997 causado pela ExceptCheck do Synaser.pas toda vez que  : Controle da porta estava True  e Fazia uma impressão, Acionava a Guilhotina e logo em seguida mandava outra impressão.

Tentei dar Intervalos de Bytes de toda forma e não foi, unica maneira que consegui foi colocando Controla da porta = false e alterando o Synaser.pas da seguinte forma.

APENAS quando rodo minha aplicação com a Daruma Dr 800,  eu seto a Flag para FALSE e não passa pela Procedure ExceptCheck.

Me desculpem a ignorancia, mas a unica forma que consegui foi assim.

procedure TBlockSerial.ExceptCheck;
var
  e: ESynaSerError;
  s: string;
  ini:Tinifile;
begin

    ini := TIniFile.Create(ExtractFilePath(Application.exename)  + 'conexao_sat.ini');
    if ini.ValueExists('extrato', 'fl_except_check_pos_printer') = false then
    ini.WriteBool('extrato', 'fl_except_check_pos_printer', true);

    if ini.ReadBool ('extrato', 'fl_except_check_pos_printer', false) = true then
     begin
            if FRaiseExcept and (FLastError <> sOK) then
            begin
              s := GetErrorDesc(FLastError);
              e := ESynaSerError.CreateFmt('Communication error %d: %s', [FLastError, s]);
              e.ErrorCode := FLastError;
              e.ErrorMessage := s;
              raise e;
            end;
     end;
    ini.free;
end;

A Daruma DR 800 retorna Erro sempre que é enviado impressões seguidas acionando Guilhotina sem que ela tenha terminado o trabalho anterior, já outras marcas como Elgin, Bematech isso não acontece. Pelo menos comigo foi assim.

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

Bom dia Pessoal,

  No dia 23/10/2017 fizemos um ckecklist com pessoal da Daruma, atualizamos firmware da dr800, fizemos updates do Windows 7, e algumas configurações de hibernação e controle de energia, desde então os erros diminuirão praticamente para zero, com um fluxo de mais de 200 NFCe(s) diárias.

 

Abraço a todos

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia

Tambem fiz este checklist com a daruma, mas informei para eles a invialibilidade de se fazer isso em todas as maquinas instaladas nos clientes devido a tempo e ambiente além da questão da versão do Windows como 7, 8, 10 e 32/64bits

Pedi a eles uma solução mais automatizada.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Obrigado Daniel Simoes pela informação. 

Realmente a Daruma informa que com a DR800 ETH não há problemas, mas acontece que ela é mais cara no mercado, então quando chegamos nos clientes eles já compraram a DR800 L, que é a mais barata, e aí o problema persiste.

Outra coisa: Também não consigui configurar a conexão com a opção RAW: disponivel no PosPrinterTeste. Há alguma dica: A forma de utilização é instalar o spooler e então selecionar a porta RAW:DR800 SPOOLER ?

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Veja se está caído na fila de Spool do Windows...se não estiver provavelmente você configurou errado ou driver Spool não está corretamente instalado 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Membros Pro

Boa tarde

Depois de muitos testes e pesquisas, e também sem a ajuda eficaz da Daruma, consegui usar a Daruma através do EscPos com os seguintes parametros, baseado no exemplo do AcBr para uso do EscPos

  Frm_Nfe2.ACBrPosPrinter1.Desativar;
  try
   with Frm_Nfe2 do
   begin
     ACBrPosPrinter1.Modelo                := TACBrPosPrinterModelo( INI.ReadInteger('PosPrinter','Modelo',  StrToInt(Frm_principal.ModeloImpressoraNF))) ;
     ACBrPosPrinter1.Porta                 := INI.ReadString('PosPrinter','Porta',ACBrPosPrinter1.Porta);
//     cbxPortaChange(nil);
     ACBrPosPrinter1.ColunasFonteNormal    := INI.ReadInteger('PosPrinter','Colunas',ACBrPosPrinter1.ColunasFonteNormal);
     ACBrPosPrinter1.EspacoEntreLinhas     := INI.ReadInteger('PosPrinter','EspacoEntreLinhas',ACBrPosPrinter1.EspacoEntreLinhas);
     ACBrPosPrinter1.LinhasBuffer          := INI.ReadInteger('PosPrinter','LinhasBuffer',ACBrPosPrinter1.LinhasBuffer);
     ACBrPosPrinter1.LinhasEntreCupons     := INI.ReadInteger('PosPrinter','LinhasPular',ACBrPosPrinter1.LinhasEntreCupons);
     ACBrPosPrinter1.CortaPapel            := INI.ReadBool('PosPrinter','CortarPapel',ACBrPosPrinter1.CortaPapel);
     ACBrPosPrinter1.ControlePorta         := INI.ReadBool('PosPrinter','ControlePorta',ACBrPosPrinter1.ControlePorta);
     ACBrPosPrinter1.TraduzirTags          := INI.ReadBool('PosPrinter','TraduzirTags',ACBrPosPrinter1.TraduzirTags);
     ACBrPosPrinter1.IgnorarTags           := INI.ReadBool('PosPrinter','IgnorarTags',ACBrPosPrinter1.IgnorarTags);
     ACBrPosPrinter1.ArqLOG                := INI.ReadString('PosPrinter','ArqLog',ACBrPosPrinter1.ArqLOG);
     ACBrPosPrinter1.PaginaDeCodigo        := TACBrPosPaginaCodigo( INI.ReadInteger('PosPrinter','PaginaDeCodigo',2));
     ACBrPosPrinter1.Device.ParamsString   := INI.ReadString('PosPrinter','ParamsString',ACBrPosPrinter1.Device.ParamsString );
     ACBrPosPrinter1.ConfigBarras.LarguraLinha := INI.ReadInteger('Barras','Largura',ACBrPosPrinter1.ConfigBarras.LarguraLinha);
     ACBrPosPrinter1.ConfigBarras.Altura   := INI.ReadInteger('Barras','Altura',ACBrPosPrinter1.ConfigBarras.Altura);
     ACBrPosPrinter1.ConfigBarras.MostrarCodigo := INI.ReadBool('Barras','HRI',ACBrPosPrinter1.ConfigBarras.MostrarCodigo);
     ACBrPosPrinter1.ConfigQRCode.Tipo     := INI.ReadInteger('QRCode','Tipo',ACBrPosPrinter1.ConfigQRCode.Tipo);
     ACBrPosPrinter1.ConfigQRCode.LarguraModulo := INI.ReadInteger('QRCode','LarguraModulo',ACBrPosPrinter1.ConfigQRCode.LarguraModulo);
     ACBrPosPrinter1.ConfigQRCode.ErrorLevel := INI.ReadInteger('QRCode','ErrorLevel',ACBrPosPrinter1.ConfigQRCode.ErrorLevel);
     ACBrPosPrinter1.ConfigLogo.KeyCode1   := INI.ReadInteger('Logo','KC1',ACBrPosPrinter1.ConfigLogo.KeyCode1);
     ACBrPosPrinter1.ConfigLogo.KeyCode2   := INI.ReadInteger('Logo','KC2',ACBrPosPrinter1.ConfigLogo.KeyCode2);
     ACBrPosPrinter1.ConfigLogo.FatorX     := INI.ReadInteger('Logo','FatorX',ACBrPosPrinter1.ConfigLogo.FatorX);
     ACBrPosPrinter1.ConfigLogo.FatorY     := INI.ReadInteger('Logo','FatorY',ACBrPosPrinter1.ConfigLogo.FatorY);
     if Frm_Nfe2.ACBrPosPrinter1.Modelo = ppEscDaruma then
      begin
        Frm_Nfe2.ACBrPosPrinter1.ConfigQRCode.LarguraModulo := 1;
        Frm_Nfe2.ACBrPosPrinter1.Device.SendBytesInterval   := 150;
        Frm_Nfe2.ACBrPosPrinter1.Device.TimeOut             := 10;
        Frm_Nfe2.ACBrPosPrinter1.LinhasBuffer               := 20;
        Frm_Nfe2.ACBrPosPrinter1.ControlePorta              := False;
      end;
   end;
  finally
     INI.Free ;
  end ;
=====

As vezes o windows bloqueia  a gravação do arquivo temporário no Spool do windows.

Então vá nas pastas do System32 Spool e Printer, e em segurança dê controle total para o usuário Todos

 

 

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Administradores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1939 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.