Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Status do Papel #5

Open
jblqueiroz opened this issue Mar 23, 2023 · 12 comments
Open

Status do Papel #5

jblqueiroz opened this issue Mar 23, 2023 · 12 comments

Comments

@jblqueiroz
Copy link

Olá, tudo bem?
Estou utilizando a sua solução e achei excelente. Parabéns.
Utilizo a EPSON TM-T20x e utilizava PosPrinter para Framework e migrei para NetCore 7 utilizando a sua solução.

Antes no PosPrinter eu conseguia receber as informações de tampa aberta, sem papel, entre outros.

Existe algum método que recebe um retorno dos status de erro da impressora como os citados acima?

Desde já agradeço pela sua atenção,

Att.,

João Queiroz

@rftd
Copy link
Member

rftd commented Mar 23, 2023

tem a função LerStatusImpressora que retorna os status da impressora.

@jblqueiroz
Copy link
Author

Entendi. Quando utilizo essa função retorna "Nenhum", mesmo com a tampa aberta, ou sem papel.

@rftd
Copy link
Member

rftd commented Mar 23, 2023

Cara eu testei na epoca, e so funfava em serial e tcp senão to errado.
Depois eu dou uma testada tenho que tirar minha epson da caixa.

@jblqueiroz
Copy link
Author

Show de bola. Vamos usando assim por enquanto. É que utilizamos em impressoras que ficam longe dos operadores, que precisam receber a informação quando o papel acaba.

Obrigado pelo retorno.

@rftd
Copy link
Member

rftd commented Mar 23, 2023

Então se estiver usando a impressora por TCP da para pegar Status, agora se usar por RAW(Spool do Windows) é impossível pegar o status, pois não tem comunicação com a impressora toda.

@jblqueiroz
Copy link
Author

Boa tarde, Rafael. Tudo bem? Obrigado pelo retorno. Estou utilizando a impressora por TCP. Eu tento utilizar a função LerStatusImpressora e sempre retorna "Nenhum". Tudo está funcionando certinho, a impressão de qrcode, código de barras, formatação de textos, apenas essa parte do status que não.

@jblqueiroz
Copy link
Author

Olá Rafael, tudo bem? Continuo com o mesmo problema de retornar "Nenhum" na função LerStatusImpressora(), utilizando TCP/IP. Eu deixo a tampa aberta, a impressora sem papel e não muda nada. Você conseguiu fazer os testes?

Obrigado pela atenção, a api é muito boa, só está com esses problemas de não conseguirmos verificar o status da impressora.

@jblqueiroz
Copy link
Author

Eu não sei se ajuda, mas o método LerStatus da api não está tratando quando a impressora está sem papel, ou com a tampa aberta. Acredito que falte implementar algo aqui.

public EscPosTipoStatus LerStatusImpressora(int tentativas = 1)
{
Guard.Against(!Conectado, "A porta não está aberta");

    if (interpreter.Status == null) return EscPosTipoStatus.ErroLeitura;

    try
    {
        byte[][] ret;
        var leituras = 0;
        do
        {
            var dados = interpreter.Status.Commands;
            if (dados.IsNullOrEmpty()) return EscPosTipoStatus.Nenhum;

            ret = dados.Select(dado => device.WriteRead(dado, 10)).ToArray();
            leituras++;
        } while (leituras < tentativas && !ret.Any());

        if (!ret.Any()) return EscPosTipoStatus.ErroLeitura;

        var status = interpreter.Status.Resolve(ret);
        if (!Gaveta.SinalInvertido) return status;

        if (status.HasFlag(EscPosTipoStatus.GavetaAberta))
            status &= ~EscPosTipoStatus.GavetaAberta;
        else
            status |= EscPosTipoStatus.GavetaAberta;

        return status;
    }
    catch (Exception ex)
    {
        this.Log().Error("Erro ao ler status", ex);
        return EscPosTipoStatus.ErroLeitura;
    }
}

@rftd
Copy link
Member

rftd commented Aug 16, 2023

Não é ai que faz o tratamento do status.
A classe que cuida do status no caso da Epson é a classe EpsonStatusResolver.

@jblqueiroz
Copy link
Author

jblqueiroz commented Aug 17, 2023

Bom dia, tudo bem? E como que usa a classe EpsonStatusResolver? Pq quando construo o objeto abaixo, e só tem a opção LerStatusImpressora que sempre me retorna "Nenhum".

O que eu não estou conseguindo entender é como pegar o status após a conexão em uma impressora Epson.

printer = new EscPosPrinter(tcpConfig);
printer.Protocolo = ProtocoloEscPos.EscPos;
printer.PaginaCodigo = PaginaCodigo.pcUTF8;
printer.Device.ControlePorta = true;
printer.EspacoEntreLinhas = (byte)0;
printer.LinhasEntreCupons = (byte)0;

printer.Conectar();

var status = printer.LerStatusImpressora().ToString()

Aqui sempre da "Nenhum" mesmo com a tampa aberta ou sem papel entendeu?

Eu preciso que a impressora me retorne se está sem papel ou alguma outra falha de impressão, pq o operador não fica perto da impressora, e sem esse retorno eu não consigo avisar ao operador que o papel acabou para o mesmo ir trocar.

Eu percebi que quando não imprime não retorna nada.. ai qdo coloco o papel realiza as impressões que não sairam, mas não é funcional na forma que vamos utilizar.

Desculpa incomodar.. é q eu não estou conseguindo encontrar uma forma =).. eu já fiz tudo.. está perfeito.. só falta isso.

@rftd
Copy link
Member

rftd commented Aug 18, 2023

então o status é baseado em bitwise, tu manda uns comandos para impressora e ela teoricamente te retorna uns bytes e tu compara para saber qual o retorno.
Tem o manual EscPos para conferir isso

https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=118

@rftd
Copy link
Member

rftd commented Aug 18, 2023

eu realmente to sem tempo para ficar conferindo isso

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants