Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2180 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado
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 !!!!!

 

  • 1 mês depois ...
Postado

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?

  • 2 meses depois ...
  • Moderadores
Postado

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

  • 3 semanas depois ...
Postado

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...

  • Membros Pro
Postado

 

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!

  • 3 meses depois ...
Postado

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.

  • 8 meses depois ...
  • Membros Pro
Postado

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.

Postado (editado)

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
Postado

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

  • Membros Pro
Postado

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.

  • Membros Pro
Postado

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 ?

 

  • 1 ano depois...
Postado

Alguém conseguiu resolver de forma definitiva esse problema de perda de comunicação com a impressora Daruma DR800? Passei ontem a tarde toda com o suporte da daruma, atualizamos o software da impressora, atualizamos o driver... e não resolveu... 

  • Membros Pro
Postado

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
  • Administradores
Postado

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 !!

  • Este tópico foi criado há 2180 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.