TIA Kommunikation aus TIA (V15.1) mit Drucker

Alex_Freedom

Level-2
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Vielleicht, hat einer schon Problem gehabt und kann mir weiter helfen...

Bekomme den Drucker nicht zum Funktionieren.

Wir wollten den Drucker (Zebra GK420t) über TPC/IP Kommunikation aus TIA Portal V15.1 steuern. Anbinden und steuern tue ich über "TSEND_C" Standard Baustein aus "Open user communication"-Bibliothek.
Und das funktioniert sogar. Die Verbindung steht und wartet auf Auftrag.

Nun bei senden der Daten ("REQ") tut sich nichts.
Die Daten habe ich im Moment als Array String. Ich habe aber schon Array Char versucht, mit gleichem Effekt, also tut sich gar nichts.
Bekomme auch keine Fehler am "Status".

Vielleicht, hat schon jemand das gleiche Problem gehabt?
 

Anhänge

  • TSEND_C_Daten_senden.jpg
    TSEND_C_Daten_senden.jpg
    459,5 KB · Aufrufe: 32
  • TSEND_C_Verbindung_aufgebaut.jpg
    TSEND_C_Verbindung_aufgebaut.jpg
    381,3 KB · Aufrufe: 33
  • TSEND_C_warte_auf_Verbindung.jpg
    TSEND_C_warte_auf_Verbindung.jpg
    357 KB · Aufrufe: 32
TSEND kenne ich nicht, dennoch beim drüberschauen nur so gesehen, falls das noch nicht aufgefallen ist:

LEN=30 bei nem Pointer auf nen String ab 32 der bei 799 endet ist korrekt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
LEN ist die maximale Anzahl von Bytes, die gesendet werden sollen, die sollte aber durch die aktuelle Länge im String-Header begrenzt werden. Der String Send_array_String[0] beginnt bei DBB32 (der String-Header), die 3 Zeichen Inhalt '^XA' bei DBB34

Die Daten habe ich im Moment als Array String.
Warum? Was erhoffst du dir davon? Im Moment verschwendest du nur einen Haufen Datenspeicher.
 
Ist im Sendestring im STRING-Header die Stringlänge eingetragen?
Was für eine Fehler-STATUS-Meldung erhältst du?
Ist die Verbindungsbeschreibung an CONNECT korrekt?
Verbindung ist korrekt, nach mein Wissen. Ich merke z.B. wenn der Drucken vom Netz getrennt wird (und anders rum).
Fehler habe ich nicht, Status bleibt bei 7004 stehen.
String-länger im Header? Wie mache ich es?
 
LEN ist die maximale Anzahl von Bytes, die gesendet werden sollen, die sollte aber durch die aktuelle Länge im String-Header begrenzt werden. Der String Send_array_String[0] beginnt bei DBB32 (der String-Header), die 3 Zeichen Inhalt '^XA' bei DBB34


Warum? Was erhoffst du dir davon? Im Moment verschwendest du nur einen Haufen Datenspeicher.
Meinst du so was (siehe Anhang)? Ist jetzt durch Array_Char realisiert...
 

Anhänge

  • TSEND_C_Bild.jpg
    TSEND_C_Bild.jpg
    567,2 KB · Aufrufe: 27
Zuviel Werbung?
-> Hier kostenlos registrieren
String-länger im Header? Wie mache ich es?
Was der String-Header ist siehe TIA Hilfe "string datentyp" zum Aufbau des Datentyps STRING
Wie weist du dem String Send_array_String[0] seinen Inhalt zu? Bei der Deklaration des DB oder mit einer SCL-Anweisung Send_array_String[0] := 'ABC'; ? Dann wird die Stringlänge automatisch in den Header eingetragen.
 
Was der String-Header ist siehe TIA Hilfe "string datentyp" zum Aufbau des Datentyps STRING
Wie weist du dem String Send_array_String[0] seinen Inhalt zu? Bei der Deklaration des DB oder mit einer SCL-Anweisung Send_array_String[0] := 'ABC'; ? Dann wird die Stringlänge automatisch in den Header eingetragen.
Das tue ich erst direkt in DB...
Zuerst will ich mein Drucker "erwecken".

Die Daten, die später gesendet werden, sind unterschiedlich, von Zahlen bis vielleicht QR Code...
 
Das tue ich erst direkt in DB...
Wenn du die einzelnen Zeichen direkt in die Strings (ohne Stringfunktionen) hineinschreibst, dann musst du auch selbst die aktuelle String-Länge in den Header schreiben. String-Funktionen wie CONCAT tun das automatisch.
Nochmal: Warum wolltest du Array of String? Laut deiner Deklaration wären das 13 Strings je 254 Zeichen (256 Bytes) lang. 3328 Bytes, um ein paar Zeichen zu senden?
 
Servus,

zu aller erst möchte ich anmerken, dass der angegeben ZPL Code auch gar kein Label ausgeben würde.

Mit ^XA das Label beginnen und mit ^XZ das Label beenden ist schon mal richtig.
Der Drucker weiß aber mit dem ^Hello nichts anzufangen.

Wo willst du es gedruckt haben?
Was sind die Daten die gedruckt werden sollen?
Soll es ein Barcode, ein QR-Code, eine Datamatrix, ein Text, oder sonst was sein?
Nach den Steuerzeichen ^ und ~ folgt immer ein Befehl.

Lösung dazu in a nutshell
Mit ^FOx,y (FieldOrigin) würde ich vorher einmal einen Platz am Label angeben, wobei die Werte x und y die Anzahl der Pixel von der linken oberen Kante des Labels sind.
Mit ^CFf,h,w (Change (Alphanumeric) Font) kann das Textformat geändert werden, kann aber für deinen Test jetzt derweilen ausgelassen werden, da die Standardwerte ausreichen sollten.
Falls ein Barcode gedruckt werden soll käme hier ein Befehl je nach Barcode, im Falle eines Textes nichts.
Mit ^FD gibst du die Daten an die gedruckt werden sollen, also in deinem Fall ^FDHello.
Mit ^FS gibst du an, dass du mit diesem Teil des Labels Fertig bist.

Das alles kann man auch in einen String packen und würde dann z.B. so aussehen: ^XA^FO10,10^FDHello^FS^XZ
Mit dem Code sollte ein Label rauskommen.

Es gibt einen online viewer für diese Codes hier und eine generelle Informationsseite hier auf welcher auch ein Link zu den ganzen Befehlen hier zu finden ist.
 
Servus,

zu aller erst möchte ich anmerken, dass der angegeben ZPL Code auch gar kein Label ausgeben würde.

Mit ^XA das Label beginnen und mit ^XZ das Label beenden ist schon mal richtig.
Der Drucker weiß aber mit dem ^Hello nichts anzufangen.

Wo willst du es gedruckt haben?
Was sind die Daten die gedruckt werden sollen?
Soll es ein Barcode, ein QR-Code, eine Datamatrix, ein Text, oder sonst was sein?
Nach den Steuerzeichen ^ und ~ folgt immer ein Befehl.

Lösung dazu in a nutshell
Mit ^FOx,y (FieldOrigin) würde ich vorher einmal einen Platz am Label angeben, wobei die Werte x und y die Anzahl der Pixel von der linken oberen Kante des Labels sind.
Mit ^CFf,h,w (Change (Alphanumeric) Font) kann das Textformat geändert werden, kann aber für deinen Test jetzt derweilen ausgelassen werden, da die Standardwerte ausreichen sollten.
Falls ein Barcode gedruckt werden soll käme hier ein Befehl je nach Barcode, im Falle eines Textes nichts.
Mit ^FD gibst du die Daten an die gedruckt werden sollen, also in deinem Fall ^FDHello.
Mit ^FS gibst du an, dass du mit diesem Teil des Labels Fertig bist.

Das alles kann man auch in einen String packen und würde dann z.B. so aussehen: ^XA^FO10,10^FDHello^FS^XZ
Mit dem Code sollte ein Label rauskommen.

Es gibt einen online viewer für diese Codes hier und eine generelle Informationsseite hier auf welcher auch ein Link zu den ganzen Befehlen hier zu finden ist.
Danke, hat mich auch weiter gebracht.
Muss jetzt allerdings noch mit einer "Sprache" mich beschäftigen ;):)
 
Wenn du die einzelnen Zeichen direkt in die Strings (ohne Stringfunktionen) hineinschreibst, dann musst du auch selbst die aktuelle String-Länge in den Header schreiben. String-Funktionen wie CONCAT tun das automatisch.
Nochmal: Warum wolltest du Array of String? Laut deiner Deklaration wären das 13 Strings je 254 Zeichen (256 Bytes) lang. 3328 Bytes, um ein paar Zeichen zu senden?
Dankeschön, habe jetzt mein Drucker zum Funktionieren gebracht...
Allerdings, hur danach, wenn ich auf TCON und TSEND Bausteine umgestiegen bin...

Mit dem Array of String hast du Recht - lässt sich auch reduzieren. :)(y)
 
Zurück
Oben