TIA Rezeptverwaltung / Schreibe Datensatz in Steuerung

settelma

Level-2
Beiträge
363
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein Problem beim dem ich leider nicht weiter komme. Liegt vielleicht auch daran, dass ich nicht täglich programmiere sondern nur sporadisch.
Vielleicht kann mir ja jemand helfen.

Ich verwende für eine Ausschankmaschine ein TP700 Comfort und eine CPU1215C.

Ich habe mir eine Rezeptverwaltung projektiert in der verschiedenen Rezepte hinterlegt sind.

Ich will mit einem Tastendruck auf einen Button im Panel quasi 3 Funktionen ausführen.
1. will ich die Datensatznummer eines Mischgetränks in der Rezepturverwaltung auswählen ( es sind mehrere Mischgetränke hinterlegt, und mit der Nummer will ich ein bestimmtes mit deren Rezeptur auswählen )
2. will ich dann den Datensatz der Rezeptur von diesem Mischgetränk in die Steuerung schreiben.
3. sollen dann die Ausgänge der Zutaten, die im Rezept hinterlegt sind, angesteuert werden.

Ich will für diese Funktionen am besten nur einmal auf einen Button drücken.

Das ganze funktioniert fast :rolleyes:.
Derzeit setzte ich mir mit dem Button im Terminal eine Variable, die die Datensatznummer auswählt. Gleichzeitig habe ich in dem Button bei "Button loslassen" die Funktion" Schreibe Datensatz in Steuerung" projektiert. Ich frage dann den Status ab, wenn der Datensatz in die Steuerung geladen wurde und steuere dann damit die Ausgänge an.
Das ganze mache ich für mehrere Mischgetränke. Jedes Mischgetränk hat also einen eigenen Startbutton mit dem das Mischgetränk ausgewählt, das Rezept in die Steuerung geladen, und die Ausgänge angesteuert wird.

Ich vermute nun, dass ich ein zeitliches Problem habe zwischen "Datensatznummer auswählen" und "Datensatz in Steuerung schreiben". Beim Test war es so, dass manchmal das Rezept vom falschen Mischgetränk ausgeben wird. Vermutlich weil der Datensatz in die Steuerung geschrieben wird, aber die Auswahl der Datensatznummer noch nicht abgeschlossen ist.

Hat jemand hierzu eine Idee.

Ich hoffe ich habe es verständlich erklärt.

Danke!

Gruß Markus
 
Hallo zusammen,
ich habe ein Problem beim dem ich leider nicht weiter komme. Liegt vielleicht auch daran, dass ich nicht täglich programmiere sondern nur sporadisch.
Vielleicht kann mir ja jemand helfen.

Ich verwende für eine Ausschankmaschine ein TP700 Comfort und eine CPU1215C.

Ich habe mir eine Rezeptverwaltung projektiert in der verschiedenen Rezepte hinterlegt sind.

Ich will mit einem Tastendruck auf einen Button im Panel quasi 3 Funktionen ausführen.
1. will ich die Datensatznummer eines Mischgetränks in der Rezepturverwaltung auswählen ( es sind mehrere Mischgetränke hinterlegt, und mit der Nummer will ich ein bestimmtes mit deren Rezeptur auswählen )
2. will ich dann den Datensatz der Rezeptur von diesem Mischgetränk in die Steuerung schreiben.
3. sollen dann die Ausgänge der Zutaten, die im Rezept hinterlegt sind, angesteuert werden.

Ich will für diese Funktionen am besten nur einmal auf einen Button drücken.

Das ganze funktioniert fast :rolleyes:.
Derzeit setzte ich mir mit dem Button im Terminal eine Variable, die die Datensatznummer auswählt. Gleichzeitig habe ich in dem Button bei "Button loslassen" die Funktion" Schreibe Datensatz in Steuerung" projektiert. Ich frage dann den Status ab, wenn der Datensatz in die Steuerung geladen wurde und steuere dann damit die Ausgänge an.
Das ganze mache ich für mehrere Mischgetränke. Jedes Mischgetränk hat also einen eigenen Startbutton mit dem das Mischgetränk ausgewählt, das Rezept in die Steuerung geladen, und die Ausgänge angesteuert wird.

Ich vermute nun, dass ich ein zeitliches Problem habe zwischen "Datensatznummer auswählen" und "Datensatz in Steuerung schreiben". Beim Test war es so, dass manchmal das Rezept vom falschen Mischgetränk ausgeben wird. Vermutlich weil der Datensatz in die Steuerung geschrieben wird, aber die Auswahl der Datensatznummer noch nicht abgeschlossen ist.

Hat jemand hierzu eine Idee.

Ich hoffe ich habe es verständlich erklärt.

Danke!

Gruß Markus

Ich würde mit einem Bit das ich in der SPS auswerte die Aufträge über den Bereichszeiger aus der SPS in 2-3 Schritten ausführen und das Bit am Ende der Schrittkette zurück setzen.


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ehrlich gesagt bin ich mit Bereichszeiger nicht sehr bewandert.

Was mir aber noch eingefallen ist. Gibt es die Möglichkeit die Funktion "schreibe datenschsatz in Steuerung" von der Steuerung anzustoßen, also in einem FB zum Beispiel. Ich programmiere in FUP. Aktuell wird das bei mir über den Button im Panel gemacht bei "Ereignisse". Hier kann das ausgewählt werden z.B. beim Tastendruck. Das würde sehr helfen.
 
Zuletzt bearbeitet:
Hallo Markus,
getOptimum hat dir bereits die Lösung für deine Frage aufgezeigt. Über die Bereichszeiger oder Steuerugsaufräge kannst die selben Rezepturfunktionen ausführen wie mit den Buttons am Panel. Datensatz auswählen, Datensatz an Steuerung und auch Datensatz nach Rezeptur schreiben. Über den Bereichszeiger bekommst du es dann auch mit wenn ein Steuerungsauftrag abgeschlossen ist.
Alternativ könntest du auch Bits im HMI hinterlegen die ständig abgefragt werden und bei einer Bit-Änderung die entsprechende Funktion auslösen.
Viele Wege führen nach Rom......
 
Hallo zusammen,

warum so kompliziert? ;)

Einfach ein Script projektieren, in dem die gewünschte Befehlsabfolge inkl. Auswertung von Systemfunktions-Rückgabewerten programmiert ist und dieses Script dann bei Tastendruck aufrufen.


Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
sicher ein Script geht immer. Da Markus ja aber erwähnte, dass er nur sporadisch mit der Programmierung zu tun hat, denke ich es wird ihm da noch schwerer fallen ein Script zu schreiben.
 
Erstmal danke für eure Antworten. Es ist leider so wie Schwimmer sagt. Ich habe einfach zu wenig Erfahrung. Auch mit den Bereichszeigern tuh ich mich schon herb.
Wie schon gesagt, ich will "einfach" nur "schreibe Datensatz in Steuerung" in der Steuerung ausführen und nicht am HMI über die Ereignisse.
Kann mir jemand den Ablauf vielleicht anhand eines Beispiels erklären, was ich z.B. in einem DB anlegen muss und wie ich die Funktion in der Steuerung anstoße. Am besten schritt für schritt für Anfänger :-?. Ich habe schon was über "Steuerungsauftrag 70" gelesen, kann aber nicht wirklich was damit anfangen. Noch dazu kommt, dass ich in FUB programmiere, das macht es glaub auch nicht einfacher.
Sorry, bin schon ziemlicher Anfänger. Die meisten Sachen die ich sonst benötige bekomme ich meistens irgendwie hin, aber hier steh ich irgendwie im dunkeln.

Danke!

Gruß Markus
 
Der Steuerungsauftrag läuft über den Bereichszeiger.
Einfach den gewünschten DB in der Steuerung anlegen.
Bereichszeiger in HMI/Verbindungen/Bereichszeiger (Steueraufträge) anlegen.

DB mit Parametern (Werten) bestücken (Move) und darauf achten, dass die Auftragsnummer als letzte eingetragen wird. Das HMI pollt dieses Feld. Steht die Nummer im Feld wird der Steuerauftrag ausgeführt und nach Bearbeitung wieder auf 0 geschrieben.

Ab Seite 156

https://cache.industry.siemens.com/dl/files/215/109755215/att_940457/v1/WCC_Communication_de-DE.pdf


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi getOptimum,


vielen Dank für die Unterstützung. So ganz verstehe ich es noch nicht.
Ich habe mir jetzt den Bereichszeiger "Steuerungsauftrag" angelegt ( siehe Bild 1 ).
Im einem globalen DB haben ich ein Array mit 4 x UINT Bereichen angelegt ( siehe Bild 2).
Aus der Hilfe habe ich den Aufbau der Datenbereichs ( siehe Bild 3 ). Ich verstehe hier schon nicht warum das eine Länge von 5 hat und im HMI eine Länge von 4 steht.
Im Anhang noch ein Bild vom meinem Programm ( siehe Bild 4 ).


Vielleicht mal kurz wie ich das verstehe.
Mit einer Taste am TP ( Setze Cocktail 3 ) schiebe ich eine 1 in das erste Wort des Arrays. Das bedeutet, ich wähle die Rezepturnummer 1 aus.
Mit der gleichen Funktion am TP ( Setze Cocktail 3 ) schiebe ich eine 3 in das zweite Wort des Arrays. Das bedeutet, ich wähle die Datensatznummer 3 aus.
Ist die Datensatznummer gleich 3, schiebe ich die Nummer 70 in das dritte Wort des Arrays. Das bedeutet, der Befehl "schreibe Datensatz in Steuerung" ( eigentlich das was im Panel in der Ereignissen eingestellt werden kann, siehe Bild 5 ) wird ausgeführt. Das mit dem dritten Wort der Arrays ist nur geraten, weil es in der Beschreibung nur heißt "reserviert".
Wenn ich dann vom vierten Wort des Arrays die Meldung "4" ( erfolgreich übertragen ) erhalten habe, starte ich über den Merker M15.2 meine Getränkeausgabe.


Bin ich hier komplett auf dem Holzweg, oder geht es zumindest in die richtige Richtung.


Sorry für diese geballte Unwissenheit
Bild 1_Bereichszeiger Steuerungsauftrag.jpgBild 2_Datenbaustein.jpgBild 3_Datenbereich.jpgBild 4_Programm.jpgBild 5_Schreibe Datensatz in Steuerung.jpg
 
Ich würde mit der Taste im TP einen Merker oder ein Datenbit setzen. Mit diesem Bit würde ich den Steuerrungsauftrag in der SPS starten. Merker als EN von Move.
Der Auftrag an der Taste ist überflüssig. Ich würde die Struktur so wie sie in der Hilfe steht als UDT deklarieren. Dann lassen sich über den Gleichen Zeiger auch Bild umschalten Befehle senden. ZB um den Bediener bei einer Störung auf einen wichtigen Anlagenteil hinzuweisen.
Ich mag es wenn die CPU die Kontrolle hat.


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Markus,

hier mal auf die Schnelle ein VBScript, welches du als ZWEITES Ereignis NACH "SetzeVariable" mit der Mischgetränksnummer an eine Schaltfläche projektieren kannst.
Code:
Sub MischgetraenkAusschank()

    Dim rezepturNummer
    
    rezepturNummer = 1  ' Hier ist die Nummer der verwendeten Rezeptur einzutragen, kann auch eine HMI-Variable sein
    
    
    ' Schreibe Datensatz des ausgewählten Mischgetränks in die Steuerung
    SetDataRecordToPLC rezepturNummer, SmartTags("MischgetraenkNummer"), hmiOff, "WinCCFunktionsStatus"
    While SmartTags("WinCCFunktionsStatus") = 2 : Wend  ' Auswertung des Rückgabewertes (2=BUSY, 4=ERFOLGREICH, 12=FEHLER)

    ' Ausgänge ansteuern
    ' Hier kann z.B. eine Kommando-Variable auf TRUE gesetzt werden,
    ' diese muss nach der Auswertung in der Steuerung wieder auf FALSE gesetzt werden
    SmartTags("StartAusschank") = True
    

End Sub

Bei Fragen melden.


Gruß, Fred
 
Hallo Fred, danke für das Skript. Ich werde das auch mal versuchen.

Aber zuerst muss ich noch ein Problem lösen.
Ich habe nun in einem eigenen db die Struktur mit 4 Wörtern angelegt und adressiere den Steuerbefehl 70 direkt ( also nicht symbolisch ) im Bereichszeiger auf das DBW0.
Wenn ich nun das Programm auf das HMI übertragen will kommt folgende Fehlermeldung.

"für die rezeptur wurde eine Synchronisation mit einer verbindung projektiert"

Hat das so schon mal jemand gehabt und weiß was das bedeutet? Weiß sonst nicht mehr weiter.

Danke!

Gruß Markus
 
Hallo Markus,

gerne geschehen; wie gesagt: bei Fragen bitte melden.


Zu dem Bereichszeigerproblem:
Ich habe es u.a. deswegen immer vermieden, mit Bereichszeigern zu arbeiten.
Davon abgesehen, dass ich der Meinung bin, dass HMI-Aufgaben (Und das Transferieren von Rezeptur-Parameterwerten gehört für mich z.B. dazu) auch im HMI projektiert werden sollten, empfinde ich das Projektieren/Handling von ebendiesen als unkomfortabler gegenüber einem selbstprojektiertem Handshake.


Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe meine Anforderung ja prinzipiell schon umgesetzt, allerdings nicht 100 prozentig wie ich es will. Derzeit wähle ich beim Tastendruck der Starttaste ( Getränkeausgabe) im Panel den Datensatz aus, den ich benötige und lasse mir gleichzeitig im Panel eine "neue" Taste einblenden. Mit dieser Taste ( bestätigen Getränkeausgabe ) führe ich beim drücken, im Panel bei "Ereignisse" die Funktion "schreibe datensatz in steuerung" aus. Im Panel kann ich dann auch das Statusword abfragen. Wenn ich hier eine 4 erhalte starte ich dann im Programm die wirkliche Ausgabe des Getränks über die Ausgänge. Das funktioniert einwandfrei. Ist aber hald eine zusätzliche Aktion am Panel, welches ich eigentlich mit einem Tastendruck erledigen wollte.
Aber was nervt ist, das ich das Programm schon mal nicht auf das Panel übertragen kann ohne dass die Fehlermeldung ( oben beschrieben ) kommt. So kann ich die andere Variante nicht testen
 
Ich bin jetzt zu einer einfachen Lösung gekommen. I realisiere alles über eine Taste im TP. Beim drücken der Taste lade ich den Datensatz, bei loslassen schreibe ich den Datensatz in in die Steuerung.
Mit dem Statuswert 4 ( wenn die Übertragung erfolgreich beendet wurde ) starte ich den dann meine Hardwareausgänge. Funktioniert.
Danke für die vielen Hilfe und die vielen Antworten.
 
Hallo Markus,

grundsätzlich ist der Ablauf ja so richtig, aber...

1. Wie stellst du sicher, dass der Datensatz vollständig geladen ist, BEVOR der Bediener die Taste loslässt?
2. Wie verfährst du, wenn das Laden des Datensatzes fehlgeschlagen ist?



Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Faust,

ich verstehe das jetzt nicht mehr.
Ich habe es jetzt nochmal anders gemacht. Ich lege im TP bei Tastendruck fest, dass beim drücken der Befehl "schreibe Datensatz in Steuerung" ausgeführt wird. Bei Rezepturnummer und Datensatznummer habe ich jeweils eine 1 eingetragen, damit die Rezeptur 1 und der Datensatz 1 ausgewählt und in den DB der Steuerung geschrieben wird. Bei einer zweiten Taste mache ich das gleiche, nur dass ich statt der Datensatznummer 1, die Datensatznummer 2 eintrage. Ich lasse mir auch eine Statusmeldung in den DB schreiben. Wenn der Status 4 ist, lass ich meine Hardwareausgänge kommen. Das funktioniert auch, nur dass mir in der im TP in der Rezepturanzeige zwar die richtige Rezepturnummer angezeigt wird, aber die Datensatznummer wir nicht richtig angezeigt bzw. wir sie nicht geändert. Die Rezepte werden aber richtig in den DB geschrieben. Es funktioniert also alles, bis auf die Anzeige im der Rezepturanzeige.

1sten_Datensatz in Steuerung schreiben.jpg
 
Hallo Markus,

wenn du magst, dann schick mir das Projekt doch mal zu.
Gewisse Dinge lassen sich leichter "am lebenden Objekt" eruieren.


Gruß, Fred
 
Zurück
Oben