Barcodescanner an SPS

Zuviel Werbung?
-> Hier kostenlos registrieren
Genau so.
Ich gehe mal davon aus, daß der Barcode immer gleich lang ist (z.B. 13 Zeichen).

Dann definiere ich eine Variable vom Typ String:
Barcode STRING [13]
Setze die ersten beiden Bytes (0,1) (Header) jeweils auf 13 und mittels SFC20 (BLKMOV) kopiere ich dann die ausgelesen Bytes in die Stringvariable (ab Byte 2).

Gruß
maweri
 
Genau so.
Ich gehe mal davon aus, daß der Barcode immer gleich lang ist (z.B. 13 Zeichen).

Dann definiere ich eine Variable vom Typ String:
Barcode STRING [13]
Setze die ersten beiden Bytes (0,1) (Header) jeweils auf 13 und mittels SFC20 (BLKMOV) kopiere ich dann die ausgelesen Bytes in die Stringvariable (ab Byte 2).

Gruß
maweri

sorry, aber wo definiere ich die variable? im db? und das mit dem header ist mir neu. wo finde ich den? bin leider neu in dem fach!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sorry, aber wo definiere ich die variable? im db? und das mit dem header ist mir neu. wo finde ich den? bin leider neu in dem fach!
Einen String kann man im DB, in der Symboltabelle oder auch im Kopf eines FCs anlegen.
Im Byte 0 steht immer die maximale Länge und im Byte 1 die tatsächliche Länge des Strings. Darum solltest du beide werte auch 13 setzen, falls dein String 13 Zeichen lang ist
 
Also ich nehme immer einen DB, in dem ich alle Anzeigen und Buttons vom Panel verarbeite.
Dort lege ich eine Variable "Barcode" an:
Code:
Barcode STRING[13] ''

Diese Variable hat eine Länge von 15 Bytes.
Code:
Byte 0  : maximale Länge des Strings
Byte 1  : tatsächliche Länge des Strings
Byte 2  : erstes Zeichen des Strings
....
Byte 14 : letztes Zeichen des Strings

Da normalerweise die Barcodes bei einer Anlage immer gleich lang sind, ist somit auch die maximale und tatsächliche Länge gleich. Die 13 steht hier nur als Beispiel und muß gegen die Länge Deines Barcodes ersetzt werden.
 
okey, ist angelegt.
ich will jetzt die daten einfach mit einem fb kopieren.
sprich, die daten sollen mit einer funktion kopiert werden und in meinem neuen db abgelegt werden, den ich dann wiederum in wincc aufrufe.

so ungefähr?
Code:
L  DB20.DBB6
T  DB10.DBB3

und das ganze dann für alle 13 zeichen!
 
Hallo dj.ar,

DB10.DBB3 kann niemals das 1. Zeichen des Barcodes sein!!!
Selbst wenn im DB10 das Byte 0 irgendwie belegt ist und Byte 1 nicht, macht Siemens automatisch bei Byte 2 weiter, wenn Byteübergreifender Datentyp benutzt wird. Und das ist auch gut so.

Ich gehe mal davon aus, daß der String mit Byte 0 beginnt. Dann sehe das Programm wie folgt aus:

Code:
      L     13
      T     DB10.DBB    0
      T     DB10.DBB    1
 
      CALL  "BLKMOV"
       SRCBLK :=P#DB20.DBX6.0 BYTE 13
       RET_VAL:=MW10
       DSTBLK :=P#DB10.DBX[COLOR=black]2[/COLOR].0 BYTE 13

Natürlich immer noch vorrausgesetzt, das der Barcode tatsächlich 13 Zeichen hat.
 
okey. ich habe die werte nun in einem db abgelegt.
nun habe ich ein problem mit wincc. kann ich das problem auch hier posten? der soll ich es in HMI reinstellen?
naja, kann der mod entscheiden ;)
also, ich möchte einfach nur das der inhalt vom db in einem feld angezeigt wird.
wenn ich nun ein EA-feld erstelle und als variable den db auswähle passiert leider nichts.
von den einstellungen her passt alles.
wenn ich dann die simulation starte, passiert leider nichts. (es werden nur rauten angezeigt!)
 

Anhänge

  • 1.jpg
    1.jpg
    181,3 KB · Aufrufe: 37
  • 2.jpg
    2.jpg
    382,8 KB · Aufrufe: 30
  • 3.jpg
    3.jpg
    421,2 KB · Aufrufe: 24
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Normalerweiser werden die Rauten angezeigt, wenn der anzuzeigende Wert nicht ins Feld passt. Z.B. Wert = 12345 und Anzeigelänge = 4.

Wieviele Zeichen hat der Barcode?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann könnte es noch sein, daß die Eigenschaften des EA-Felds nicht korrekt sind.

Überprüfe das mal anhand der Grafik (Mein Barcode hat hier 8 Zeichen)
 

Anhänge

  • Eig_BC.jpg
    Eig_BC.jpg
    66,9 KB · Aufrufe: 40
daran scheint es nicht zu liegen. habe se auf 20 gestellt.
mhh. leider nicht bin ich mit meinem latein am ende. wüsste nicht was ich noch einstelle könnte.
müsste doch eigentlich relativ simpel sein, einen string im ea-feld anzeigen zu lassen.
 
//fertig!

ich habe es geschafft!
vielleicht nen paar tipps, für die nach mir kommenden mit ähnlciehn problemen.
byte_to_string ist die lösung.
ich habe die ankommenden bytes aus dem db in eine zeichenkette "string" transformiert.
den string habe ich dann wieder in einen db gepackt und den in wincc aufgerufen.
klingt komplizierter als es ist!
danke nochmal an alle!
 
Zurück
Oben