Step 7 Unerwünschte Zeichen beim Senden von STRING

Kawasuki

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

habe hier ein Problem bei Senden von ARRAY of String an einen Zebra drucker. Ich habe eine sehr lange Anweisungszeile (ca. 6000 Zeichen) die ich an den Drucker senden muss, plus noch andere Anweisungen sind aber wesentlich Kürzer.
Dazu habe ich einen eine Array [0..70] of String[215] angelegt, die eine lange Anweisungszeile habe ich entsprechend auf Strings aufgeteilt. Wenn ich nun das ganze an den Drucker sende, spuckt er mir ein beeres Blatt raus.
Habe dann das Ganze an meinen PC gesendet (PacketSender - PC Tool) um zu sehen was dabei überhaupt rauskommt.
Jetzt sehe ich da, dass da zwischen jeder Zeile bzw. zwischen jedem String unerwünschte (zumindest von mir unerwünscht :smile:) Zeichen stehen, wie : \d7\00 \00\d7E ...


Ich befülle die Strings vorher mit Leerzeichen, mache ich das nicht stehen da noch wesentlich mehr Zeichen "\00 \00" zwischen den anweisungen.

String prob.jpgSCL.jpg

Wäre nicht die eine Lange Anweisung, würde das funktionieren, da die restlichen Anweisungen zwischen Kontrollzeichen stehen und der Drucker den Rest ignorieren würde. Aber die 6000 Zeichen lange Zeile muss irgendwie am Stück am Drucker ankommen, sonst fehlt mir einiges auf dem Etikett. Habe es mal ohne der Zeile Probiert, Drucker druckt die Klartexte. Barcodes und Rahmen fehlen aber....

Es ist eine S7-317 CPU und gesendet wird mit TSEND.

Kann man das irgendwie vermeiden, das da diese Zeichen mitgesendet werden? Passt das mit TSEND? Oder muss man die Sache komplett anders angehen?....

Vielen Dank!
 
D7 hex(215 dec) ist die länge deines Strings.
Im den ersten beiden bytes eines strings steht immer die aktuelle und die maximale länges des strings.
müßtest also erst ab deinem zweiten word senden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
wie PinkPanther schon schreibt, befindet sich in jedem String ein Header, damit bspw. ein HMI weis, wie es deinen String anzeigen soll.
Zum versenden an Peripherie solltest du deine Daten vielleicht eher in ein Char-Array packen.
 
Vielen Dank für den Tipp,
habe jetzt die Daten anschließend noch in ein Array- Char-Array umkopiert. Nun siehts schon besser aus aber der Drucker akzeptiert wohl nicht alles. Irgendwas kommt da noch dazwischen. Texte sind jetzt Plötzlich fetter geworden bzw. sind verschoben...

Muss weiter forschen :confused:
 
Es kann sein das dein Drucker Steuerzeichen zur Erkennung des starts bzw. ende einer zeile. benötigt.
Habe leider noch nichts mit dem von dir benannten Drucker gemacht. Keine Ahnung was der so benötigt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi
Ich hatte auch schon Probleme mit dem Ansteuern. Folgendes hat mir der Simens Support geantwortet:


Ich vermute, dass Sie bei dem Datenbaustein, den Sie an den Drucker senden, den optimierten Bausteinzugriff aktiv haben. Wenn Sie den rausmachen, sollte es richtig funktionieren. Machen Sie dazu einen Rechtsklick auf den entsprechenden DB, öffnen die Eigenschaften und entfernen bei den Attributen den optimierten Bausteinzugriff.


Bei dem optimierten Bausteinzugriff wird jedes Char auf ein komplettes Wort im Speicher abgelegt, damit die CPU schneller darauf zugreifen kann. Am LAN wird dann aber auch das komplette Wort gesendet, also immer ein Füllbyte plus der Char. Wenn der nicht-optimierte Bausteinzugriff gemacht wird, belegt jeder Char nur ein Byte, die CPU greift dann zwar langsamer zu, dafür wird es am LAN korrekt gesendet und das Telegramm ist kürzer und schneller am LAN.


Half allerdings auch nichts. Die Lösung war den Sendestring nicht als „WSTING“ zu deklarieren. Mit Format „STRING“ geht es.

Gruss blimaa
 
Zurück
Oben