CP340 Problem

bennzi

Level-1
Beiträge
107
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, ich soll über ein CP340 einen Linx Drucker mit Ascii ansteuern.
Wenn der Drucker mir was sendet, ich die daten empfange in den DB,
dann zeigt er mir nur "vierecke" als char an...
wiso ist das so?
ich kann den drucker über den cp auch garnicht steuern, nur über mein laptop und der mitgelieferten software.
wie schick ich den ein Steuerzeichen im asccii raus?

danke

mfg

bennzi
 
Hallo,

du bekommst, bzw. sendest ja mindestens CR/LF (10h/13h), das sind schon mal "Vierecke" :cool:
Am besten du besorgst dir mal eine ASCII Tabelle. Alle "normalen" Zeichen siehst du ja auch, nur die Steuerzeichen sehen komisch aus...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kool, danke für die antwort vorerst. *freu
also nen acii tabelle hab ich. aber ohne steuerzeichen. wie sehen die aus?
ich muss zb: 1B 03 12 02 1B als ascii senden. das sind alles steuerzeichen für den drucker. wie send ich denn des als ascii, wenn ich alles umwandle kommt auch nich richtg an. weil ich ja nur zeichen schick...

mfg


dankeeeeschööööönn
 
Hallo Bennzi,

dein Problem liegt daran, das du alle ASCII -Zeichen lesen willst.
Aber nur ein Teil davon sind sichtbare Zeichen.

bis Hex20, oder Dez32 sind es immer nur Steuerzeichen.
Ich lege den DB so an, das die Steuercode´s als Byte, und die Texte als Char definiert sind
z.bb

DBb0 Byte b#16#02 // Start Text
dbb1 Char 'H'
dbb2 Char 'A'
dbb3 Char 'L'
dbb4 Char 'L'
dbb5 Char 'O'
dbb6 byte b#26#03 // End of Text
dbb7 byte b#16#0D // Return
dbb8 byte b#16#0A // Line Feed
 
hi jabba ;)
häää. ich glaub solangsam wirds mir zu hoch.
ok das mit dem datenbeistein is mir einigermaßen klar.

bis Hex20, oder Dez32 sind es immer nur Steuerzeichen. ???
was soll dass heissen?

wieso b#16#02 oder b#26#03 oder b#16#0D oder b#16#0A ???
des passt doch garnicht in ein byte?
oder geht jeweils ein steuerzeichen in ein byte?? häää??
wie setzten sich denn diese steuerzeichen zusammen? nullblick.

also in dem programm von dem drucker ist es so, damit er weiss dass es ein steuerzeichen ist, schreibe ich zb "\x" vor des 1B usw.
praktisch \x1B\x02\x12\x03\x1B klappt auch gut und kommt richtig an.


danke jabba ;) du progger *gg

mfg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
b#16#0D ist ein Byte Hexadezimal dargestellt mit dem Wert Dezimal 13.
Die Steuerzeichen 0D 0A heissen auch CR LF oder auch Carriage-Return Line-Feed und stammt aus der Schreibmaschinenzeit (Wagenrücklauf und Zeilenvorschub). Wurde für die Drucker übernommen.

Du kannst die Steuerzeichen einzeln (als Byte) oder als komplette Zeile (als String) übertragen.
 
hm. ich denk solangsam wirds klarer.

des b bedeutet byte
aber was ist der unterschied zwischen 16 und 26
dannach kommt der code in HEX.

also in meinem fall müsste ich wenn ich nen 1B usw als steuerzeichen senden wollte des so in nem db schreibn:

dbb0 byte b#16#1B
dbb1 byte b#16#02
usw?

schickt der des dann aber nich alle einzeln als zeichen?

oder als string
dbb0 string 'b#16#1Bb#16#02b#16#12....'

seh ich des richtig?

danke euch!!!!!!!!!!!!!!!!!
 
was ist der unterschied zwischen 16 und 26
dannach kommt der code in HEX.

Das war mit Sicherheit ein Schreibfehler. Da wollte Jabba auch b#16#.. schreiben.

In den String musst du die Zeichen schon alle einzeln an die richtig Stelle schreiben (in Step7). In SCL wäre das etwas einfacher. In deinem Fall sähe das so aus, dass du zunächst deinen String (vielleicht in einem DB) deklarierst und dann die einzelnen Werte an die richtige Stelle schreibst.
Beispiel :
Code:
im DB1 deklarierst du einen String mit der gewünschten Länge

L  'H'
T DB1.DBB2
L  'A'
T DB1.DBB3
L  'L'
T DB1.DBB4
 L  'L'
T DB1.DBB5
 L  'O'
T DB1.DBB6
 L  b#16#0D
T DB1.DBB7
 L  b#16#0A
T DB1.DBB8
  
usw.

Dann Nutz-Länge im Byte 1 eintragen ...

Das könntest du dann übertragen - Verbesserungen sind natürlich möglich ...:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ahhhhhhhhhh!!!!!
da freut man sich ja richtig auf morgen. hihi

zu den nutzdatenlängen: muss ich da angeben wieviele byte lang der string is gell? wenn ich einen string[20] '00000000000000000000' erstelle, dann macht der des aber automatisch oder?
sende ich ihm dann aber trotzdem ab byte 2 nur alles und lass 0 und 1 weg oder muss ich byte 0 und 1 dazusenden?


danke dir echt herzlich. ich hätt mir noch den kopf zertrümmert....
aber woher soll ich als laihe denn wissen wie ich ein ascii steuerzeichen sende? hihi b#16#hexcode. steht ja auch nirgends. *gg


DAAAAAAAANKE!!! werds gleich morgen austestn und bescheit gebn *froi!
 
Hallo Bennzi,
Byte 0 und 1 sind der Header des Strings für Siemens-interne Verwendung. Im Byte 0 steht die deklarierte Länge und in Byte 1 die effektive Länge.
Wenn du den Kram versendest, dann gibst du als Start-Pointer dein Byte 2 an und musst die (effektive) Länge ja noch seperat angeben. Ansonsten hättest du den String auf jeden Fall "initialisieren" müssen ...

Viel Spaß morgen beim "Spielen" ...:rolleyes:
 
Hallo Bennzi,

also Cp340 ist wohl ein Leidensweg von Dir :rolleyes:

Wenn Du bei der anderen Problemstellung den Empfang der CP340 verstanden hast, gibt es eine einfache Lösung für den DB.

Wenn ich z.B. komplizierte Label´s mit DMC o.ä. drucken muss,
erstelle ich das Label in der Software , dann drucke in Seriell aus.
Die SPS programmiere ich auf Empfangen, den DB sichere ich mir,
und habe einen DB mit allen Steuercode´s die man braucht.

PS: war wirklich nur ein Typfehler
aber du solltest die Befehle b#16#?? schon kennen, wenn Du an so eine Aufgabe gehts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja genau. ein leidensweg *gg
ja was soll man erwarten. hab grad ma nen jährchen ausgelernt und soll hier auf anhieb anlagen proggn *gg
ja des prob war dass ich die b#16 befehle garnicht gekannt hab. hab auch niemand in der dirma der sich auskennt oder irgendjemand anders den ich fragen konnt. hihi
umso besser dass es so ein tolles forum gibt. danke euch allen!
was würd ich nur ohne euch machn...

hab heut mal versucht des so zu schicken unso. hat sehr gut geklappt alles.
hatte leider dann wenig zeit dafür aber morgen setz ich mich wieder ran ;)

soo viel steuercodes usw hab ich nich. ich will es ziemlich einfach halten alles. *g brauch ja jetz schon lang genug...
naja hängt ja au nich alles an mir.
ich sag ma des programm wird eh nur solala. anfänger ebn.
hätte echt mal recht lust so richtig programmiern zu lernen. nich nur solala.
so isch des ebn unter zeitdruck *g

mfg

bennzi
 
soooo. nachdem alles super funktioniert hat und ich ein wenig rumgespielt hab, wollte ich ma fragen wie man des macht dass man einen kompletten bereich in den anderen bereich eines anderen Datenbausteines transferiert...
müsste doch möglich sein oder? jedes byte von hand L, T is ja heftich.


mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Bennzi,

wie Raika schreibt BLK_Move,

Du solltest die im FAQ mal die Pointer ansehen.

Code:
      CALL  "BLKMOV"
       SRCBLK :=P#DB91.DBX408.0 BYTE 10
       RET_VAL:=MW204
       DSTBLK :=P#DB90.DBX408.0 BYTE 10
Im Beispiel werden aus DB91 ab Byte 408 10 Byte nach DB90 byte 408 geschrieben.
 
Zurück
Oben