Tem uma empresa que presto serviço esporádico, hj me chamaram afim de ver um problema na emissao do cupom fiscal, qdo abre o mesmo da a mensagem "número de parámetros de CMD inválido"
podem verificar o codigo abaixo que extrai do programa e dar uma ideia do que seja o problema
qq coisa estou no msn marcelocordeiro1974@msn.com
posso conversar por msn ou por telefone
agradeço desde ja qq ajuda
abracao pessoal
#INCLUDE "Fileio.ch"
#define ST1_BIT_0 "número de parámetros de CMD inválido"
#define ST1_BIT_1 "cupom aberto"
#define ST1_BIT_2 "comando inexistente"
#define ST1_BIT_3 "primeiro dado de CMD nÆo foi ESC (1Bh)"
#define ST1_BIT_4 "impressora em erro"
#define ST1_BIT_5 "erro no rel¢gio"
#define ST1_BIT_6 "pouco papel"
#define ST1_BIT_7 "fim de papel"
#define ST2_BIT_0 "comando nÆo executado"
#define ST2_BIT_1 "CGC/IE do propriet rio nÆo programados"
#define ST2_BIT_2 "cancelamento nÆo permitido"
#define ST2_BIT_3 "capacidade de al¡quotas program veis lotada"
#define ST2_BIT_4 "al¡quota nÆo programada"
#define ST2_BIT_5 "erro na Mem¢ria RAM CMOS nÆo vol til"
#define ST2_BIT_6 "Mem¢ria fiscal lotada"
#define ST2_BIT_7 "tipo de parƒmetro de CMD inv lido"
****************************************
FUNCTION COMUNICA(FBUFFER,tam_a_ser_ret)
****************************************
/* evia sequencia de bytes para impressora */
fwrite(PORTA, @FBUFFER, len(FBUFFER))
/* pega o retorno da impressora NAK/ACK ST1 ST2 */
GRAVALOG( SUBS(FBUFFER+SPACE(603),3,600))
retorno_impressora := ack := nak := st1 := st2 := space(1)
FTEMPO = LEN(FBUFFER) / 100
INKEY(FTEMPO)
for contador1 := 1 to 3
fread(PORTA,@retorno_impressora,1)
do case
case contador1 = 1
do case
case asc(retorno_impressora) = 21 /* retorno em caracter 21d=15h=NAK */
MENFIS("Atencao... a impressora retornou 21d=15h=NAK")
case asc(retorno_impressora) = 06
ack := transform(asc(retorno_impressora),"99")
otherwise
MENFIS("Atencao... provavelmente o driver nao foi carregado !")
fclose(PORTA)
SET COLOR TO
CLEAR
quit
endcase
case contador1 = 2
st1 := transform(asc(retorno_impressora),"999")
case contador1 = 3
[b] st2 := transform(asc(retorno_impressora),"999")[/b]
endcase
next contador1
/* pega sequencia de retorno caso necess rio */
sequencia_retorno := ""
for contador2 := 1 to tam_a_ser_ret
fread(PORTA, @retorno_impressora, 1)
sequencia_retorno += retorno_impressora
next contador2
*-----------------------DECODIFICA
DECODIFICA(ack,st1,st2)
return sequencia_retorno /* executou_sn */
/////////////////////////////////////////////
/////////////////////////////////////////////////
static function DECODIFICA(ACK,ST1,ST2)
Bit_st1:=Bit_st2:=Bit_ack:=0
Bit_ack=Val(ACK)
Bit_st1=Val(ST1)
Bit_st2=Val(ST2)
//Tratamento do Ack ou NAk
if Bit_ack # 6
MENFIS("Problemas ao Enviar o Comando a Impressora Devolveu 21")
end if
//Aqui ‚ Feito o Tratamento do St1 subtraindo o Byte anterior pelo Seguinte
if Bit_st1 >= 128;MENFIS(ST1_BIT_7) ;Bit_st1=Bit_st1-128 ;end if
if Bit_st1 >= 64 ;MENFIS(ST1_BIT_6) ;Bit_st1=Bit_st1-64 ;end if
if Bit_st1 >= 32 ;MENFIS(ST1_BIT_5) ;Bit_st1=Bit_st1-32 ;end if
if Bit_st1 >= 16 ;MENFIS(ST1_BIT_4) ;Bit_st1=Bit_st1-16 ;end if
if Bit_st1 >= 8 ;MENFIS(ST1_BIT_3) ;Bit_st1=Bit_st1-8 ;end if
if Bit_st1 >= 4 ;MENFIS(ST1_BIT_2) ;Bit_st1=Bit_st1-4 ;end if
if Bit_st1 >= 2 ;MENFIS(ST1_BIT_1) ;Bit_st1=Bit_st1-2 ;end if
if Bit_st1 >= 1 ;MENFIS(ST1_BIT_0) ;end if
//Aqui ‚ Feito o Tratamento do St2 subtraindo o Byte anterior pelo Seguinte
if Bit_st2 >= 128;MENFIS(ST2_BIT_7) ;Bit_st2=Bit_st2-128 ;end if
if Bit_st2 >= 64 ;MENFIS(ST2_BIT_6) ;Bit_st2=Bit_st2-64 ;end if
if Bit_st2 >= 32 ;MENFIS(ST2_BIT_5) ;Bit_st2=Bit_st2-32 ;end if
if Bit_st2 >= 16 ;MENFIS(ST2_BIT_4) ;Bit_st2=Bit_st2-16 ;end if
if Bit_st2 >= 8 ;MENFIS(ST2_BIT_3) ;Bit_st2=Bit_st2-8 ;end if
if Bit_st2 >= 4 ;MENFIS(ST2_BIT_2) ;Bit_st2=Bit_st2-4 ;end if
if Bit_st2 >= 2 ;MENFIS(ST2_BIT_1) ;Bit_st2=Bit_st2-2 ;end if
if Bit_st2 >= 1 ;MENFIS(ST1_BIT_0) ;end if
return NIL
---
Nota da Moderação (Maligno):
A presente mensagem foi editada com a única finalidade de inserir as tags que permitem uma melhor exposição do código acima.