TIA Rezept aus HMI in Steuerung laden?

Geisterkarle

Level-1
Beiträge
126
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS-Experten!

Ich versuche aktuell zu lösen, ein Rezept, dass ich in einem Siemens HMI (hier: HMI-Runtime; also Software-HMI) angelegt habe, automatisch aus der SPS zu laden.
Leider scheitere ich bzw. habe ich eine Lösung, die ... hin und wieder... funktioniert. Und "hin und wieder" ist in der Automatisierungsbranche leider nicht ausreichend ;)

Meine Variante ist etwas komplex...
Über eine Bitmeldung rufe ich bei "kommend" ein Skript auf (s. Bild), dass einen LoadDataRecord ausführt. In der SPS überwache ich den Rückgabewert und die Daten, die geschrieben werden.

Mein "hin und wieder" ist nun, dass es drei verschiedene Szenarien gibt:
1. Das Rezept wird nicht gefunden/geladen (Rückgabewert 12)
2. Das Rezept wird angeblich gefunden und geladen (Rückgabewert 4), in meiner SPS sind aber keine Daten (DB bleibt leer)
3. Rezept wird gefunden und geladen und Daten sind in der SPS!

3. ist natürlich die einzig korrekte Variante.
Ich habe leider noch nicht herausgefunden, was die Gründe für eines der Ergebnisse ist...

Habe hier und allgemein herumgesucht, aber nichts hilfreiches gefunden, denn ganz oft wird da auf "Bereichszeiger" verwiesen. Was bestimmt ne tolle Lösung ist, aber falls ihr das Bild richtig angeschaut habt: Ich lade mit "Rezeptname" und nicht "Datensatznummer"! Denn die Datensatznummer ist unbekannt, da Rezepte "beliebig" angelegt werden können und ich nur den Name weiss, aber nicht die Datensatznummer. Und im Befehlsaufruf kann ich keinen String übergeben...

Hat jemand sowas schonmal gemacht und kann mir nen Tipp geben, wie ich das Lösen kann oder woran diese "unberechenbarkeit" des Ergebnisses liegt?

Würde mich freuen!
Danke!

grüßle
 

Anhänge

  • rezeptskript.PNG
    rezeptskript.PNG
    25,5 KB · Aufrufe: 102
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

schon mal versucht, den LoadDataRecord in der do...while-Schleife aufzurufen?

Warum ruft du "rezept_laden_func = Smarttags..." auf ?

Ich würde der Variable INT_Rezept_laden am Anfang den Wert 0 geben

Dann schleife solange wert < 1 loaddatarecord aufrufen und am Ende hast du 2, 4, 12 in der Variable.
 
Ist halt viel herumgespielt!
Aktuell bin ich von LoadDataRecord auf SetDataRecordToPLC umgestiegen.
Schleife lasse ich leer.
Zudem kommt es mir so vor, dass wenn ich einfach das Panel neu einspiele nach einer Änderung es erstmal gar nicht geht; ich muss erstmal bisle herumklicken, dann geht es besser...
Desweiteren habe ich mal die Erfassungszeit der Daten von der Standard 1s auf 500ms geändert und auch mal mein Signal verzögert. Auch hier scheint es sich verbessert zu haben! Davor kam irgendwas von wegen "Rezept 0 unbekannt" (ist mir aber auch erst jetzt aufgefallen, dass das Rezeptladen tatsächlich eine Systemmeldung im Panel ist und angezeigt wird!)
Bekomme inzwischen gefühlt weniger bis sehr selten Fall 1.
Fall 2 kommt aber immer noch vor. Aber wenn ich da diesen Verlinkten Thread durchlese, dann weiss ich auch warum...
Das wird mich noch beschäftigen!
 
Hi
Also bei mir läuft es gemäss angehängtem Bild.
Nicht vergessen, am Anfang immer schön alles auf Null und FALSE stellen.
Ich kopiere mir die Rezeptur in ein DB und wenn ich das gemacht habe (Info von Skript an SPS), dann kopiere ich den DB in ein anderer DB (von der SPS aus). Ich arbeite dann im Programm nur mit dem zweiten DB. Ist auch eine WinCC Adv. Runtime auf einem PC. Läuft auf Win10 und Win7 PC's.


Skript_Rezeptur.JPG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
btw.
Code:
[COLOR="#008000"]'Endif damit nur bei positiver Flanke das Skript gestartet wird
'MUSS AM SCHLUSS STEHEN!!![/COLOR]
[COLOR="#0000FF"]End If[/COLOR]
Das kann man auch ganz ohne die große If-Klammer lösen:
Code:
[COLOR="#008000"]'Skript nur bei "kommen" ausführen[/COLOR]
If TriggerVariable = 0 Then Exit Sub

Harald
 
Ok, ich habe glaube nun eine Version, die funktioniert... Falls jemand die Testhistorie interessiert, hier die Wall of Text Geschichte!

Folgende Dinge sind "passiert":
Ich habe Datensätze von zwei verschiedenen Rezepten mehr oder weniger abwechselnd geladen.
Mir ist aufgefallen, dass hin und wieder das Skript gesagt hat, dass das Rezept 0 ist, obwohl ich den Wert setze. Scheint noch nicht im Panel angekommen zu sein.
Daher fange ich erstmal mit einer Schleife im Skript an, die prüft, ob das Rezept <>0 ist.
Dann habe ich gesehen, dass manchmal "erfolgreich geladen" kam, aber dann die Daten im falschen Rezept ankamen (beide Rezepte beinhalten identische Datensatznamen).
Daraufhin habe ich angefangen am Ende des Ablaufs die Rezeptnummer abzulöschen/0 zu setzen, damit bei Neuaufruf auch wirklich die neue Nummer drin steht.
Das hat funktioniert.
Dann wollte ich mal sehen, wie es läuft, wenn ich direkt hintereinander die verschiedenen Rezepte lade (mache ich ja nicht aus Spaß; zwei Stationen können "gleichzeitig" Rezept anfordern)
Hier ist öfters erstmal meine SPS ausgestiegen, die warumauchimmer keinen Wert im Rezept eingetragen hat, das Skript hat also wieder mit 0 gearbeitet und ist hängen geblieben.
Daraufhin frage ich vor dem Start die Nummer auf <>0 ab.
Hat aber immer noch nicht funktioniert, irgendwie hat das Skript nichts mehr geladen.
Also habe ich einen Timer von 1s in der SPS eingebaut, bevor ich das nächste Rezept lade.
Geht.

Und hier bin ich jetzt erstmal und hab keine Lust mehr auf den Quatsch!

Letzteres ist noch nicht wirklich gelöst und das Skript noch sehr wild. Wenn ihr wollt, zeige ich es, aber eigentlich gehört dieses Ungetüm in die Hölle und nicht in ein Panel ;)
 
Zurück
Oben