# Drucker über SPS ansteuern



## blueColt (2 August 2010)

Hallo

Ich muss einen cab a4+ Etikettendrucker über die SPS ansteuern. Habe dazu auch eine RS 232 Schnittstelle (CP 340). SPS ist eine 314C-2DP. Hab mich jetzt schon etwas in das Thema reingelesen. Ich muss das Etikett mit der Software (CAPLABEL R2 PRO) erstellen, und es dann als ASCII Datei "drucken". Nur hab ich irgendwie keinen blassen schimmer, wie ich das erstellte Label als Datei drucken soll. Diese Option kann ich irgendwie nirgends wählen. 
Probedruck direkt vom PC aus über USB klappt schon.

Anschließend muss ich diese ASCII Datei nur noch in einen DB eintippen und diesen dann per SEND FB (welchem denn da genau?) an die SPS schicken?

besten Dank schonmal


----------



## Martin L. (2 August 2010)

Hallo blueColt,

habe schon CAB-Etikettendrucker eingesetzt. Die Daten für das Etikett
würden auf den Visu (ProTool/RT) PC gesendet, da war auch der
Drucker angeschlossen. Per SPS wurde nur der Etikettendrucker
gestartet und der Vorschub geregelt.


----------



## Gerhard Bäurle (2 August 2010)

Hallo,

ich Deinen Drucker nicht.

Ich haben das bei anderen Systemen schon so gesehen, 
dass man am PC das Label erstellt, ggf. mit einem Platzhalter
und das wird auf dem Drucker gespeichert. Per SPS wird 
dann nur die Label-Nr. und Variable übergeben.

Nur so als Idee.


----------



## blueColt (2 August 2010)

Ich hab mir das hier ja auch nur erlesen. PC hab ich an der Anlage dann *nicht *zur verfügung. Lediglich ein TP177b , den drucker und die SPS halt


----------



## Rainer Hönle (2 August 2010)

blueColt schrieb:


> Ich hab mir das hier ja auch nur erlesen. PC hab ich an der Anlage dann *nicht *zur verfügung. Lediglich ein TP177b , den drucker und die SPS halt



In diesem Fall müssen die "Formulare" bereits im Drucker archiviert sein und werden nur noch über die SPS ausgewählt. Dass das komplette Ettiket in der SPS abgelegt ist und mit übertragen wird, kann ich mir nicht vorstellen. Wie sollen die Binärdaten in die SPS (z.B. in einen DB) gelangen?


----------



## blueColt (2 August 2010)

gute frage, hab ich mir so erlesen... 
http://www.sps-forum.de/showpost.php?p=261470&postcount=11
aus dem Topic
http://www.sps-forum.de/showthread.php?t=27858&page=2


----------



## Rainer Hönle (2 August 2010)

Na prima, wenn das der Drucker ist und die Software dies unterstützt, dann klappt das ja. Allerdings sicher nicht mit USB (außer, wenn es sich um einen USB-Seriell-Wandler handelt).
Aber jabba greift hier sicher mit seiner Erfahrung helfend ein. Oder ihm eine pn schicken, damit er auf diesen Thread aufmerksam wird.


----------



## jabba (2 August 2010)

Ich kenne das Ding zwar nicht , ist aber eigentlich auch nicht wichtig.

1. Muss der Drucker ja über eine Serielle Schnittstelle verfügen
2. Wenn er dies hat, solltest Du in der Cab Software auch diesen mit der Seriellen Schnittstelle verbinden können.
3. Wenn der Drucker an die Serielle Schnittstelle angebunden wurde, kannst du diesen in den Druckereigenschaften von Seriell auf Datei umstellen.
Somit kommen die Daten nun in der von mir beschriebenen Datei an.

Wenn Das Label sehr umfangreich ist, sollte man aber den von mir beschrieben Trick benutzen, und mit dem PC in die SPS "drucken". Also Drucker testen mit seriellem Kabel vom PC aus. Wenn dieses alles passt, das Kabel vom Drucker ab und auf die CP stecken. In der SPS sen FB2 P_Rec Receive einbinden, und die Daten in einen DB laden. Somit steht das gesamte Label im DB.

Aber vorab muß man sich für einen der beiden Wege entscheiden.

1. Alle Daten , also das komplette Etikett liegen in der SPS
     Vorteil: Beim Austausch des Drucker braucht auch nach Jahren keiner wissen wie man z.B. das Makro nachladen kann
     Nachteil : Eventuell langsames Senden da viele Daten, und Änderung des Etiketts quasi nicht mehr möglich, bzw sehr aufwändig
2. Makro liegt im Drucker, SPS sendet nur die Daten
   Vorteil : Nur wenige Daten zu senden, Sehr flexibel erweiterbar
               Etiketten können sehr komfortabel geändert werden
   Nachteil: Man muss jemanden im betrieb haben der das kann. Oft laufen die Dinger mehrere jahre, und dann weiss keiner mehr wo die Software oder die Datei für das label ist .

Alles Geschackssache : Ich nehme meist die erste Lösung, ist aber meine persönliche Auffassung. Technisch sinnvoller und besser ist die zweite Lösung.

In J-Script für den CAB Drucker sieht ein Label z.B. so aus

```
J Job Start
H 100 Speed (100 mm/s)
O R Orientation rotated by 180°
S I1;0,0,68,70,100 Size of label (100x68 mm, gap 2 mm)
T 10,10,0,5,pt20;sample Text object/font: Swiss bold, 20 pt
B 10,20,0,EAN-13,SC2;401234512345 Barcode EAN 13, size SC 2
G 8,3.5,0;R:30,9,0.3,0.3 Graphic, box 30 x 9 mm,
Line strength 0.3 mm
A 1 Number of labels (in this example 1)
```


----------



## jabba (2 August 2010)

Hab mir das Ding mal angesehen, hab vor jahren mal einen in der Anlage gehabt.

Das Ding kann auf jeden Fall die Etiketten im Drucker speichern, das solltest Du dir überlegen. Es hängt wie oben beschrieben halt immer davon ob, ob du z.B. selber für das Gerät zuständig bist, oder ob es z.B. nach China geliefert wird, da spielen die kleinen Chinesenhände mal gerne an allem rum und löschen mal so eben das Etikett.

Wenn Du das Etikett im Drucker speicherst, braucht Du nur einen DB zu erstellen der die Variablenfelder sendet.


----------



## PhilippL (3 August 2010)

Hi,

ich kenne die CAB-Drucker... haben mich auch schon etwas geärgert.
Im Anhang findest du 2 Bilder vom "Drucken" Menü. Dort kannst du erstmal die Auswahl für in Datei drucken aktivieren und dann dein Label in eine Text-Datei drucken. Den Inhalt der Text-Datei in einen DB tippen und ab damit über RS232 an den Drucker. Achtung: Du mußt exakt darauf achten, dass du nach jeder neuen Zeile ein LF und CR mit schickst (hex0D und hex0A).

Gruß

PhilippL


----------



## blueColt (3 August 2010)

Hallo 



Rainer Hönle schrieb:


> Na prima, wenn das der Drucker ist [...]


 
Nein, ist nicht der Drucker, aber groß unterscheiden vom Prinzip her sollten die sich ja nicht 



jabba schrieb:


> Aber vorab muß man sich für einen der beiden Wege entscheiden.


 
Soll auf jeden Fall immer alles gesendet werden, da ja sonst beim Druckertausch alles neu eingerichtet werden muss.

Ich probier jetzt erstmal das mit dem FB2, ob ich das hinbekomme  



PhilippL schrieb:


> Im Anhang findest du 2 Bilder vom "Drucken" Menü. Dort kannst du erstmal die Auswahl für in Datei drucken aktivieren und dann dein Label in eine Text-Datei drucken. Den Inhalt der Text-Datei in einen DB tippen und ab damit über RS232 an den Drucker. Achtung: Du mußt exakt darauf achten, dass du nach jeder neuen Zeile ein LF und CR mit schickst (hex0D und hex0A).


 
Genau das hab ich gesucht, und nicht gefunden, da es in der Software wegen fehlendem Dongle wohl deaktiviert ist... Naja, in der Lite-Version gehts, reicht zum testen  
Selber in DB tippen weiß ich grad nich wirklich wie (von der Struktur her), als versuch ichs erstmal "automatisch"


----------



## blueColt (3 August 2010)

ich hab mir jetzt ein "einleseprogramm" gebaut


```
U(    
      O     M      1.0
      ON    M      1.0
      )     
      =     L     20.0
      BLD   103
      CALL  "P_RCV" , DB2
       EN_R  :=L20.0
       R     :=
       LADDR :=272
       DB_NO :=10
       DBB_NO:=0
       NDR   :=
       ERROR :=
       LEN   :=
       STATUS:=
      NOP   0
```
 
Sollte sich da nicht der DB10 füllen, wenn ich auf Drucken in der CAB software geh?!


----------



## jabba (3 August 2010)

Hast Du schon mal einen CP340 in betrieb genommen ?

Wenn nein:
- CD installiert zum parametrieren des CP
- in der Hardware den CP unter Parameter einstellen
- Protokoll ASCII, Baudraute, Parity usw. mit Drucker abgleichen
- nach Änderungen ins AG laden
- gleiches Kabel zum testen vom PC->Drucker genommen 
- FB2 geladen
- DB2 geladen
- DB10 geladen
- Beim drucken muss die RCV LED an der Baugruppen kurz flackern.


----------



## blueColt (3 August 2010)

Nein, ist das erste mal 

Software ist bereits installiert. Im Drucker kann ich nur Baudrate und Protokoll (hab ich jetzt mal 9600 und XON XOFF gewählt) einstellen. Muss ich da bei der Parität "beliebig" wählen?

Was ist das "AG"?

Kabel musste ich leider ein anderes nehmen, da PC->CP female->female und PC->Drucker female->male ist. Da hab ich einfach das Nullmodemkabel von Siemens jetzt genommen. Hoffe das ist nicht falsch?!


----------



## blueColt (3 August 2010)

eben nochmal probiert, RCV leuchtet, aber mein db10 füllt sich einfach nicht mit den daten. 
Müssten doch da aber eigentlich zu sehen sein, wenn ich online die brille anmache (also den Beobachtenmodus)
DB 10 ist übrigens noch komplett leer gelassen, ist doch richtig oder muss ich da schon irgend was vorher reinschreiben?


----------



## Rainer Hönle (3 August 2010)

blueColt schrieb:


> eben nochmal probiert, RCV leuchtet, aber mein db10 füllt sich einfach nicht mit den daten.
> Müssten doch da aber eigentlich zu sehen sein, wenn ich online die brille anmache (also den Beobachtenmodus)
> DB 10 ist übrigens noch komplett leer gelassen, ist doch richtig oder muss ich da schon irgend was vorher reinschreiben?



Wie groß ist der DB 10?


----------



## blueColt (3 August 2010)

siehe anhang, halt ein ganz normaler, leerer DB, auch von der größe her


----------



## jabba (3 August 2010)

welches format hat der db, bei einem strin wird nix gespeichert

schreib mal so

```
U(    
      O     M      1.0
      ON    M      1.0
      )     
      =     L     20.0
      BLD   103
      CALL  "P_RCV" , DB2
       EN_R  :=L20.0
       R     :=
       LADDR :=272
       DB_NO :=10
       DBB_NO:=0
       NDR   :=[COLOR=Red]m200.0[/COLOR]
       ERROR :=
       LEN   :=[COLOR=Red]mw210[/COLOR]
       STATUS:=
      NOP   0

      [COLOR=Red]U     M    200.0
      FP    M    200.1
      SPBNB nix
      L     MW   210
      T     MW   202      // Länge der empfangenen Daten
      s     m200.2        // Es wurden Daten empfangen
nix : NOP   0[/COLOR]
```


----------



## Rainer Hönle (3 August 2010)

blueColt schrieb:


> siehe anhang, halt ein ganz normaler, leerer DB, auch von der größe her



Da muss schon der Platz allokiert werden, in den "reinempfangen" werden soll. Dies kann z.B. durch anlegen eines Bytearrays erfolgen. Aber mit einem komplett leeren DB wird es nicht funktionieren.


----------



## jabba (3 August 2010)

dB db IST FALSCH:
Du musst den so deklarien
DB öffnen
1. Zeile 
Daten Array [1..500] of char


----------



## blueColt (3 August 2010)

hab das noch dazugeschrieben und db als array gemacht, aber da tut sich nach wie vor nichts in meiner Datenbank, auch im OB1 ist nicht zu merken, das der was machen würde


----------



## jabba (3 August 2010)

Kannst du mal kurz das Projekt hier hochladen, 
ist vieleicht einfacher den fehler zu finden.

Mich stutzt z.B. das da keine richtigen Texte bei dem Formalparametern des FB's stehen.


----------



## Rainer Hönle (3 August 2010)

jabba schrieb:


> Mich stutzt z.B. das da keine richtigen Texte bei dem Formalparametern des FB's stehen.



Man kann symbolisch programmieren, muss es aber nicht ...


----------



## jabba (3 August 2010)

Klar kann man das, aber ob symbolisch oder nicht bleibt der Text vom Formaloperanden stehen, und in den ersten Beispielen war der noch da und jetzt ist es weg.
Sieht dann so aus:

```
U     M      1.1
      =     L     28.0
      BLD   103
      CALL  FB     2 , DB12
       EN_R  :=L28.0
       R     :=
       LADDR :=256
       DB_NO :=13
       DBB_NO:=4
       NDR   :=M13.0
       ERROR :=M13.1
       LEN   :=#len
       STATUS:=#Status
      NOP   0
```
Bei ihm steht aber nur noch IN1 usw. und das bei einem geschützen Baustein, da stimmt was nicht. Wahrscheinlich aus Unwissenheit einen kleinen Fehler gemacht.


----------



## blueColt (4 August 2010)

Guten Morgen.

klar kann ich!

Das mit IN1 und so liegt am "onlein beobachten" da bringter irgend son fehler, das er keine Namen hätte 

so, hoffe jetzt das richtige archiviert


----------



## PhilippL (4 August 2010)

Hi,

deine Hardwarekonfiguration stimmt nicht. Du mußt dort das ASCII-Protokoll verwenden. Im Anhang findest du meine Einstellungen von unserem CAB-Drucker mit denen funktioniert die ganze Sache. Dann sollte auch dein Baustein was empfangen. Voraussetzung die Einstellungen deiner Schnittstelle am PC passen auch zu der am CP bzw. Drucker.

Gruß

PhilippL


----------



## blueColt (4 August 2010)

aber nur beim CP340 muss ich das einstellen oder? Hatt ich eigentlich gestern schonmal 

Mir ist grad aufgefallen, wenn ich auf ASCII umstell und nur speicher, bleibts auf ascii stehn. Wenn ich "speicher und übersetze", stellts einfach wieder das 1. Protokoll rein 

aber trotz nochmaligem umstellen und hochladen schreibts mir nix in den DB


----------



## PhilippL (5 August 2010)

Hi,

dann prüf doch erstmal die Kabelverbindung. RxD und TxD richtig miteinander verbunden? Wenn du was vom PC schickst leuchtet wenigstens die RxD Lampe am CP? Ist es wirklich so ein Problem die Textdatei aus der Druckersoftware in einen DB zu hacken? Im Anhang hab ich mir erlaubt dein Testprogramm etwas zu verschönern... Kommentare und symbolische Bezeichnung helfen meist weiter. Ebenso hab ich das auswerten des Status mal hinzugefügt. Evtl. findet sich auch dort ein Fehler.
Auch die Hardwarekonfig bleibt bestehen... zuerst bei den Protokolleinstellungen auf speichern und dann speicher und übersetzen.

Gruß

PhilippL


----------



## blueColt (5 August 2010)

So, grad ma dein Programm getestet, beide Merker bleiben auf 0 und ins MW wird auch nix geschrieben 

Ja, die empfangsLED vom CP leuchtet, wenn ich auf Drucken geh


Edit: Huch, es geht  So, gleich mal versuchen auszugeben


----------



## blueColt (5 August 2010)

Hmmm, wenig erfolg 

Mit dem ersten (etwas komplexen) Testetikett bringt er mir Fehler, das er einige Zeichen aus dem DB nicht verstanden hätte

Also schnell nochmal umgestöpselt und nur einen Strich in den DB gelesen. Keine Fehlermeldung mehr, der Drucker wacht aus dem Ruhemodus auf (also wird er was empfangen scheinbar), aber etikett wird keins gedruckt :\


----------



## jabba (5 August 2010)

Beliebter Fehler, ist z.B. das Ende kein CR+LF steht, oder die Übertragungslänge ein Byte zu endet.

Im DB darf nirgendwo ein B#16#0 stehen, es muß immer mindestens durch ein Space b#16#20 .

Wenn Daten eingefügt werden , darauf achten das z.B. ein Struct auf Word auflöst. Das heisst für man ein struct oder UDT mit 5Char ein, so ist das letzte Byte unbenutzt und taucht im DB als b#16#0 auf, was nicht zulässig ist.


----------



## blueColt (5 August 2010)

Also irgendwie scheints zu gehn, erstmal, aber nur das testprogramm, bin grad am ummünzen ins richtige Programm, aber das wird wohl heut nich mehr ganz fertig 

CR+LF steht aber keins in dem DB, geht aber scheinbar trotzdem?!


----------



## Neuling74 (17 September 2010)

Hallo blueColt!
Ich bin jetzt in der "glücklichen" Lage ebenfalls einen Cab-Drucker über die SPS ansteuern zu dürfen. Allerdings habe ich keine Ahnung wie der DB aussehen soll. Was für einen Datentyp ich verwenden soll, usw. Wäre es möglich das hier mal ein DB eingestellt wird, damit ich das auch kapiere?
CPU 313C 2DP + CP341 und eben der Cab a4+ Drucker. Bin was das angeht völliger Neuling.


----------



## blueColt (17 September 2010)

hab die datei jetz auf de schnelle leider nciht gefunden, erstellen kannst du dir aber selber einen. installier mal das etikettenprogramm, was da dazu war, dann schließt du die cp341 an den pc an, RCV-Baustein rein und druckst ein schnell erstelltes etikett als ascii und schickst es zu dem COM Port raus, an dem die CP hängt, quasi als wär sie ein Drucker. Dann haste das in deinem DB in der SPS

is dann quasi für jedes einelne zeichen ne neue Zeile angelegt die Zeichen  als CHAR


----------



## Neuling74 (17 September 2010)

Werde das mal probieren!
Melde mich sobald ich einen Erfolg oder Misserfolg habe. Allerdings kann das nächste Woche wedren. Bin übers Wochenende unterwegs und komme dann erst amn Mittwoch dazu. Trotzdem danke für die schnelle Antwort.


----------



## Neuling74 (26 September 2010)

blueColt schrieb:


> hab die datei jetz auf de schnelle leider nciht gefunden, erstellen kannst du dir aber selber einen. installier mal das etikettenprogramm, was da dazu war, dann schließt du die cp341 an den pc an, RCV-Baustein rein und druckst ein schnell erstelltes etikett als ascii und schickst es zu dem COM Port raus, an dem die CP hängt, quasi als wär sie ein Drucker. Dann haste das in deinem DB in der SPS
> 
> is dann quasi für jedes einelne zeichen ne neue Zeile angelegt die Zeichen  als CHAR




Habe das mal ausprobiert. Allerdings scheine ich noch irgendwas falsch zu machen. In meinem DB steht nichts drin. Die CP empfängt zwar, die LED flackert die ganze Zeit, aber im DB steht nichts drin. Bn gerade dabei die Anlage zu installieren. Werde mich danach noch einmal damit beschäfftigen. Werde dann meinErgebnisse hier melden.


----------

