Retorno da Impressora (ACK, ST1 e ST2) |
Todos as funções, executadas na impressora, possuem bytes de retorno, que significam o estado atual após o envio. Cada byte é tratado da seguinte maneira:
ACK (06h ou 6d): Byte indicativo de recebimento correto. ST1 e ST2: Bytes de estado da impressora. NAK (15h ou 21d): Byte indicativo de recebimento incorreto.
Observação:
- Nas impressoras fiscais Matriciais, os retornos de execução são obtidos, apenas, pelos bytes ACK, ST1 e ST2.
- Nas impressoras fiscal MFD (somente), existe um outro retorno chamado ST3 (retorno estendido), onde informações mais detalhadas podem ser obtidas, mas este retorno só é habilitado pela função Bematech_FI_HabilitaDesabilitaRetornoEstendidoMFD.
ST1
ST2
Lógica de Tratamento
Cada byte é composto de 8 bits. Cada bit, dentro do byte, tem um valor, conforme a tabela acima:
O valor recebido da impressora para ST1 e/ou ST2 deve ser comparado com cada bit.
As linhas abaixo são uma forma de você desenvolver um pedaço de código para saber quais bits estão "setados":
Codificando o ST1
If St1 >= 128 Then // bit 7 St1 = St1 - 128 sMsg = "Fim de Papel" End If If St1 >= 64 Then // bit 6 St1 = St1 - 64 sMsg = "Pouco Papel" End If If St1 >= 32 Then // bit 5 St1 = St1 - 32 sMsg = "Erro no Relógio" End If If St1 >= 16 Then // bit 4 St1 = St1 - 16 sMsg = "Impressora em Erro" End If If >= 8 Then // bit 3 St1 = St1 - 8 sMsg = "Comando não iniciado com ESC" End If If St1 >= 4 Then // bit 2 St1 = St1 - 4 sMsg = "Comando Inexistente" End If If St1 >= 2 Then // bit 1 St1 = St1 - 2 sMsg = "Cupom Aberto" End If If St1 >= 1 Then // bit 0
sMsg = "Número de Parâmetro(s) Inválido(s)" End If
Codificando o ST2
If St2 >= 128 Then // bit 7 St2 = St2 - 128 sMsg = "Tipo de Parâmetro de Comando Inválido" End If If St2 >= 64 Then // bit 6 St2 = St2 - 64 sMsg = "Memória Fiscal Lotada" End If If St2 >= 32 Then // bit 5 St2 = St2 - 32 sMsg = "Erro na Memória RAM" End If If St2 >= Then // bit 4 St2 = St2 - 16 sMsg = "Alíquota Não Programada" End If If St2 >= Then // bit 3 St2 = St2 - 8 sMsg = "Capacidade de Alíquotas Lotada" End If If St2 >= 4 Then // bit 2 St2 = St2 - 4 sMsg = "Cancelamento Não Permitido" End If If St2 >= 2 Then // bit 1 St2 = St2 - 2 sMsg = "CNPJ/IE do Proprietário Não Programado" End If If St2 >= 1 Then // bit 0 St2 = St2 - 1 sMsg = "Comando Não Executado" End If
Teste o exemplo acima com ST1 = 66, e repare que você terá dois erros, pouco papel (64) e cupom aberto (2). |