Sonstiges Barcodescanner mit Simatic PCS 7 programmieren

Pacai

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

zurzeit arbeite ich an einem Projekt für das ich einen Baustein mit Simatic PCS7 erstellen soll (in SCL).
Der Baustein soll zur "Auswertung" von Barcodes dienen. Er soll Freigabesignale und Fehlermeldungen beinhalten. Als kurze Erklärung: Mit dem Barcodescanner sollen Säcke die manuell dem Prozess hinzugefügt werden, kontrolliert werden, ob sie sich an der richtigen Zugabestelle befinden oder gar ein falsche Produkt beinhalten.
Die Hardwareanbindung des Scanners erfolgt per RS232 an ein Deutschmann Unigate RS (Gateway) und von dort aus per Profibus an eine 400er CPU. Dies funktioniert soweit auch.
Das Signal des Barcodescanners empfange ich am EB512 - EB526, wobei das EB512 pro scan nur hochzählt und das letzte EBxxx (je nach Codelänge) mir 0x0D Hex ausgibt.
Jetzt zu meiner Frage, ich habe leider absolut keine Erfahrung mit PCS7 und SCL, wie kann ich einen Baustein erstellen der mir den Code ausliest, mit einer Selbsterstellten Datenbank an Barcodes abgleicht und je nach Vergleichsstand ein Signal ausgibt für Fehler oder Freigabe?:confused:

Viele Dank im voraus. :cool::D

Gruß

Pacai
 
Solange du nicht ein PCS7-Faceplate dazu erstellen willst oder musst, hast du da keine Besonderheiten zu beachten.
Es gibt aber ein paar Dinge die bei eiem FB/FC zu beachten sind, dass er in CFC praktisch zu verwenden ist. Das heißt z.B. möglichst keine Array-Parameter zu verwenden, weil diese nicht verschaltbar sind.

In deinem Fall geht es beispielsweise um die Barcodes die vermutlich irgendwo als Strings abgelegt werden oder gespeichert werden. Anstatt diese in einem Global-DB abzuspeichern, könntest du deinen Auswertebaustein in Form eines FBs mit einer entsprechenden Anzahl an Eingangsparametern von Strings erstellen. Das können dann auch gerne mal 50 Eingänge sein, was zwar erst etwas merkwürdig aussieht und auch im Programm unpraktisch handzuhaben ist, aber dafür kannst du später im CFC-Plan online alle Strings sehen und auch online mit Werten beschreiben, oder ggf. auch mit Variablen in einem Global-DB verknüpfen wenn nötig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort, sorry das ich jetzt erst Antworte :/
Hat soweit alles geklappt.

Hätte nur eine Frage zu dem Thema und zwar wird das Erste Byte meines eingescannten Barcodes mit einem Any-pointer erfasst und dann als String in meinem Programm weiterverarbeitet.
Nach einer Vergleichsbearbeitung und nach Ablauf einer Zeit für ein Freigabesignal werden die Vergleichswerte wieder genullt nur hab ich jetzt das Problem das der eingelesene Barcode immernoch ansteht.
Kann ich durch Löschen des Eingangsbytes oder der ganzen Adresse den Barcode sozusagen zurücksetzen damit ich erst erneut einscannen muss? und wenn ja wie?
Weil das Problem ist, wenn ich meine Verarbeitung durchlaufen habe und die Signale genullt werden, aber ein "richtiger" Barcode noch ansteht ist ja gleich ein internes Freigabesignal mit 1 belegt obwohl es sag ich mal nicht gescannt wurde.
Hoffe meine Beschreibung ist verständlich :p

Danke für Antworten :))))

Gruß
 
Du hast ja geschrieben, dass EB512 pro Scan eins hochzählt.
Dann könntest du eine Flanke erzeugen aus einem Vergleich von EB512 und einem internen
Merkbyte.
Mit der Flanke, machst du deine Aktion, schreibst den String aus den EB in einen DB und schreibst EB512 in das interne Merkbyte.
Erst wenn wieder gescannt wird, ist EB512 <> dem internen Merkbyte und du arbeitest das Programmstück wieder ab.
 
Danke für die Hilfe, hat auf diese Weise einwandfrei funktioniert ;).

Ich hätte noch eine letzte Frage zu diesem Thema. Der Baustein soll durch einen Ausgang (Bool) mitteilen können ob der Scanner "vorhanden" ist oder beispielsweise die Verbindung verloren hat.
Zur Info: der Scanner ist mit RS232 an ein Gateway angeschlossen und über dieses per Profibus direkt an der CPU.

Danke für eure Hilfe :)

Gruß

Pacai
 
Zurück
Oben