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

BemaFI32

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

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