# Barcodescanner an SPS



## dj.ar (12 Oktober 2009)

Hi Freunde.
Bin noch ziemlich neu im Forum un auch neu in Sachen SPS.

Ich wollte mit Hilfe eines Barcodescanners (HandHeld Adaptus 3800g) und einer SPS den Strichcode von Produkten auslesen.
Leider habe ich nicht wirklich einen Plan wie ich das realisieren soll.
Gibt es da irgendwelche S7-Programme für?
Hat jemand Erfahrung damit, wie die ganze Marterie arbeitet? 

Habe mich jetzt mal schlau gemacht, wie der Barcode aufgebaut ist und wie er funktioniert, habe aber nicht die Ahnung und das Know-How wie ich das mit der SPS in die Praxis umwandle.

Bin für jegliche Art von Hilfe dankbar.
dj.ar


----------



## Iserlohner (12 Oktober 2009)

schließt du den per usb an ein panel oder haste ne rs232 Karte dafür?


----------



## dj.ar (12 Oktober 2009)

wird per rs232 angeschlossen.


----------



## Blockmove (12 Oktober 2009)

Hab meine Glaskugel grad nicht hier 

Welcher Scannerhersteller?
Welches Modell?
Welche Schnittstelle?
Welches Protokoll?
Welcher Barcode?

Fertig gibts erstmal nix, da es schlichtweg zu viele Kombinationsmöglichkeiten gibt.

Gruß
  Dieter


----------



## vierlagig (12 Oktober 2009)

@blackmove: da brauchste keine glaskugel


der barcode kommt als STRING rein ... string-operationen bitte im systemhandbuch nachlesen ...


----------



## dj.ar (12 Oktober 2009)

der typ steht ja schon ganz oben im post: HandHeld Adaptus 3800g
der scanner hat eine rs232-buchse.
muss den scanner wohl über einen bus an die sps ankoppeln. profibus? profinet?
habe aber keine ahnung wie ich das mit dem programmieren machen soll.
das protokoll wird ja nen serielles sein, wegen der schnittstelle.


----------



## vierlagig (12 Oktober 2009)

CP340 ... the only thing you need


----------



## Rainer Hönle (12 Oktober 2009)

Bei seriell eher CP340/341 anstatt Profinet oder Profibus verwenden.


----------



## dj.ar (12 Oktober 2009)

ok die cp340 sieht vernünftig aus.
ein mitarbeiter meinte eben, dass es 2-3 möglichkeiten gibt, dass ganze zum laufen zu kriegen. 
mir fällt aber nur das ein.
als cpu werde ich eine SIMATIC S7-300 CPU315-2 DP nehmen. ist die einzige die ich hier noch auf lager habe.


----------



## Blockmove (12 Oktober 2009)

vierlagig schrieb:


> der barcode kommt als STRING rein ... string-operationen bitte im systemhandbuch nachlesen ...


 
Tja wenn's nur immer so wäre ...
Selbst bei vergleichsweise einfachen Handheld-Scanner gibt es zig verschiedene Protokolle.

Gruß
Dieter


----------



## dj.ar (12 Oktober 2009)

Also ich habe den Aufbau jetzt wie folgt aufgebaut:

Scanner -> CP340 -> ProfiBus -> CPU315-2 DP -> Ausgabepanel

Hat jemand ne Idee zum Programm?


----------



## erzteufele (12 Oktober 2009)

läuft der rückwandbus nicht immer über mpi ? CP340 zur CPU ?

bitte nicht verwirren lassen 


also irgendwo in der bibi gibt es einen baustein mit dem du ankommende strings auslesen kannst! den brauchst du dann musst du die strings nurnoch so durchsuchen und das herrausfiltern was du brauchst und verarbeiten  klingt einfach oder ?


----------



## marlob (12 Oktober 2009)

Das ist der FB2 "P-RECV". aus der Bibliothek  CP PtP - CP 340.
Du brauchst ausserdem die Parametrierungssoftware CP 340: Punkt-zu-Punkt-Kopplung parametrieren
Die sollte aber meines Wissen nach auf der beiliegenden CD zum CP dabei sein


----------



## maweri (12 Oktober 2009)

Du brauchst den P_RCV. Der wird auf CD mit dem CP340 mitgeliefert.
Die Beschaltung in FUP findest im Anhang. Über die Onlinehilfe erfährst Du Näheres zum FB.

Gruß
maweri

marlob war mal wieder schneller.


----------



## dj.ar (12 Oktober 2009)

vielen dank jungs, große hilfe.
hoffe ich komme jetzt erstmal zurecht. wenn ich noch was habe, weiss ich ja wo ich hin muss!


----------



## dj.ar (15 Oktober 2009)

okey jungs, ich brauche nochmal eure hilfe.
das konzept ist nochmal geändert worden und sieht wie folgt aus:

CPU315-2 DP -> Profibus -> ET200S (1SI-Modul (3964/ASCII))

Deshalb brauche ich wohl andere FBs weil ich den P_REC nicht in der Bibliothek hab. Kann mir jemand weiterhelfen?


----------



## o_prang (15 Oktober 2009)

Hi,

Du benötigst den FB2 "S_RCV".
Der liest Dir die Daten ein und legt diese in einem DB ab.
Weiß aber nicht genau von welcher Bibliothek.
Aber mit dem habe ich mal Daten seriell von einem Scanner eingelesen.


----------



## dj.ar (21 Oktober 2009)

leider finde ich den fb nicht, kann ich den direkt bei siemens downloaden?


----------



## o_prang (23 Oktober 2009)

Hi,

ich hab Dir mal nen Auszug aus meinem Programm hochgeladen. Da ist der FB mit der Ansteuerung drin.


----------



## dj.ar (26 Oktober 2009)

hi guys.
gibt es irgendwo einen crashkurs für step 7?
ich habe keinen blassen schimmer, wie ich anfangen soll. 
hab noch nie damit gearbeitet. brauche ein paar ideen. habs nur in der schule mal mit xsoft gearbeitet. aber das waren nur einfache AND/OR schaltungen.


----------



## Ralle (26 Oktober 2009)

dj.ar schrieb:


> hi guys.
> gibt es irgendwo einen crashkurs für step 7?
> ich habe keinen blassen schimmer, wie ich anfangen soll.
> hab noch nie damit gearbeitet. brauche ein paar ideen. habs nur in der schule mal mit xsoft gearbeitet. aber das waren nur einfache AND/OR schaltungen.



Dann würde ich vielleicht mal damit anfangen: http://www.automation.siemens.com/fea/html_00/down_module.htm


----------



## dj.ar (30 Oktober 2009)

ich bins nochmal.
also das programm steht jetzt. die sps läuft.
nur kommt leider kein signal vom barcode in die sps.
habe mit den FB2 parametriert.
zu testzwecken habe ich den scanner mal direkt per rs232 an den rechner gehängt und mit der dabeiliegenden software zum laufen bekommen. prich, wenn ich was gescannt habe, kam der code auf den bildschirm. mit der sps will das aber noch nicht.
weiß jemand rat? ich kann auch pics vom programm posten, vielleicht findet jemand einen fehler.


----------



## Lupo (30 Oktober 2009)

Sendet der Scanner denn aktiv oder muß man die Daten dort vielleicht abholen ?


----------



## Ralle (30 Oktober 2009)

Wie hast du den Cp340 parametriert?
Kommt NDR?
Achtung, soweit ich mich erinnere ist Len nur solange <>0, wie NDR True ist, also u.U. nur einen Zyklus. Man muß sich das fangen, wenn man er irgendwie sehen oder auswerten will. 

etwa so:


```
UN M1340.1
SPB M0

L #Empf_L_WS
T MW 100

M0: NOP 0
```

In MW 100 stände dann die empfangenen Länge.

Außerdem ist der Status durchaus auch interessant, der gibt ja entsprechende Hinweise über seine Nummern.


----------



## dj.ar (30 Oktober 2009)

ich habe gar nicht die CP340 benutzt, wie in einem post davor schon genannt.
hab es über das 1SI Modul gemacht.


----------



## o_prang (30 Oktober 2009)

Lupo schrieb:


> Sendet der Scanner denn aktiv oder muß man die Daten dort vielleicht abholen ?



Der Scanner wird sicherlich aktiv senden. 

Mach mal an Deinem PC das Hypterterminal auf. Teste mal ob dort die Daten ankommen.

Ansonsten kontrollier mal bitte die Verdrahtung auf dem Modul. Kann sein dass Du RTS und CTS brücken musst.


----------



## MiLa (30 Oktober 2009)

Hallo,

bin schon ne weile nicht mehr hier gewesen und meine letzte S7 ist leider auch schon lang her, deshalb haut mich bitte nicht 

Auf dem Bild vom S_RCV Baustein ist mir ne kleine Unstimmigkeit aufgefallen.
Im Netzwerkkommentar schreibst du Adresse 276 und im LADDR 256?!

LADDR sollte eigentlich so weit ich noch weiß eigentlich die Anfangsadresse von deim Modul haben

Gruß MiLa


----------



## o_prang (30 Oktober 2009)

MiLa schrieb:


> Hallo,
> 
> bin schon ne weile nicht mehr hier gewesen und meine letzte S7 ist leider auch schon lang her, deshalb haut mich bitte nicht



Keine Panik!
Haue gibt es nur für Leute, die nix sagen.
Jeder Kommentar oder Idee kann hilfreich sein.
und Du hast Recht. Könnte ein Fehler sein.


----------



## dj.ar (30 Oktober 2009)

das hab ich schon behoben. thx so far.
bin immer noch nicht weitergekommen... aber geiles brainstorming hier!


----------



## dj.ar (3 November 2009)

so, der scanner sendet. sagen mir die LEDs. hatte einen verdrahtungsfehler.
nur habe ich schwer die vermutung, das der FB2 alleine nicht reicht. da muss doch auch noch der FB3 eingebaut werden oder? bin leider etwas ratlos. hat jemand ein bespielprogramm zur hand, wo ich daten von dem 1SI senden und empfangen kann?!


----------



## o_prang (3 November 2009)

Hi dj.ar,

kansnt Du mal Dein Programm (oder eine abgespeckte Version davon) einstellen?
Dann kann ich mal kontrollieren, ob ich was finde.


----------



## dj.ar (3 November 2009)

hi.
ich habe mir dieses programm runtergeladen http://support.automation.siemens.com/WW/llisapi.dll?func=ll&objId=26263724&nodeid4=20229805&nodeid0=27103175&load=content&start=31&csSort=-DOCDATUMBEITRAG&subtype=136000&lang=de&siteid=cseus&aktprim=4&objaction=csview&extranet=standard&viewreg=WW&display=p und wollte es modifizieren. leider wird dort mit einer cp geaberbeitet, was nicht auf mich passen würde.


----------



## o_prang (3 November 2009)

Hi dj.ar,

hast Du Dir nicht mal das Programm geladen, dass ich im Beitrag #19 bereitgestellt habe?

Das was Du geladen hast, ist ja nur für ne CP. Und die hast ja nicht. Dann kannste auch mit dem Programm nichts anfangen.


----------



## dj.ar (4 November 2009)

jap, den habe ich mir geladen.
hab den auch eingebunden, weil ich das programm heute nochmal geändert habe.

es kommt mittlerweile auch etwas an, zwar nur eine fehlermeldung aber es ist schonmal was.
vielleicht kann sich das mal jemand angucken. gibt es irgendwo eine fehlermeldung übersicht? in der doku zum 1si ist nichts dabei. würde gerne wissen, was hinter der zahlencombo steht!


----------



## o_prang (4 November 2009)

Hi,

aus einzelnen Bruchstücken ist es halt schwer eine Diagnose zu machen.
Könnte aber sein, dass er die Daten nicht lesen kann, weil z.B. Paritiy o.ä. nicht stimmt.

Habe Dir mal nen Screenshot von meinen Einstellungen hochgeladen.


----------



## dj.ar (16 November 2009)

hier habe ich euch mal den aktuellen software-stand hochgeladen.
also. wenn ich scanne, läuften die TX/RX LEDs am Modul auf. das passt soweit, verdrahtung passt auch alles. 
nur wird im DB20 ein Error ausgegeben: W#16#080C sobald ich scanne.
hat jemand einen rat?


----------



## dj.ar (17 November 2009)

vorschritt: der fehler W#16#080C ist ausgemerzt, in dem in die Parität ausgestellt habe.
nachteil: eine neuer fehler ist aufgetaucht: W#16#0802

aus einem russischen fehlerskript, konnte ich folgende übersetzung herleiten:

_Fehler beim Verbindungsaufbau:
- Es sind ein oder mehrere Zeichen (mit ausnahme von NCC und STX) während der Pause empfangen worden.
- Nach dem Erhalt des STX-Zeichens hat die Gegenstelle mehrere Zeichen gesendet ohne die DLE Antwort bekommen zu haben.

Nach dem Einschalten der Gegenstelle:
- Die CPU hat ein undefiniertes Zeichen erhalten. während die Gegenstelle eingeschaltet ist._

anybody?


----------



## argv_user (17 November 2009)

dj.ar schrieb:


> vorschritt: der fehler W#16#080C ist ausgemerzt, in dem in die Parität ausgestellt habe.
> nachteil: eine neuer fehler ist aufgetaucht: W#16#0802
> 
> aus einem russischen fehlerskript, konnte ich folgende übersetzung herleiten:
> ...



Ja, I myself!

Bist Du zu 100% sicher, dass die eingestellte Baudrate, Zeichenlänge, Stoppbits und Parität wirklich stimmen? Prüf das nochmal nach. Wenn das alles korrekt ist, käme bei mir Plan B:

Ich würde das erste Telegramm, das nach dem Einschalten der SPS/oder der Gegenstelle reinkommt, wegwerfen. Und auf das nächste warten. Also im Zweifel mindestens zwei Versuche machen.


----------



## o_prang (17 November 2009)

Hi dj.ar,

Dein Hochladen des Projektes hilft bei der Fehlersuche.

Du hast in der Hardwarconfd das falsche Modul ausgewählt.
Du hast das 3964 Protokoll ausgewählt. 
Musst aber das ASCII Prtokoll nehmen.
Dann sollte es auch gehen.


----------



## dj.ar (18 November 2009)

klasse! vielen lieben dank o_prang! genau das wars.
ich bekomme jetzt den barcode als wert (byte) in meinen DB.
super arbeit guys.

mein nächster gedanke ist es nun, den code per wincc flexible anzeigen zulassen. 
dass sollte ja nicht schwer sein.
was genau muss ich beachten? muss ich erst eine zeichenkette erstellen oder wie genau würdet ihr es machen?
thx so far


----------



## maweri (18 November 2009)

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


----------



## dj.ar (18 November 2009)

maweri schrieb:


> 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:
> ...



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!


----------



## marlob (18 November 2009)

dj.ar schrieb:


> 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


----------



## maweri (18 November 2009)

Also ich nehme immer einen DB, in dem ich alle Anzeigen und Buttons vom Panel verarbeite.
Dort lege ich eine Variable "Barcode" an:

```
Barcode STRING[13] ''
```
 
Diese Variable hat eine Länge von 15 Bytes.

```
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.


----------



## dj.ar (18 November 2009)

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?

```
L  DB20.DBB6
T  DB10.DBB3
```

und das ganze dann für alle 13 zeichen!


----------



## marlob (18 November 2009)

Wie maweri schon sagte, kannst du den SFC20 dafür benutzen


----------



## maweri (18 November 2009)

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:


```
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.


----------



## dj.ar (23 November 2009)

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!)


----------



## maweri (23 November 2009)

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?


----------



## maweri (23 November 2009)

Hier stand dasselbe wie im Post 49. Mein Server hat's leider 2x geschickt


----------



## dj.ar (23 November 2009)

der barcode hat 20 zeichen.


----------



## maweri (23 November 2009)

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)


----------



## dj.ar (23 November 2009)

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.


----------



## maweri (23 November 2009)

Hast Du die Darstellungsart auch auf "Zeichenkette" eingestellt?


----------



## dj.ar (23 November 2009)

jap, was anderes nimmt wincc eh nicht an, bei dem db!


----------



## maweri (23 November 2009)

Da fällt mir momentan auch nix mehr ein


----------



## dj.ar (2 Dezember 2009)

//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!


----------

