Eltron Etikettendrucker ansteuern

Perl-Script

Arbeitet die Daten die dem Script als Paramter übergeben werden so auf, dass sie an den Eltron Etikettendrucker gesendet werden können. Wenn keine Parameter übergeben werden, werden sie aus der Datei ean.txt ausgelesen.
Fehler und gedruckte Etiketten werden in der Datei print.log protokolliert.

Syntax

print.pl [Anzahl Etiketten] [EAN-Code mit oder ohne Prüffziffer oder auch ohne GCP Prüfziffer] [Artikelname1] [Artikelname2] [Verkaufspreis 0 wird nicht gedruckt] [Artikelnummer]

Beispiel einer ean.txt Datei

1;18929;6er Pack Farbstifte;in Kartonschachtel;;12.25;ABC123;
2;18926;Maltropfen 12er Pack;;;;DEF456;
Die Datei muss folgenden Aufbau haben:
Anzahl Etiketten die gedruckt werden;EAN-Code;Bezeichung 1;Bezeichnung 2;Bezeichnung 3 (wird nicht verwendet);Verkaufspreis;Artikelnummer;

Beispiel der Ausgabe print.plt


OD
N
FR"TOMATO"
?
6er Pack Farbstifte
in Kartonschachtel
ABC123
sFr. 12.25
7613003189295
P1

OD
N
FR"TOMATO"
?
Maltropfen 12er Pack

DEF456

7613003189264
P2

Diverses

Programmierhandbuch EPL2

Programmierhandbuch aller modernen Eltron Drucker, PDF-Datei.

Windows/DOS

Leider habe ich nur Windows/DOS PC's zur Ansteuerung des Druckers zur Verfügung daher sind hier noch die Zusatzprogramme und Batchdateien zu finden damit alles ohne Probleme geht.

print.bat

"c:\programme\perl\perl.exe" print.pl
recode cp1252/cr-lf..ibm-pc print.plt
copy print.plt lpt1 /b
Das Programm recode wandelt den Zeichensatz von Windows nach DOS um.

Formular

Das verwendete Formular TOMATO wird mit dem gleichen Befehl wie die print.plt Datei an den Drucker gesendet (copy formular lpt1 /b).
Die LS und LW Befehle zeichnen das Firmenlogo und sind daher zum Verständnis nicht wichtig.

N
I8,1,041
FK"TOMATO"
FS"TOMATO"
V00,28,N,"Name1"
V01,28,N,"Name2"
V02,12,N,"Artikelnummer"
V03,11,N,"Preis"
V04,13,N,"EAN-13-Code"
D7
S2
ZT
R0,0
Q256,24
q456
A20,22,0,3,1,1,N,V00
A20,54,0,3,1,1,N,V01
A20,86,0,3,1,1,N,V02
A20,118,0,3,1,1,N,V03
B204,86,0,E30,2,2,110,B,V04

LS52,166,1,52,166

LS50,167,1,51,167

LS27,168,1,27,168
LS43,168,1,51,168

LS27,169,1,28,169
LS42,169,1,44,169
LS46,169,1,50,169

LS27,170,1,27,170
LS29,170,1,37,170
LS42,170,1,47,170

LS28,171,1,28,171
LS31,171,1,33,171
LS35,171,1,38,171
LS41,171,1,42,171
LS44,171,1,44,171

LS34,172,1,35,172
LS37,172,1,38,172
LS40,172,1,41,172
LS43,172,1,44,172

LS31,173,1,34,173
LS36,173,1,36,173
LS38,173,1,38,173
LS40,173,1,40,173
LS42,173,1,42,173
LS45,173,1,46,173

LS28,174,1,35,174
LS39,174,1,40,174
LS47,174,1,48,174

LS25,175,1,27,175
LS29,175,1,30,175
LS32,175,1,36,175
LS38,175,1,39,175
LS41,175,1,41,175
LS49,175,1,50,175

LS25,176,1,25,176
LS29,176,1,31,176
LS39,176,1,42,176
LS51,176,1,52,176

LS24,177,1,24,177
LS28,177,1,30,177
LS40,177,1,42,177
LS53,177,1,53,177

LS23,178,1,23,178
LS29,178,1,29,178
LS40,178,1,40,178
LS42,178,1,42,178
LS54,178,1,54,178

LS22,179,1,22,179
LS29,179,1,29,179
LS40,179,1,40,179
LS42,179,1,42,179
LS54,179,1,54,179

LS22,180,1,22,180
LS29,180,1,29,180
LS41,180,1,42,180
LS55,180,1,55,180

LS21,181,1,21,181
LS28,181,1,28,181
LS41,181,1,46,181
LS56,181,1,56,181

LS21,182,1,21,182
LS27,182,1,27,182
LS56,182,1,56,182

LS21,183,1,21,183
LS56,183,1,56,183

LS20,184,1,20,191
LS56,184,1,56,184

LS57,185,1,57,191

LS21,192,1,21,194
LS56,192,1,56,194

LS22,195,1,22,196
LS55,195,1,55,196

LS23,197,1,23,197
LS54,197,1,54,197

LS24,198,1,24,199
LS53,198,1,53,198

LS52,199,1,52,199

LS25,200,1,26,200
LS51,200,1,51,200

LS27,201,1,27,201
LS50,201,1,50,201

LS28,202,1,29,202
LS49,202,1,49,202

LS30,203,1,32,203
LS45,203,1,47,203

LS33,204,1,44,204

LS21,184,1,21,191
LS23,179,1,23,196
LS25,178,1,25,199
LS27,184,1,27,200
LS29,184,1,29,201
LS31,180,1,31,202
LS33,178,1,33,203
LS35,178,1,35,203
LS37,178,1,37,203
LS39,182,1,39,203
LS41,184,1,41,203
LS43,184,1,43,203
LS45,184,1,45,202
LS47,184,1,47,202
LS49,180,1,49,201
LS51,178,1,51,199
LS53,178,1,53,197
LS55,180,1,55,194

LS45,176,1,45,176
LS45,178,1,45,178
LS45,180,1,45,180
LS47,176,1,47,176
LS47,180,1,47,180

LW23,179,3,1
LW33,179,5,1
LW51,179,3,1
LW23,181,3,1
LW31,181,7,1
LW49,181,7,1
LW22,183,34,1
LW21,185,35,1
LW21,187,35,1
LW21,189,35,1
LW21,191,35,1
LW22,193,34,1
LW23,195,32,1
LW24,197,30,1
LW25,199,27,1
LW28,201,22,1
LW12,203,13,1

FE

Quellcode Perl-Script

#!/usr/bin/perl

#EAN-13 Teilnehmernummer
$gcp = 7613003;
$ausdatei = "Parameter";
$fehler = 0;
$pruefziffer_parameter = "";
$waehrung = "sFr. ";

  open(DATEI, ">print.plt");
    print DATEI "";
  close(DATEI);

sub fehler
  {
    print $0, " -- (c) 2001 Thomas Kuster, thomas\@fam-kuster.ch\n\n";
    
    print "This program is free software; you can redistribute and/or\n";
    print "modify it under the terms of the GNU General Public License as\n";
    print "published by the Free Software Foundation; either version 2 of\n";
    print "the license, or (at your option) any later version.\n\n";
    
    print "The software is distributed in the hope that it will be useful,\n";
    print "but WITHOUT ANY WARRANTY to the extent of law; without even the\n";
    print "implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n";
    print "PURPOSE. See the GNU General Public License for more details.\n";
    print "www.gnu.org\n\n";

    print "Syntax:\n\n";
    print $0, " [Anzahl Etiketten] [EAN-Code mit oder ohne Prüffziffer oder auch ohne GCP Prüfziffer] [Artikelname1] [Artikelname2] [Verkaufspreis 0 wird nicht gedruckt] [Artikelnummer]\n\n";
    open(LOGFILE, ">>print.log");
      $jetzt = localtime(time());
      print LOGFILE $jetzt, ";", $anzahl, ";", $artnr, ";", $name1, ";", $name2, ";", $preis, ";", $ean, ";", $_[0], ";", $ausdatei, "\n";
    close(LOGFILE);
    $fehler = 1;
    $laenge = length($ausdatei);
		if($laenge == 9)
		  {
        die;
      }      
  }

sub drucken
{
#Parameter auf gültigkeit überprüfen
if($anzahl =~ /\D/)
  {
    print "\nFEHLER:\n";
    print "Erster Parameter (Anzahl Etiketten) ist keine Zahl!\n\n";
    &fehler ("Anzahl Etiketten ist keine Zahl");
  }

if($anzahl <= 0)
  {
    print "\nFEHLER:\n";
    print "Anzahl Etiketten muss grösser als 0 sein!\n\n";
    &fehler ("Anzahl Etiketten kleiner als 0");
  }

if(length($preis) == 0)
  {
    $preis = "";
  } 
else
  {
    if(length($preis) < 4 || length($preis) > 6)
      {
        if($preis == "0")
          {
            $preis = "";
          }
        else
          {
            $preis = "      ";
          }
      }
    else
      {
        $preis = $waehrung.$preis; 
      }
  }

if($ean =~ /\D/)
  {
    print "\nFEHLER:\n";
    print "Zweiter Parameter (EAN-Code) ist keine Zahl!\n\n";
    &fehler ("EAN-Code ist keine Zahl");
  }

#Korrekte Länge überprüfen (12 oder 13 bei 13 Prüfziffer zwischenspeichern in $pruefziffer_parameter)
if(length($ean) == 13)
  {
     $pruefziffer_parameter = substr($ean, 12, 1);
  }

if(length($ean) == 5)
  {
    $ean = $gcp.$ean;
  }
else
  {
    if(length($ean) != 12)
      {
        if(length($ean) == 13)
          {
            $pruefziffer_parameter = substr($ean, 12, 1);
          }
        else
          {
            if(length($ean) > 13)
              {
                print "\nFEHLER:\n";
                print "EAN-Code zu lang, maximum 13 Ziffern, Prüffziffer wird errechnet bzw. überprüft!\n\n";
                &fehler ("EAN-Code zu lang");
              }
            else
              {
                print "\nFEHLER:\n";
                print "EAN-Code zu kurz, minimum 12 Ziffern, Prüffziffer wird errechnet bzw. überprüft!\n\n";
                &fehler ("EAN-Code zu kurz");
              }
          }
      }
  }

#Prüfziffer berechnen

for ($i = 0; $i <= 11; $i += 2)
  {
    $ungerade += substr($ean, $i, 1);
  }

for ($i = 1; $i <= 11; $i += 2)
  {
    $gerade += substr($ean, $i, 1) * 3;
  }

$pruefziffer = 10 - (($ungerade + $gerade) % 10);

if ($pruefziffer == 10)
  {
    $pruefziffer = 0;
  }

if($pruefziffer_parameter =~ /[0-9]/)
  {
    if ($pruefziffer != $pruefziffer_parameter)
      {
        print "\nFEHLER:\n";
        print "Die Prüfziffer in dem EAN-Code der dem Programm übergeben wurde (Ziffer: ", $pruefziffer_parameter, ") stimmt nicht!\n";
        print "Korrekte Prüfziffer: ", $pruefziffer, "\n\n";
        &fehler ("Falsche Prüfziffer");
      }
  }

$ean = substr($ean, 0, 12);

if($fehler == 0)
 {
  print "Ich drucke folgende Etikette ", $anzahl, " mal:\n\n";

  print $name1, "\n";
  print $name2, "\n";
  print "Artikelnr: ", $artnr, "\n";
  print $preis, "\n";
  print "Tomate ", $ean.$pruefziffer, "\n\n";

  open(DATEI, ">>print.plt");
    print DATEI "\n";
    print DATEI "OD\n";
    print DATEI "N\n";
    print DATEI "FR\"TOMATO\"\n";
    print DATEI "?\n";
    print DATEI $name1, "\n";
    print DATEI $name2, "\n";
    print DATEI $artnr, "\n";
    print DATEI $preis, "\n";
    print DATEI $ean.$pruefziffer, "\n";
    print DATEI "P", $anzahl, "\n";
  close(DATEI);

  open(LOGFILE, ">>print.log");
    $jetzt = localtime(time());
    print LOGFILE $jetzt, ";", $anzahl, ";", $name1, ";", $name2, ";", $preis, ";", $artnr, ";", $ean.$pruefziffer, ";", $ausdatei, "\n";
  close(LOGFILE);
 }

$ungerade = "";
$gerade = "";
$pruefziffer = "";
$pruefziffer_parameter = "";
$fehler = 0;
}
#Ende sub drucken

#Prüfen ob mindestens 5 Argument enthalten sind und maximal 6
if ($#ARGV == -1)
  {
    if (open(PRINTDATEI, "<ean.txt") == "false")
      {
        print "\nFEHLER\n";
        print "Datei zum einlesen existiert nicht!\n\n";
        &fehler ("Datei zum einlesen existiert nicht");
      }
    else
      {
        #Datei einlesen
        print "Lese die Datei ean.txt ein\n\n";
        $ausdatei = "Datei";
        while(<PRINTDATEI>)
          {
            ($anzahl, $ean, $name1, $name2, $name3, $preis, $artnr) = split (/;/,$_);
            drucken;
        }
      close(PRINTDATEI);
    }
  }
else
  {
    if ($#ARGV == 4 || $#ARGV == 5)
      {  
        $anzahl = $ARGV[0];
        $ean = $ARGV[1];
        $name1 = $ARGV[2];
        $name2 = $ARGV[3];
        $preis = $ARGV[4];
        $artnr = $ARGV[5];
        drucken;
      }
    else
      {
        print "\nFEHLER\n";
        print "Anzahl Parameter ist falsch, 5 oder 6 angeben!\n\n";
        &fehler ("Anzahl Parameter stimmt nicht");
      }
  }