Page 1 sur 1

S7-1500 et imprimante Zebra en ZPL

Posté : 16 mars 2026, 23:25
par dpo
Bonjour
je dois intervenir sur un projet existant où un s7-1500 imprime sur une étiquette Zebra
A ce jour, le code envoyé en ZPL écrit des chaines de caractères
La donnée envoyée est un tableau de X chaines

Pour simplifier, à titre d'exemple on peut imaginer
chaine[0]:=^XA
chaine[1]:=^CFA,30
chaine[2]:=^FO50,300^FDProduction^FS
chaine[3]:=^FO50,340^FDDate^FS
chaine[4]:=^FO50,380^FDquantite^FS
chaine[5]:=^XZ

ce qui revient simplement à écrire
Production
Date
quantité

Chaque ligne étant un string du tableau de string envoyé à l'imprimante (via la commande TSEND_C de mémoire)
Maintenant je voudrais imprimer un data matrix à la place des textes
exemple de la commande

CAS1 :
chaine[0]:=^XA^LH0,0^FO50,50^BXN,5,200^FDproductiondatequantite^FS^XZ

ça fonctionne tant que la chaine ne dépasse pas la limite du type string mais si au lieu de FDproductiondatequantite^FS
j'ai une chaine trop longue je me fais jeter par TIA (normal)
je n'ai pas réussi à faire une impression en découpant ma chaine dans plusieurs string du tableau
CAS2 :
chaine[0]:='^XA';
chaine[1]:='^LH0,0^FO50,50^BXN,5,200';
chaine[2]:='^FDproduction';
chaine[3]:='date';
chaine[4]:='quantite^FS';
chaine[5]:='^XZ';

CAS1 fonctionne, CAS2 ne fonctionne pas
un string siemens est limité (un peu plus de 200 caractères) mais un datamatrix peut en prendre beaucoup plus
Normalement l'imprimante concatène tout ce qui est entre XA et XZ
Je pense que j'ai raté quelque chose mais je n'avais plus le temps pour des tests.
Quelqu'un a t il déjà imprimé en ZPL via S7-1500 sur une zebra un datamatrix de plus de 500 caractères ?

Re: S7-1500 et imprimante Zebra en ZPL

Posté : 17 mars 2026, 23:09
par Bruce33
Bonjour,
Je programme peu de Siemens, mais j'ai déjà fait quelques expériences en ZPL.
L'automate envoie le code ZPL en Ethernet via le port TCP 9100, c'est ça ?
Quand tu dis que ça ne fonctionne pas, qu'est-ce qu'il se passe ? Aucune réaction de l'imprimante ?
Normalement le découpage en plusieurs lignes devrait fonctionner.
L'automate envoie-t-il la totalité du message d'un seul coup ou en plusieurs cycles ?
Il y a peut-être une information qui s'insère entre chaque chaîne du tableau au moment de l'envoi (par exemple un caractère NULL) qui gênerait l'interprétation par l'imprimante.

Re: S7-1500 et imprimante Zebra en ZPL

Posté : 18 mars 2026, 10:13
par dpo
Oui Mr Bruce
quand j'envoie le top d'impression, comme la chaine ne lui convient pas, elle imprime l'étiquette précédente qui doit être bufferisée de son côté.
si j'envoie un petit code ZPL de datamatrix en une ligne ça fonctionne
si j'envoie plusieurs lignes pour créer un datamatrix plus long ça ne fonctionne pas (impression de l'étiquette précédente)
je vais fouiller mais ta réponse et une autre trouvée sur le net me confirme que ça doit fonctionner
la journée de test a été longue avec test d'un lecteur datamatrix puis de l'imprimante, je suis sûrement passé à côté de quelque chose.
ton idée de caractère nul n'est pas mal, je vais aussi vérifier que tout est bien vidé avant de remplir avec une nouvelle chaine

Re: S7-1500 et imprimante Zebra en ZPL

Posté : 18 mars 2026, 11:09
par steph68
Salut,

Il faut créer un tableau de Char ou Byte et utiliser la fonction Strg_TO_Chars pour le remplir (en gérant un index de remplissage).
C'est ce tableau que tu fournis ensuite au bloc de communication TSEND.
Tu ne seras pas limité à la taille max d'une chaîne de caractères.

Vérifie que le TSEND_C ne ferme pas la session juste après transmission (KeepAlive configuré ?).
J'utiliserai plutôt une connexion manuelle TCON puis TSEND et TDISCON pour clore la session au bout d'un certain temps...

@+

Re: S7-1500 et imprimante Zebra en ZPL

Posté : 18 mars 2026, 11:24
par dpo
Merci pour toutes ces infos
je vous tiendrais au jus quand j'aurais l'occasion de refaire des tests sur site