[RESOLU] ESC/POS

Sujets variés concernant le développement en PureBasic
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

[RESOLU] ESC/POS

Message par doudouvs »

Bonjour,

J'ai plusieurs imprimantes METAPACE SRP-350 350II et 350III pour les testes, pour toutes les 3 c'est le même souci
Quand j'envoi un ESC ca imprime et ca bloque comme si elle attend une trame de fin.

exemple 1 qui marche :

Code : Tout sélectionner

  resu = "Un test"+Chr(10)+"nv ligne test"
printer$ = "-d Bar  "
out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
CloseProgram(out)
Exemple 2 ca imprime et ca bloque pas de coupure papier et si on relance ca n'imprime plus

Code : Tout sélectionner

resu = "Chr(27)+Chr(64)+Un test"+Chr(10)+"nv ligne test"
printer$ = "-d Bar  "
out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
CloseProgram(out)
Exemple 3 impression d'une chaîne vide, il imprime du coup l'exemple 2

Code : Tout sélectionner

resu = ""
printer$ = "-d Bar  "
out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
CloseProgram(out)
PDF des commandes ESC/POS
https://www.jarltech.com/ger_new/new/su ... mmands.pdf


Merci pour vos retours
Dernière modification par doudouvs le jeu. 07/mai/2020 8:54, modifié 2 fois.
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: ESC/POS

Message par Marc56 »

Dixit la doc générale ESC/POS le code de découpe est:

Hex $1B $69
ASCII ESC i
Decimal 27 105

(pas testé)

Code : Tout sélectionner

resu = "Chr(27)+Chr(64)+Un test"+Chr(10)+"nv ligne test+Chr(27)+Chr(105)" 
:?:
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: ESC/POS

Message par doudouvs »

Code : Tout sélectionner

resu = Chr(27)+Chr(64)+"Un test"+Chr(10)+"nv ligne test"+Chr(27)+Chr(105)
N'imprime rien

si je fait ca il imprime et coupe c'est l'option par défaut

Code : Tout sélectionner

resu = "Un test"+Chr(10)+"nv ligne test"
Le souci et quand je souhaite faire soit un initialisation ou taille de caracter ect... donc a partir du moment ou j'ajoute un ESC plus rien ne s'imprime
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: ESC/POS

Message par Ollivier »

Les flags c'est Open, Read et Write.
resu$ c'est par le data (d'ailleurs on ne voit rien...)

La pipe à Datas
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: ESC/POS

Message par doudouvs »

Bonjour Olivier,

j'avais déjà fait des testes WriteProgramStringN, WriteProgramString, WriteProgramData voilà le code de teste

Code : Tout sélectionner

Global resu.s
ESCAT.s = Chr(27)+Chr(64) ;Initialize printer ASCII ESC @ Decimal 27 64
SIZE.s = Chr(29)+Chr(102)+Chr(48) ; Select font for Human Readable Interpretation(HRI) characters ASCII GS f n Decimal 29 102 n range n = 0, 1; 48, 49 Font A (12 x 24) Font B (9 x 17)
CUT.s = Chr(27)+Chr(105) ; utliser avec le PPD
resu = ESCAT+"Un test"+Chr(10)+"nv ligne test"

*total = Ascii(resu)

  printer$ = "-d Bar  "
  out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
  
  WriteProgramData(out,*total,MemorySize(*total)-1)
  Debug *total
  FreeMemory(*total)
 
  CloseProgram(out)
Il imprime juste "Un test" sans couper le papier et si je relance F5 plus aucun mouvement de l'imprimante

avec se code cela marche normalement mais impossible de rajouter une commande ESC donc pas de mise en page:

Code : Tout sélectionner

resu ="Un test"+Chr(10)+"nv ligne test"

J'ai aussi vérifier du coter des logs rien d'anormale

Code : Tout sélectionner

localhost - - [07/May/2020:06:39:51 +0200] "POST /printers/Bar HTTP/1.1" 200 322 Create-Job successful-ok
localhost - - [07/May/2020:06:39:51 +0200] "POST /printers/Bar HTTP/1.1" 200 254 Send-Document successful-ok
Je vais voir pour écrire directement sur le port je soupçonne que le fait de passer par line printer utilise forcement le driver et que le driver prend la priorité sur les commandes ESC
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: ESC/POS

Message par doudouvs »

Bon ca commence a donner quelque chose, sauf qu'il cut et imprime après

Code : Tout sélectionner

Global resu.s
ESCAT.s = Chr(27)+Chr(64) ;Initialize printer ASCII ESC @ Decimal 27 64
SIZE.s = Chr(27)+Chr(33)+Chr(1) ; Select font for Human Readable Interpretation(HRI) characters ASCII GS f n Decimal 29 102 n range n = 0, 1; 48, 49 Font A (12 x 24) Font B (9 x 17)
CUT.s = Chr(27)+Chr(105) ; utliser avec le PPD
resu = ESCAT+Chr(10)+"Un test nv ligne test"+Chr(10)+CUT
Debug resu
*total = Ascii(resu)

  imprimante$ = "/dev/usb/lp1"
  
 If OpenSerialPort(Port , imprimante$, 19200, #PB_SerialPort_OddParity, 8, 2, #PB_SerialPort_RtsCtsHandshake, 1024, 1024)
   Delay(60)
   Debug "Succes"
  Else
    Debug "Echec"
  EndIf
  WriteSerialPortData(Port, *total,MemorySize(*total)-1)
    
  Debug *total
  FreeMemory(*total)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: ESC/POS

Message par Marc56 »

As-tu essayé d'envoyer une autre commande de réinitialisation (Chr(27)+Chr(64)) à la fin ? (puisqu'il coupe lors de l'initialisation)
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: ESC/POS

Message par doudouvs »

Marc56, olivier

Voila la solution merci pour vos aides :)
je signale quand même que les delay sont obligatoire, javais galérer a trouver quand je communiquer avec un TPE

Code : Tout sélectionner

Global resu.s
ESCAT.s = Chr(27)+Chr(64) ;Initialize printer ASCII ESC @ Decimal 27 64
SIZE.s = Chr(27)+Chr(33)+Chr(1) ; Select font for Human Readable Interpretation(HRI) characters ASCII GS f n Decimal 29 102 n range n = 0, 1; 48, 49 Font A (12 x 24) Font B (9 x 17)
CUT.s = Chr(29)+Chr(86)+Chr(66) ; Cut paper
CENTER.s = Chr(27)+Chr(97)+Chr(49)
LEFT.s = Chr(27)+Chr(97)+Chr(48)
resu = ESCAT+CENTER+"Titre"+Chr(10)+LEFT+"1em ligne"+Chr(10)
*cut = Ascii(CUT)
*total = Ascii(resu)

  imprimante$ = "/dev/usb/lp1"
  
 If OpenSerialPort(Port , imprimante$, 19200, #PB_SerialPort_OddParity, 8, 2, #PB_SerialPort_RtsCtsHandshake, 1024, 1024)
   Delay(60) 
   Debug "Succes"
  Else
    Debug "Echec"
  EndIf
  
  WriteSerialPortData(Port, *total,MemorySize(*total)-1)
  Delay(60)
  WriteSerialPortData(Port, *cut,MemorySize(*total)-1)  
  Delay(60)
  
  Debug *total
  
  FreeMemory(*total)
 CloseSerialPort(Port)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU] ESC/POS

Message par doudouvs »

Ah du coup si j'imprime directement sur le port lp je perd les imprimantes réseau Grrrrrrrrrrrr
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU] ESC/POS

Message par doudouvs »

En utilisant lp par cups il ne ferme pas le port lp1

J'avance mais c'est pas encore propre car on renvoi une chaîne vide au port lp

Code : Tout sélectionner

Global resu.s
;;;;;;;;;;;;;;;;;;;;;
; ouverture du tiroire caisse
;echo -e -n "\x1b\x70\x30\x40\x50" | lpr -o raw -P Bar

Global resu.s
ESCAT.s = Chr(27)+Chr(64) ;Initialize printer ASCII ESC @ Decimal 27 64
SIZE.s = Chr(27)+Chr(33)+Chr(1) ; Select font for Human Readable Interpretation(HRI) characters ASCII GS f n Decimal 29 102 n range n = 0, 1; 48, 49 Font A (12 x 24) Font B (9 x 17)
CUT.s = Chr(29)+Chr(86)+Chr(66) ; gestion par le PPD
CENTER.s = Chr(27)+Chr(97)+Chr(49)
LEFT.s = Chr(27)+Chr(97)+Chr(48)
NULL.s = Chr(0)
resu = ESCAT+CENTER+SIZE+"Titre"+Chr(10)+LEFT+"1em ligne"+Chr(10)

*total = Ascii(resu)
  
  printer$ = "-d Bar  "
  out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
  
  WriteProgramData(out,*total,MemorySize(*total)-1)
  FreeMemory(*total)
  Delay(60)
  CloseProgram(out)
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
; la il imprime et libère le port 
  printer$ = "-d Bar  "
  out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
  WriteProgramStringN(out,"")
   CloseProgram(out)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU] ESC/POS

Message par doudouvs »

Bon la du coup il marche par CUPS avec lp et il CUT bien après l'impression :):):):)

Juste le SIZE vraiment petit, je pense que c'est du réglage

Code : Tout sélectionner

Global resu.s
;;;;;;;;;;;;;;;;;;;;;
; ouverture du tiroire caisse
;echo -e -n "\x1b\x70\x30\x40\x50" | lpr -o raw -P Bar

Global resu.s
ESCAT.s = Chr(27)+Chr(64) ;Initialize printer ASCII ESC @ Decimal 27 64
SIZE.s = Chr(27)+Chr(33)+Chr(2) ; Select font for Human Readable Interpretation(HRI) characters ASCII GS f n Decimal 29 102 n range n = 0, 1; 48, 49 Font A (12 x 24) Font B (9 x 17)
CUT.s = Chr(29)+Chr(86)+Chr(66) ; gestion par le PPD
CENTER.s = Chr(27)+Chr(97)+Chr(49)
LEFT.s = Chr(27)+Chr(97)+Chr(48)
NULL.s = Chr(0)
resu = ESCAT+CENTER+SIZE+"Titre"+Chr(10)+LEFT+"1em ligne"+Chr(10)+CUT

*total = Ascii(resu)
  
  printer$ = "-d Bar "
  out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
  
  WriteProgramData(out,*total,MemorySize(*total))
  FreeMemory(*total)
  Delay(60)
  CloseProgram(out)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU] ESC/POS

Message par doudouvs »

J'ai un sac remplie de ticket si ça intéresse quelqu'un
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: [RESOLU] ESC/POS

Message par Ollivier »

Ouch... A force de se faire tanner que les Delay() c'est pas bien...
Franchement merci pour le retour.

Maintenant, à charge de revanche (on va essayer). Là, tu n'utilises que des chaînes donc pas de caractère zéro (null).

Fais un tampon type $55 $01 $33 $80 $0F $01 $55 $80 $33 $01 $0F $80 etc... et envoie-le directement en graphique pour voir si tu peux faire un logo. ($1B $69 $0C $00 en préfixe des codes de pointillés)
(pour faire le tampon, c'est avec PokeA() ).

$55 c'est des pointillés (4 points)
$33 c'est des pointillés moyens (2 traits)
$0F c'est un gros pointillé. (1 trait)

Normalement, ça imprime par colonne de 8 points ou 9 points. Moi c'était 9 aiguilles (en 1991...) Donc ça décalait d'un pixel vers le haut pour chaque colonne.
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU] ESC/POS

Message par doudouvs »

Aie j'ai pas tout compris, j'ai ca cela coupe juste le papier

Code : Tout sélectionner

*MemoireID = AllocateMemory(5)

PokeA(*MemoireID,$1B)
PokeA(*MemoireID+1,$69)
PokeA(*MemoireID+2,$0C)
PokeA(*MemoireID+3,$00)
PokeA(*MemoireID+4,$55)

  printer$ = "-d Bar "
  out = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
  Delay(60)

WriteProgramData(out,*MemoireID,5)

Delay(60)
  CloseProgram(out)
    FreeMemory(*MemoireID)  

GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: [RESOLU] ESC/POS

Message par Ollivier »

Ahm merde... Mais moi elle coupait pas le papier... Il y a trente ans... En fait, cherche le mode graphique (au "pixel" près).

Ptêt en inversant :

Code : Tout sélectionner

PokeA(*MemoireID,$1B)
PokeA(*MemoireID+1,$69)
PokeA(*MemoireID+2,$00)
PokeA(*MemoireID+3,$0C)
PokeA(*MemoireID+4,$55)
Ou alors elle coupe le papier parce que tu n'as pas filé toute ma séquence (ça peut être plein de $55 tout simplement)....
Répondre