Drucker anschließen an SPS, aber wie...?

Outrider

Level-1
Beiträge
745
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich habe folgendes Simatic-system, CPU 314C-2DP , MP277 ( Touchpanel ) und ein CP-343-Lean, außerdem wäre ein PC mit windows 2000 übergeordnet vefügbar.
Das Ziel ist es nach jedem Fertigungscyklus automatisch ein Etikett auszudrucken in dem z.B. die Länge drauf steht und eventuell andere Produktwerte.
Der Drucker soll ein spezieller Label-Drucker sein,Firma kenn ich noch nicht.
Ich weis nicht wie das Lösungskonzept aussehen soll, es muß irgendwo der Treiber installiert werden entweder im Panel, wo meiner Meinung nach am USB der Drucker angeschlossen werden kann. Nur wie kann ich den Treiber installieren?
Oder muß das Ganze über ein übergeordneten PC laufen.
Ein weiterer wichtiger Punkt wäre dann, wie kriege ich die Daten aus dem Datenbaustein in den Drucker und wie erzeuge ich das Triggerbit zum anstoßen.

Wer kennt Rat, danke für Anregungen und Tipps
 
Hallo Outrider,

Labeldrucker werden meist seriell an einer SPS angeschlossen. Du müsstest somit einer serielle Baugruppe nachrüsten. Alternativ könnte
man die erforderlichen Daten via TCP an den PC senden der dann den
Drucker anspricht. Erfordert aber ein kleines Programm auf dem PC.

Gruß SWI
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Outrider,

ich hatte mal einen Zebra-Drucker (ich glaube es war ein 105SL), soviel ich weiß kann man dem über TCP/IP den ZPL-Code für das Label schicken, allerdings brauchst du da einen Zebra-Drucker und zusätzlich noch eine Netzwerkschnittstelle (kostet extra).

Warum nimmst du anstatt der CP 343 Lean nicht eine CP 340 (RS232), RS232 wird noch von den meisten Druckern unterstützt?

Der Weg über das Panel glaube ich wird wenn du WinCC flexible nimmst in meinen Augen nicht funktionieren oder diverse Umwege, da flex nur seine eigenen Bilder drucken kann oder Reporte.

Wenn da Barcodes drauf sollen, glaube ich hast du da kaum eine Chance, da flexible so viel ich weiß keine Barcodes anzeigen bzw. auf einen Report drucken kann, da müsstest du dann eine Application schreiben, die dann von flexible aufgerufen wird und dann das druckt (meiner Meinung nach mit Kanonen auf Sptzen geschossen).
 
über TCP/IP geht es auch, hab ich aber noch nicht gemacht.

ich habe in solchen Fällen meist eine Zebra-Drucker, der wird über die CP340 angesteuert.
Wie Du das Triggerbit erzeugen kannst ist einfach, aber letztlich dein Problem, da wir auf grund der Angaben ja nicht wissen wann du drucken sollst. Du weist ja in der S7 wenn ein fertigungszyklus abgeschlossen ist, bereitst die Daten auf und gibst eine Send-Befehl an die CP340.

Weiter zum Drucker: Hier gibt es die Möglichkeiten:
A: Label auf einem PC erzeugen, in den Drucker laden, aus der SPS werden dann nur die Feldvariablen gesendet.
B: Label auf dem PC erzeugem, in die SPS laden, die passenden Stellen im DB rausfinden und beschreiben.

Ich setzte fast nur Variante 2 ein, da bei einem Druckertausch meist keiner da ist der das Etikett einspielen kann. Der Nachteil an Version B ist aber auch nicht unerheblich, denn es ist schwieriger ein Etikett zu ändern, da sich die Adressen im DB ändern.

Barcode ist überhaupt kein Problem, der wird gedruckt wie normaler Text.
 
Wollt ich doch gerade sagen,

ZEBRA, je Streifen ein k-€, intelligente Innereien, also Schriftart auswählen, Zahlenreihe übergeben, dann kommt das Label raus. IMHO auch mit Grafik und so.

Die Zebra's sind aber kompetent, dort hatte ich guten Support...

Greetz, tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@jabba
Hi, kannst du mir vielleicht genauere Infos geben wie man sowas einrichten kann? Ich stehe auch vor so einem Projekt wo z.B. Benutzerdaten und Gewicht auf ein Label gedruckt werden sollen mit nem Zebra S4M.

Danke
Andreas
 
Hi jabba,
wie der DB aussehen muss hab ich, denk ich, verstanden. Wie schicke ich diesen jetzt zum Drucker? Benutzen werde ich wohl die CP340. Hast du evtl. ein Beispielprogramm?

Andreas
 
Hast du die ersten Treads durchgelesen ?

Du musst dir erst einmal im klaren sein, ob du Etikett im Drucker speicherst und dann nur die variablen sendest , oder immer das komplett ausgefüllte Etikett.
ich nehmer immer das gesamte Etikett.
Dazu erstelle ich das Etikett mit der Zebra Software und teste es. Dort wo die variablen Texte stehen setzte ich Platzhalter ein z.B. TT.MM.JJ für das Datum.
Wenn das passt drucke ich dieses nicht mehr zum Drucker, sondern an die SPS. Dazu wird der CP Empfang eingeschaltet und die Daten in einen DB geleitet. Dort steht nun das komplette Etikett zur Verfügung.
Wenn man den DB überprüft kann man schnell das Ende der Daten erkennen.
Dies ist die länge zum senden.
Zum testen gibt man nun einfach beim Send den DB und die Länge an.
Wenn das funktioniert hat man die hälfte schon geschafft. Nur ermittelt man im DB die Adressen der Platzhalter und ersetzt vor dem Drucken diese durch die gewünschten Einträge.
 
Hi,
so langsam bin ich dahinter gestiegen. Der Drucker wird aber erst nächste Woche geliefert, dann kann ich es auch testen. Zwei Fragen noch:
1. Muss in jedem DB jedes einzelne Zeichen als Char stehen oder gibts auch ne andere Möglichkeit?
2. Können auch Zeichen frei bleiben? Z.B. definiere ich für ein Feld z.B. 'Name' 20Zeichen und lege im DB halt 20 Byte dafür an. Jetzt habe ich aber nur einen Namen mit 5 Zeichen, können die restlichen Byte dann mit Leerzeichen gefüllt werden? Akzeptiert der Drucker das?
 
Ich hatte mal angefangen das in Teile zu zerlegen.
Code:
Header
Zeile 1 Kommando
Zeile 1 Text
Zeile 1 Abschluss
...
Zeile x Kommando
usw
Wenn ich das z.B. als Angestellter in einer Firma machen müßte und öfters so ein Drucker kommt, würde sich die einmalige Arbeit sicher lohnen. Da ich das aber beim Kunden mache und mit meiner Lösung sehr schnell zum Ziel komme ist es für mich bei meinen Festpreisangebot am einfachsten. Würde ich das über eine bequemen Baustein machen würden meine Kunden den nehmen und alles in Zukunft selber machen.

Prinzipell kannst Du sobalt dein DB klar ist die Struktur anpassen.
Wichtig ist das du z.B. für Datum 10 stellen deklarierst in diese auf jeden Fall mit Leerzeichen (hex20 Dez 32) füllst, ein Hex0 führt zu einem Fehler.

Werden am WE mal einen DB einstellen, mit und ohne Struktur als Beispiel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der DB muss nicht zwingend Char sein, kann auch Array[..] of char sein,wenn man aber was anderes als Char nimmt z.B. Byte oder Word, kann man mit den Zahlen nicht so viel anfangen.

Den Drucker gibt es aber als 200,300dpi und ZPL oder EPL.

So sieht als Muster ein ZPL Etikett mit Barcode aus:
Code:
^XA~TA000~JSN^LT0^MMT^MNW^MTD^PON^PMN^LH0,0^JMA^PR4,4^MD0^JUS^LRN^CI0^XZ
^XA^LL0750
^PW1200
^FT390,390^A0N,58,57^FH\^FDhh:mm^FS
^FT71,390^A0N,58,57^FH\^FDTT.MM.JJJJ^FS
^FT319,201^A0N,58,57^FH\^FD######^FS
^FT319,106^A0N,58,57^FH\^FDXXXXXXXXXXXXXXXXXXXX^FS
^FT496,201^A0N,58,57^FH\^FDkg^FS
^BY4,3,236^FT87,665^BCN,,Y,N
^FD>:BBBBBBBBBBBBBBBBBBBB^FS
^FT71,201^A0N,58,57^FH\^FDGewicht  :^FS
^FT71,106^A0N,58,57^FH\^FDName     :^FS
^PQ1,0,1,Y^XZ
Man könnte jetzt auf die Idee kommen, mit mehreren Array of Char den Aufbau so zu zerlegen, das immer ein zu füllendes Feld einen Symbolischen Namen bekommt. Aber hier liegt eine Siemens eigene Gefahr, denn die DB's werden Wortweise verwaltet, sollte eine Variable z.B. 7 Zeichen lang sein, so würde das 8. Byte nicht angezeigt. Dies wäre folglich im Normalfall mit w#16#0 belegt. Als Folge davon funktioniert das Etikett nicht mehr.

Ich nehme daher meist einenm DB z.B. mit 300 Zeilen Char, dadurch habe ich auch die Möglichkeit Kommentare zu den Zeilen zu schreiben. (siehe Bild2)

Beim senden wird nun dieser DB mit der entsprechenden Länge gesendet.
Vorher verändert man noch die variablen Texte im Etikett. Aber Achtung wenn diese Texte mal länger oder kürzer sein sollten, z.B. bei String sollte man vorher den Bereich mit Leerzeichen füllen.

Nur mal als Muster : hier werden im DB141 die Daten für das Etikett eingetragen: Die Fehlertexte werden aus einem DB geladen , Die Fehlernummer gibt die Position an, hier sind die Texte aber schon 22 Zeichen lang, und mit Leerzeichen aufgefüllt. Bei bedarf kann ich dir auch ein Muster einstellen für das auslesen aus einem String.
Code:
      L     B#16#10                     // für alle S7
      T     LB     0
      L     B#16#2                      // Bytezugriff
      T     LB     1
      L     22                          // Länge
      T     LW     2
      L     143                         //DB  wo die Fehlertexte stehen
      T     LW     4
      L     22                          // Position Fehlercode
      L     "SR-NIO_Pumpen".BandPosition[1].Fehler_Nr    // Laden Fehlernummer aus aktuellen Satz
      *I                                // Mit der Länge multiplizieren
      L     8
      +I                                // Offset im DB
      L     22
      -I                                // Eintrag fängt mit 1 an nicht mit 0

      SLD   3
      T     LD     6
      L     B#16#84
      T     LB     6
      CALL  "BLKMOV"
       SRCBLK :=#Zeiger1
       RET_VAL:=#tINT
       DSTBLK :=P#DB141.DBX167.0 BYTE 22    // Fehlertext im Label


      CALL  "BLKMOV"                    // Seriennummer übertragen
       SRCBLK :=P#DB146.DBX38.0 BYTE 5
       RET_VAL:=#tINT
       DSTBLK :=P#DB141.DBX90.0 BYTE 5

      L     "SR-NIO_Pumpen".BandPosition[1].Tag    // Tag
      T     DB141.DBW  317
      L     "SR-NIO_Pumpen".BandPosition[1].Monat    // Monat
      T     DB141.DBW  320
      L     "SR-NIO_Pumpen".BandPosition[1].Jahr    // Jahr
      T     DB141.DBW  323
      L     "SR-NIO_Pumpen".BandPosition[1].Werker    // Werker
      T     DB141.DBW   82
      NOP   0
 

Anhänge

  • Empfang.jpg
    Empfang.jpg
    13,7 KB · Aufrufe: 157
  • db_ansicht2.jpg
    db_ansicht2.jpg
    27,1 KB · Aufrufe: 153
  • Zebra_Etikett.jpg
    Zebra_Etikett.jpg
    104,3 KB · Aufrufe: 165
Zuletzt bearbeitet:
Hi,
danke erst mal für deine Mühe. Hast du auch Erfahrung mit der Anbindung per Ethernet? Im Prinzip funktioniert es dort genau so oder?
 
Hab ich zwar noch nicht bei einem Drucker geamacht, könnte man aber mit Hyperterminal schnell prüfen ob es geht wenn der Drucker da ist.

Prinzipiell bleibt die Art und Weise gleich, nur die Anbindung ist anders.
Hier muss man dann beachten ob PN-CPU oder CP wegen verschiedener Bausteine.
Auch muss man in diesem fall erst einmal ein Verbindung aufbauen, und dann senden. Dazu gibt es hier aber einige Beispiele.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist man eigentlich auf den Printserver von Zebra angewiesen oder kann man auch einen anderen nutzen? Jemand schon Erfahrung? Die von Zebra sind ja seehr teuer.
 
Hi,
soo der Drucker ist heute endlich angekommen. Habe auch gleich einen Printserver besorgt. Über den Etiketten Designer funktioniert das Drucken auch einwandfrei. Jedoch wird es von der SPS noch nicht akzeptiert. Zum einen ist fraglich welchen Port ich einstellen muss und muss am Ende des Etiketts noch irgendwas gesendent werden das quasi als "Ende" erkannt wird und gedruckt wird? Auch wenn ich die Datei per Hyperterminal sende reagiert der Drucker noch nicht. :(

Andi
 
Was ist das denn für ein Printserver ?
Wenn du den extra besorgt hast, wie ist der denn mit dem Zebra verbunden ?

Um die Kommunikation rauszukriegen könnte man ja das TCP/IP Protokoll mitschneiden und mal ansehen.

Wenn der Drucker im Windows ja geht, kannst Du unter
Drucker-> Anschlüsse nachsehen welcher Port verwendet wird.
 
Zurück
Oben