Page 1 sur 1
[RESOLU] ESC/POS
Publié : mer. 06/mai/2020 13:57
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
Re: ESC/POS
Publié : mer. 06/mai/2020 14:35
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)"

Re: ESC/POS
Publié : mer. 06/mai/2020 15:00
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
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
Re: ESC/POS
Publié : mer. 06/mai/2020 17:16
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
Re: ESC/POS
Publié : jeu. 07/mai/2020 5:50
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:
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
Re: ESC/POS
Publié : jeu. 07/mai/2020 7:50
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)
Re: ESC/POS
Publié : jeu. 07/mai/2020 8:32
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)
Re: ESC/POS
Publié : jeu. 07/mai/2020 8:53
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)
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 9:05
par doudouvs
Ah du coup si j'imprime directement sur le port lp je perd les imprimantes réseau Grrrrrrrrrrrr
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 10:14
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)
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 10:58
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)
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 10:59
par doudouvs
J'ai un sac remplie de ticket si ça intéresse quelqu'un
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 11:20
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.
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 12:05
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)
Re: [RESOLU] ESC/POS
Publié : jeu. 07/mai/2020 16:58
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)....