Análise do Retorno (ACK, ST1 e ST2)

Bematech

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

 

tlaST1

 

ST2

 

tlaST2

 

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