Rezeptur Datensatz von SPS anwählen

HAutomation

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen



Ich habe eine Maschine bei der verschiedene Bauteil-Typen über eine Rezeptur angewählt werden. Der Bediener wählt den Typ aus und sendet ihn zur SPS.
Jetzt bekommt die Maschine einen Barcode Scanner der den Bauteil-Typ einliest und die SPS soll dann automatisch den entsprechenden Datensatz in der Rezeptur anwählen.
Vom Scanner bekomme ich z.B. den Zeichen String A1664100501 und meine Rezeptur beinhaltet einen Datensatz A1664100501, wie kann ich diesen Datensatz jetzt anwählen und den Inhalt seiner Variablen zur SPS schicken?

Ich arbeite mit WinCC Flexible 2008 SP2


Danke
 
Das kann man machen. Dazu solltest du WinCCFlex öffnen und in der Hilfe unter Steuerungsauftrag "Datensatz" nachlesen. Ein Beispiel mit Bildern füge ich einmal an, das setzt allerdings SCl voraus, um es dann zu verwenden. Wichtig ist, das man die Daten des Steuerungsauftrages in der SPS in die dafür vorgesehenen Datenwörter einträgt, dann eine Zeit X warten muss, damit die Daten auch sicher zum HMI übertragen wurden und erst danach den Auftrag über über eine weiter Variable (bei mit "Toggelvar") starten. Macht man das Alls in einem Rutsch, kann es leicht passieren, dass Daten des zuvor angeforderten Datensatzes übertragen werden. Leider ein Manko bei dieser Art der Rezeptanforderung. Fordert man Rezepte über den entsprechenden Steuerungsauftrag an, passiert das nicht, man muss aber mit der Rezeptnummer arbeiten!
 

Anhänge

  • Bild_Rezept_1.jpg
    Bild_Rezept_1.jpg
    311,5 KB · Aufrufe: 349
  • Bild_Rezept_2.jpg
    Bild_Rezept_2.jpg
    140,2 KB · Aufrufe: 251
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
eine andere Variante als der von Ralle beschriebene Weg wäre, es mit einem eigenen Script in der Visu (Script-Fahigkeit derselben vorausgesetzt) machen. Hier würde ich dann aber auch mit einer eigenen Datei arbeiten. In der prinzipiellen Vorgehensweise bleibt es aber auch dort so, wie schon von Ralle genannt ...

Gruß
Larry
 
Irgendwie gelingt das Hochladen heute nicht ganz, hier noch ein paar Dateien.

PS: Status 12 (Fehler) habe ich nicht direkt ausgewertet. Der Timeout tut das auch und das Panel selbst gibt eine Systemmeldung aus, falls ein Datensatzname verwendet wird, der im Rezept nicht existiert.
 

Anhänge

  • DB400.AWL.txt
    4,8 KB · Aufrufe: 153
  • FB_Rezept_Var.SCL.txt
    3 KB · Aufrufe: 183
  • Bild_Rezept_5.jpg
    Bild_Rezept_5.jpg
    65,1 KB · Aufrufe: 225
  • Bild_Rezept_4.jpg
    Bild_Rezept_4.jpg
    92,3 KB · Aufrufe: 183
  • Bild_Rezept_3.jpg
    Bild_Rezept_3.jpg
    71,6 KB · Aufrufe: 179
Zuletzt bearbeitet:
Ich glaube hier fehlt mir etwas Grundwissen.
Bei meiner Maschine liegen die Variablen der Rezeptur im DB67, wenn ich mir den Bereichszeiger Datensatz anschaue dann steht da unter Adresse DB 20 DBW 12 drin.
In dem Programmbeispiel von Ralle ist die Adresse des Datensatzname DB400.DBB4 und der Bereichszeiger Datensatz hat die Adresse DB400.DBW0.
Ist das Zufall oder muss der Datensatzname der Rezeptur im Adressbereich des Bereichszeiger Datensatz liegen?


Danke,
Juergen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube hier fehlt mir etwas Grundwissen.
Bei meiner Maschine liegen die Variablen der Rezeptur im DB67, wenn ich mir den Bereichszeiger Datensatz anschaue dann steht da unter Adresse DB 20 DBW 12 drin.
In dem Programmbeispiel von Ralle ist die Adresse des Datensatzname DB400.DBB4 und der Bereichszeiger Datensatz hat die Adresse DB400.DBW0.
Ist das Zufall oder muss der Datensatzname der Rezeptur im Adressbereich des Bereichszeiger Datensatz liegen?


Danke,
Juergen

Kann sein, dass sich das bei mir überschneidet, weil ich mehrerer Versuche unternommen habe, um den richtigen gangbaren Weg zu finden. Ich habe zwar den Bereichszeiger Datensatz angelegt, aber ich nutze diesen gar nicht direkt von der SPS aus, sondern ich nutzte eine Funktion des Panels, welche ich mit der Wertänderung der Variable Toggelvar verknüpft habe. (siehe eines der geposteten Bilder)

Hier mal der Auszug dazu aus der WinCC-Flex-Hilfe.
Ansonsten war es nicht möglich, den Namen des gewünschten Datensatzes zu nutzen. Den Bereichzeiger kann man wohl dann eher ganz weglassen, schätze ich, kann das jetzt aber nicht mehr genau sagen. Er überschneidet sich ja in meinem Fall auch um 1 Byte mit dem Datensatznamen, was nicht so gut wäre. Funktionieren tut es so auf jeden Fall klaglos, ich werde den Bereichszeiger mal löschen, wenn ich wieder an der Anlage bin und das testen. Auf jeden Fall solltest du mal testweise den DB400 so nutzen, wie ich das zeige, ohne den Bereichszeiger "Datensatz".

SchreibeDatensatzInSteuerung
Start
Zurück
Weiter



Geräteabhängigkeit von Systemfunktionen
Verwendung
Syntax
Parameter
Projektierbare Objekte

Verwendung

Überträgt den angegebenen Rezepturdatensatz direkt vom Datenträger des Bediengeräts an die Steuerung, die mit dem Bediengerät verbunden ist.


Hinweis
Die Werte des Rezepturdatensatzes müssen dabei nicht am Bediengerät angezeigt werden.


Syntax

SchreibeDatensatzInSteuerung (Rezepturnummer/-name, Datensatznummer/-name, Statusmeldung ausgeben, Bearbeitungsstatus)

Im Skript verwendbar: ja (SetDataRecordToPLC)

Parameter

Rezepturnummer/-name

Nummer oder Name der Rezeptur, aus der ein Rezepturdatensatz an die Steuerung übertragen wird.

Datensatznummer/-name

Nummer oder Name des Rezepturdatensatzes, der an die Steuerung übertragen wird.

Statusmeldung ausgeben

Legt fest, ob nach der Übertragung eine Statusmeldung ausgegeben wird:

0 (hmiOff) = Aus: Statusmeldung wird nicht ausgegeben.

1 (hmiOn) = Ein: Statusmeldung wird ausgegeben.

Bearbeitungsstatus

Gibt den Bearbeitungsstatus der Systemfunktion zurück. Verwenden Sie den Rückgabewert, um z.B. andere Systemfunktionen erst dann auszuführen, wenn diese Systemfunktion erfolgreich beendet wurde:

2 = Systemfunktion wird gerade ausgeführt.

4 = Systemfunktion wurde erfolgreich beendet.

12 = Systemfunktion wurde nicht ausgeführt, weil ein Fehler aufgetreten ist.
 
Ok, ich hänge mal ein Miniprojekt, mit dem Baustein und dem DB an. Der Baustein ist übersetzt, du brauchst also kein SCL. Wichtig ist, dass dein HMI auch die Funktion "Datensatz anwählen" hat, wie im hochgeladenen Bild zu sehen, sonst wird das nicht funktionieren. Außerdem muss der DB 400 natürlich so angepasst werden, dass er die gewünschten Rezepturvariablen enthält und im HMI muss ein entsprechend zugehöriges Rezept mit den Datensätzen und den Variablen angelegt werden.
 

Anhänge

  • Rezept_Datensatzname.zip
    35,5 KB · Aufrufe: 155
Zuletzt bearbeitet:
Teilerfolg

Ich habe mir jetzt den DB400 von Ralle in mein Projekt kopiert und meine Rezeptur entsprechend umgestrickt. Da ich an die Maschine, fuer die das Ganze letztendlich ist, nicht rankonnte habe ich alles nochmals umkopiert um es an einer Maschine auszuprobieren die gerade nicht in Betrieb war. Ich habe dann schnell zwei Datensaetze angelegt, der erste heißt 123 und schreibt 1 in die Variable, der zweite heißt 456 und schreibt 2 in die Variable.

Wenn ich jetzt die Variable „Datensatzname“ mit einem gültigen Datensatznamen überschreibe ändert sich der Wert der Variablen im Element entsprechend, also genau was ich brauche.

Datensatzname 123 = Wert 1
Datensatzname 456 = Wert 2

Leider funktioniert es nur in der ersten Maschine (Testmaschine), nicht an der Maschine wo ich es brauche.

Die Testmaschine hat einen Panel PC677, die andere Maschine ein MP370, sonst finde ich keinen Unterschied was die Rezeptur betrifft.

Mit Panel PC funktioniert es, mit MP370 nicht.

Gruß vom müden Juergen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab das auf einem MP277 laufen, es sollte also auch auf deinem MP gehen. Was man aber auf den Bildern nicht sehen kann, die Variablen: Datensatzname, Datensatznummer, Rezeptnummer und Toggelvar habe ich in den Eigenschaften auf "Zyklisch fortlaufend" eingestellt, sonst funktioniert das Ganze nicht. Vielleicht reagiert ein Panel-PC da anders, stell das mal bitte noch ein. Aber Achtung, du siehst die Erfassungsart nicht in der Tabelle rechts neben der Variablen, sondern im Eigenschaftsfenster der Variablen!
 
Zuletzt bearbeitet:
Ich habe dir noch einmal das Projekt hochgeladen und die Wartezeit nach außen an den FB als Input geführt. Damit kann man auch etwas experimentieren und da du kein SCL hast ist das als Input ganz sinnvoll.
 

Anhänge

  • Rezept_Datensatzname.zip
    35,5 KB · Aufrufe: 33
Der Datentransfer startet jetzt, ich bekomme dann aber Fehler 290022 am MP angezeigt.
Rückmeldung, dass die Übertragung von Datensätzen vom Bediengerät zur Steuerung mit Fehler abgebrochen wurde.
Überprüfen Sie in der Projektierung, ob
· die Adressen der Variablen in der Steuerung eingerichtet sind
· die Rezepturnummer existiert
· die Datensatznummer existiert
· der Funktionsparameter "Überschreiben" eingestellt ist.

Wo versteckt sich der Funktionsparameter Überschreiben?

Ich habe den String "DB_Rezept".Auftrag.Datensatzname (DB400.DBX4.0) als die Variable Datensatzname in der Rezeptur selbst verwendet und auch in der Toggelvariablen. Ist das so richtig.
 

Anhänge

  • Bild_Rezeptur.JPG
    Bild_Rezeptur.JPG
    104,7 KB · Aufrufe: 79
  • Bild_Toggelvar.jpg
    Bild_Toggelvar.jpg
    94,5 KB · Aufrufe: 51
Zuviel Werbung?
-> Hier kostenlos registrieren
In deinem Bild 1, bei Rezepturname habe ich nichts eingetragen, ich gebe ja die Rezepturnummer vor (Bild 2).
Diese lege ich an meine Fb und übertrage ihn über die Struktur in den DB und dann in das Panel.
Ich denke, entweder hatte ich damals Probleme mit dem Rezeptnamen oder ich habe das nicht benötigt und daher eine feste Rezeptnummer vorgegeben, ich hatte nur ein Rezept je Station, mit unterschiedlichen Datensätzen.

"Überschreiben" kann ich auch nirgendwo finden.
 
Zuletzt bearbeitet:
Jetzt geht's

Hallo Ralle

Jetzt funktioniert das endlich. Das Problem war dass ich den gleichen Datenbereich für den Datensatznamen in der Rezeptur und in der Toggelvariablen verwendet habe.
Ich habe jetzt einen neuen Datenbaustein angelegt, einen String von 16 Byte deklariert und verwende den als Datensatzname in der Rezeptur. Ich musste die Verzoegerungszeit auf 1 Sekunde setzen damit es zuverlässig funktioniert.

Was mich wirklich verwirrt ist dass sich der Panel PC an der anderen Maschine so komplett anders verhält. Der reagiert auf „SchreibeDatensatzInSteuerung“ überhaupt nicht aber wenn ich einen gültigen Namen auf die Rezepturvariable „DatensatzName“ lade schreibt er die dazugehörigen Inhalte der Elemente in die Steuerung.

Nochmals vielen Dank für die Hilfe.
Gruss,
Juergen
 
Zurück
Oben