Italian stampante termica 80mm da font grande a font piccolo funziona solo se spegno e riaccendo stampante

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ciao a tutti, qualcuno mi sa dire perchè appena inserisco queste righe di codice per stampare un font più grande e poi ritorno al font piccolo devo per forza spegnere e riaccendere la stampante per avere questo esito positivo?
questo il codice che uso per stampare grande:
Dim buffertest() As Byte
Dim sendMsgtest As String
sendMsgtest = Chr(27) & "!" &Chr(8+16+64) & "" & CRLF
Astreams.Write(buffertest)
sendMsgtest=Chr(29) & Chr(86) & Chr(48)' Cut?

mentre per stampare in fonto più grande uso questo codice:
Dim SendMsg As String
SendMsg = Chr(27) & "!" &Chr(8+8+16) & "" & CRLF
Astreams.Write(SendMsg.GetBytes("UTF8"))

in quest'ultimo codice manca la parte del cutter che invece è presente nel primo,
se spengo e riaccendo la stampante allora mi ritorna a stampare piccolo quando uso il codice di sopra, allora mi chiedo c'è un codice che forzi un reset della spampante o una specie di riavvio in modo da ritornare a stmpare piccolo?
 

Gnappo jr

Active Member
Licensed User
Longtime User
Ciao a tutti, qualcuno mi sa dire perchè appena inserisco queste righe di codice per stampare un font più grande e poi ritorno al font piccolo devo per forza spegnere e riaccendere la stampante per avere questo esito positivo?
questo il codice che uso per stampare grande:
Dim buffertest() As Byte
Dim sendMsgtest As String
sendMsgtest = Chr(27) & "!" &Chr(8+16+64) & "" & CRLF
Astreams.Write(buffertest)
sendMsgtest=Chr(29) & Chr(86) & Chr(48)' Cut?

mentre per stampare in fonto più grande uso questo codice:
Dim SendMsg As String
SendMsg = Chr(27) & "!" &Chr(8+8+16) & "" & CRLF
Astreams.Write(SendMsg.GetBytes("UTF8"))

in quest'ultimo codice manca la parte del cutter che invece è presente nel primo,
se spengo e riaccendo la stampante allora mi ritorna a stampare piccolo quando uso il codice di sopra, allora mi chiedo c'è un codice che forzi un reset della spampante o una specie di riavvio in modo da ritornare a stmpare piccolo?
La stampante comadata a basso livello con sequenze ESC/POS continua ad utilizzare l'ultimo font impostato, credo per ritornare al font piccolo basta inviare la sequenza ESC/POS corretta che trovi nen manuale della stampante o comunque assai facilmente.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
si ma il problema mio principale e che appena stampa con un font grande nel ristampare il font piccolo devo spegnere e riaccendere la stampante, esiste un codice per far ciò in automatico? tipo riavviare la stampante o forzarla a stampare il carattere piccolo senza spegnerla e riaccenderla?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
devi guardare il manuale del protocollo dove parla del comando "ESC !"
io non ce l'ho sotto mano e quindi non saprei dirti.
Comunque è ovvio che Chr(8+8+16) è sbagliato, quali bit volevi settare ?
Per fare il reset della stampante puoi provare ESC @

Sergio
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
devi guardare il manuale del protocollo dove parla del comando "ESC !"
io non ce l'ho sotto mano e quindi non saprei dirti.
Comunque è ovvio che Chr(8+8+16) è sbagliato, quali bit volevi settare ?
Per fare il reset della stampante puoi provare ESC @

Sergio
Con ESC @ non mi fa nulla, forse scrivo male io il codice?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
come ti ho detto non ho il manuale sotto mano e quindi non ti so dire, dimmi dove posso scaricare il manuale e gli dò un occhio
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Con questo codice non ki resetta la stampante ma mi fa il sottolineato.

Ma se nel tuo primo post TU hai scritto che usci "ESC !" per settare il tipo di carattere, come puoi pensare che lo stesso comando ti esegui il reset della stampante ??
Proprio non ti capisco, ti faccio anche delle domande per cercare di aiutarti ma non mi rispondi, oppure rispondi senza mostrare il codice e quindi mi dispiace ma ci rinuncio e preferisco perdere tempo su altre cose.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
con la sub StampaTest stampo una documento a carattere normale e senza grassetto, mentre successivamente faccio stampare un numerocon un carattere più grande ed in grassetto attraverso la sub StampaTest2
il problema e che la prossima stampa che verrà fatta dopo StampaTest2 sarà dinuovo la sub StampaTest e questi non mi stampa più con un carattere normale ma rimane memorizzato il carattere grande di StampaTest2

questo è il problema principale, di sotto il codice con cui in una sub ( StampaTest ) eseguo la prima stampa di un documento, successivamente alla pressione del pulsante che abiliterà la stampa di un secondo documento della sub ( StampaTest2 )

Faccio presente che se spengo e riaccendo la stampante allroa la prima stampa ritorna ad essere dinuovo a carattere normale mentre la seconda più grande e grassetto e dinuovo continua a stampare con questo stesso font fino allo spegnimento e riaccensione della stampante, spero di essermi spiegato scusandomi con tutti coloro che si impegnano ad aiutarmi.

B4X:
Sub StampaTest
    Log("sono sulla sub stampatest")
    If connected  Then
        If Astreams.IsInitialized = False Then Return
        Dim buffertest() As Byte
        Dim sendMsgtest As String
        sendMsgtest = Chr(27) & "!" &Chr(88) & "" & CRLF' con questo codice stampo carattere normale
        Astreams.Write(buffertest)      
        sendMsgtest=Chr(29) & Chr(86) & Chr(48)' Cut? ' con questo codice taglio la carta'
        Astreams.Write(sendMsgtest.GetBytes("UTF8"))
        Else
       
    End If
End Sub

Sub StampaTest2
    Dim SendMsg As String
    Log("sono sulla sub stampatest2")
    If connected  Then
    If Astreams.IsInitialized = False Then Return
    SendMsg=(Chr(27) & "!" &Chr(8+16) & CRLF) ' con questo codice stampo a carattere più grande ed in grassetto'
    SendMsg=Chr(29) & Chr(86) & Chr(48)' Cut? ' con questo codice taglio la carta'
   
    Astreams.Write(SendMsg.GetBytes("UTF8"))
   
    Else
       
    End If
End Sub
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Di sicuro
guarda qui:
https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=192

comunque meglio non fargli fare un reset, devi impararti meglio il comando "ESC !"
Spiegami che cosa è quel
B4X:
sendMsgtest = Chr(27) & "!" & Chr(88) & "" & CRLF' con questo codice stampo carattere normale
Premetto che non conosco il comando ESC ....si tratta di un copia ed incolla da un post per far stampare con carattere normale un documento, in orginine il codice era: SendMsg = Chr(27) & "!" &Chr(8+16+64) & "" & CRLF ma qualcuno qui sul post mi ha fatto notare che la somma fa la differenza ( Totò ) e alla fine lo trasformato in quello da te evidenziato, da ieri cerco di capire come funziona il comando ESC P per capire come muovermi nella stampa, da quel poco appena leto il Chr(27) invia il comando alla stampante il punto ecslamativo se non ho capito male indica il tipo di carattere mentre l'altro non saprei davvero spiegare.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Allora ci sono riuscito leggendo qualche rigo del comando ESC, questo è il codice con cui sono riuscito a farlo funzionare:
B4X:
Sub StampaTest
    Log("sono sulla sub stampatest")
    If connected  Then
        If Astreams.IsInitialized = False Then Return
        Dim buffertest() As Byte
        Dim sendMsgtest As String
        Astreams.Write(buffertest)       
        sendMsgtest=Chr(29) & Chr(86) & Chr(48)' Cut?  ' con questo codice eseguo il taglio della carta dopo la stampa
        Astreams.Write(sendMsgtest.GetBytes("UTF8"))
        Else
        
    End If
    chfont.Checked=True
End Sub

Sub StampaTest2
    
    Dim SendMsg As String
    Log("sono sulla sub stampatest2")
    If connected  Then
    If Astreams.IsInitialized = False Then Return
    SendMsg = Chr(27) & "!" &Chr(8+8+16) & "" & CRLF  ' con questo codice stampo  il font leggermente più grande in grassetto    
    SendMsg=Chr(29) & Chr(86) & Chr(48)' Cut?       ' con questo codice eseguo il taglio della carta dopo la stampa
    Astreams.Write(SendMsg.GetBytes("UTF8"))
    SendMsg = Chr(27) & "@"  & CRLF ' con questo codice mi resetta la stampante immediatamente riportando alla sub StampaTest il carattere predefinito
    Astreams.Write(SendMsg.GetBytes("UTF8"))
    Else
        
    End If
    chfont.Checked=False
End Sub
alla fine ho aggiunto un checked per far si che quando selezionato mi stampa il font grande e quando deselezionato no, ma per poter effetivamente ritornare alla stampa piccola si deve usare per forza il codice Chr(27) & "@" & CRLF per eseguire un restart alla stampante.
Ringrazio tutti quanti per avermi dato un contributo alla risoluzione del problema
adesso devo veder come far stampare ancora più grande il font.
 

picenainformatica

Active Member
Licensed User
Longtime User
Nel manuale Epson (il link da me inviato punta a quel manuale) ci sono tutti i comandi.

Il comando per i caratteri (e font) è sempre: Chr(27) & "!" & Chr(n) dove n è un numero combinato a bit.
I comandi ESC-POS sono SEMPRE a lunghezza fissa o dichiarata. Non terminano MAI con CRLF
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Sotto consiglio vostro ho tolto i CRLF e dato il comando Chr(27) & Chr(64) che sarebbe il restart della stampante.
Ieri con il vecchio codice un mio amico ha avuto in uscita della stampante un doppio documento stampato,
adesso il codice è il seguente:

B4X:
Sub StampaTest
    Log("sono sulla sub stampatest")
    If connected  Then
        If Astreams.IsInitialized = False Then Return
        Dim buffertest() As Byte
        Dim sendMsgtest As String
        Astreams.Write(buffertest)   
        sendMsgtest=Chr(29) & Chr(86) & Chr(48)' Cut?
        Astreams.Write(sendMsgtest.GetBytes("UTF8"))
        Else
        
    End If
    chfont.Checked=True
End Sub

Sub StampaTest2
    
    Dim SendMsg As String
    Log("sono sulla sub stampatest2")
    If connected  Then
    If Astreams.IsInitialized = False Then Return
    SendMsg = Chr(27) & "!" &Chr(8+8+16)     
    SendMsg=Chr(29) & Chr(86) & Chr(48)' Cut?       
    Astreams.Write(SendMsg.GetBytes("UTF8"))
    SendMsg = Chr(27) & Chr(64)
    Astreams.Write(SendMsg.GetBytes("UTF8"))
    Else
        
    End If
    chfont.Checked=False
End Sub
 
Top