TIA Produktdatenbank direkt auf der PLC

Lachi001

Level-2
Beiträge
80
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich habe folgendes Problem.

Ich möchte eine Produktdatenbank auf meiner 1500er Steuerung anlegen. (sollten die Produkte mal erweitert werden, würde ich das mit dem PG machen)

Bis jetzt habe ich im Netz, Lösungen gefunden, wie einen PLC Datentyp erstellen, wo man dann festlegt, Artikelnummer und Produktname.
Dann Erstellt man einen DB, wo ein Array als Produktspeicher drin ist. Irgendwie habe ich noch nicht richtig verstanden, wie das alles ineinander greifen soll.

Mein Gedanke ist, dass Ich eine Produktdatenbank habe, die Ich einzeln über ein HMI (Basic) anwählen kann. Hinter dem Produkt soll später einen Geschwindigkeit und ein Kamera Programm angewählt werden.

Vielleicht kann mir jemand helfen, welcher der richtige weg wäre.


vielen Dank



1772443357153.png


1772443393666.png
 
In deinem Datentyp fehlt aus meiner Sicht auf alle Fälle dann erstmal noch das Kamera-Programm ...
Als Produktname würde ich jetzt vielleicht auch nicht unbedingt einen DINT nehmen - eher einen String. Das hängt natürlich von deinen Produkt-Bezeichnungen ab was da jetzt sinniger ist ...

Um das zum Laufen zu bekommen erstellst du einen Baustein, der dir den gewählten Auftrag aus deiner Liste in den aktuelle Auftrag hineinschreibt.
Wie soll die Auftrags-Anwahl in deinem HMI denn umgesetzt werden ? Einfach über Eingabe einer Nummer ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In deinem Datentyp fehlt aus meiner Sicht auf alle Fälle dann erstmal noch das Kamera-Programm ...
Als Produktname würde ich jetzt vielleicht auch nicht unbedingt einen DINT nehmen - eher einen String. Das hängt natürlich von deinen Produkt-Bezeichnungen ab was da jetzt sinniger ist ...

Um das zum Laufen zu bekommen erstellst du einen Baustein, der dir den gewählten Auftrag aus deiner Liste in den aktuelle Auftrag hineinschreibt.
Wie soll die Auftrags-Anwahl in deinem HMI denn umgesetzt werden ? Einfach über Eingabe einer Nummer ?
Hi!
Ja das denke ich auch das es ein String sein muss, habe mich bis jetzt versucht über KI durch zu Loten aber leider haut das alles nicht so hin, wie ich das möchte.
Mein Gedanke war das wenn ich ein Produkt aus dem Array auswähle, dies irgendwie auszuwerten welche Zahl es im Anschluss ist und dementsprechend, wollte ich dann das Richtige Kamera Programm laden. Anwählen wollte ich das über Zahlen im HMI, heißt es wird eine Liste mit Nummern geben.

Habe aber irgendwie noch keinen Blassen Schimmer, wie ich das am besten machen kann. Hatte schon nach Anleitungen oder nach Forenbeträgen gesucht mit der Thematik, bin aber leider noch nicht fündig geworden.
 
Du solltest vielleicht so anfangen :
Erstelle dir deinen Datentyp. Erzeuge in einem DB ein Array von diesem Datentyp - mach das Array ruhig viel größer als du es im Augenblick benötigst. Fülle nun Elemente des Arrays mit deinen Daten.
Jetzt baue dir etwas auf dem HMI, dass deine Liste anzeigen kann - das ist nicht gerade trivial, da ich verstanden habe, dass du da noch so gut wie keine Erfahrung hast. Wählst du nun einen Eintrag aus dieser Liste aus dann wird der in deinem DB (oder einem ganz anderen) auf das "aktuelle Produkt" geschrieben. Du mußt dafür also eine Funktion in der SPS haben, die den gerade gewählten Index an eine andere Stelle kopiert. Mit dieser "anderen Stelle" arbeitet dann dein Programm ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Scheint einen Rezept zu sein.
Da ist mehr das man überlegen muss.
Wie man Rezepte erstellt, und bestehende Rezepte ändert.
Wie man Rezepte für die Produktion auswählt und wenn.
Guck mal die Rezepte in TIA.
Erstellen von Standard-Rezepturanzeige und Rezepturbild mit WinCC (TIA Portal)
Nee, wollte es nicht als Rezept machen. Würde in dem Fall lieber komplett über die Steuerung arbeiten wollen. Sprich einen Array als Datenbank und diesen über ein HMI auslesen, bzw schreiben wenn das Produkt ausgewählt wurde
 
Nee, wollte es nicht als Rezept machen. Würde in dem Fall lieber komplett über die Steuerung arbeiten wollen. Sprich einen Array als Datenbank und diesen über ein HMI auslesen, bzw schreiben wenn das Produkt ausgewählt wurde
Ok, aber überlege wie du die Daten absichern.
Nicht dass wenn z.B. die DB geändert wird (warum auch immer) dass die Aktualwerten nicht initialisiert werden, damit die eingetippte Daten nicht verloren gehen.
Auf eine Siemens Basic Panel kann man die Rezepte in einen USB Datei kopieren.
 
Ok, aber überlege wie du die Daten absichern.
Nicht dass wenn z.B. die DB geändert wird (warum auch immer) dass die Aktualwerten nicht initialisiert werden, damit die eingetippte Daten nicht verloren gehen.
Auf eine Siemens Basic Panel kann man die Rezepte in einen USB Datei kopieren.
Mein Basic Panel hat leider keinen USB Anschluss und auch keinen Kartenslot
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde anraten, die obere Array- Grenze als globale Anwender- Konstante festzulegen. (und ggf. auch die Untere- zwecks Sauberkeit)
Denn wenn du später mal- und auf das wird es mmn zwecks Komfort hinauslaufen- die Rezepte in einer Schleife filtern willst, kannst du überall diese Grenzen verwenden und musst nicht zusätzlich das gesamte Programm durchforsten, wenn die Array- Größe geändert werden soll.

Als nächstes würde ich vorschlagen, in einem DB nur das Array mit allen Rezepten (Produkten) zu haben. Hilfsvariablen, aktive Rezepte usw. in einem weiteren DB- denn da wird sicher während des Programmierens immer wieder mal was geändert und somit kannst du das andauernde Initialisieren des Rezept- DBs verhindern.

Den Inhalt deines Produktes (PLC- Datentyp) solltest du dir auf jeden Fall bereits am Anfang genau überlegen. Ich mache zB. immer am Anfang einen UINT, der die Datensatz- Nummer des Rezeptes enthält. Ist zwar meist doppelt gemoppelt, da man den Array- Index auch verwenden könnte, jedoch will ich keine Abhängigkeit zwischen Datensatz und Array- Index schaffen.

Dann kannst du dir schon mal überlegen, welche Variable in deinem Rezept du als "Führungsvariable" verwenden möchtest. So eine nutze ich zur Logik für neue Rezepte anlegen, löschen usw. Also eine Variable, die zwingend befüllt sein muss, wen ein Rezept "existiert". Ist diese Variable zB nicht befüllt, wies ich, dass ich beim Anlegen eines neuen Rezeptes diesen Datensatz verwenden kann. Bei dir würde sich die Artikelnummer anbieten.

Und nun zur Bedienung am HMI.
(Achtung: viele Wege führen nach Rom. Das ist nur ein Vorschlag von vielen Möglichkeiten!)
Für die Gesamtübersicht aller Rezepte bzw. Auswahlseite:
Je nachdem, wie viele Datensätze du gleichzeitig auf der HMI- Seite anzeigen willst, benötigst du ein weiteres Array, die die angezeigten Datensätze beinhaltet. Wenn du zB. Platz für 10 Datensätze am HMI hast, dann mach dieses Array auch 10 groß. Nun kannst du mit je einem Plus- und Minus- Button im PLC- Programm immer die nächsten 10 in dieses Anzeigearray schieben.
Zur Bearbeitung eines Rezeptes arbeite ich immer mit einer eigen Seite, auf der wirklich ALLE Parameter eines Rezeptes ersichtlich sind- es kann nämlich sein, dass auf der Rezept- Übersichtsseite nicht alle Platz haben. Also nur die Wichtigsten zur eindeutigen Identifizierung.

Da das schon recht viel Input und ins Detail geht, mach ich hier mal eine Pause. Wenn du sagst, dass klingt plausibel und ich möchte sowieso in diese Richtung gehen, kann ich gerne mehr erzählen. Unten noch ein paar Bilder, um das oben Geschriebene besser einordnen zu können.



Rezepte1Rezepte.PNG


Rezepte1RezepteAlle.PNGRezepte2RezeptBearbeiten.PNGRezepte3RezepteAktiv.PNG
 
ich würde das auch so wie bereits von Stups beschrieben umsetzen. Wir verwenden auch einen sehr ähnlichen Weg um Produkte über die SPS zu verwalten. Möchte nur 2 Tipps hinzufügen:
- Datensicherheit: ich kopiere vor allem während der Inbetriebnahme die Momentaufnahme vom DB als Startwerte in den DB. Damit sind sie auch im TiaProjekt gesichert. Wenn also mal die SPS ausfällt und eine neue her muss, hast du die Produkt-Konfiguration bereits herzunehmen. Und außerdem sind diese paar Klicks sowieso notwendig, wenn dein PLC-Datentyp mal erweitert werden soll.
- Mach dir Gedanken darüber, wieviele Datensätze zu erwarten sind. Wenn es nur einige sind, dann kümmert dich die Darstellung weniger. Wenn es viele sind, dann ist es für den Bediener erheblich besser, wenn die Datensätze nach einem nachvollziehbarem Muster sortiert angezeigt werden. Um dieses Sortieren müsstest du dich kümmern
 
Ich würde bei Änderungen noch die "RecipeExport" & "RecipeImport" Funktionen nutzen.
Damin kann man die Rezeptur-Datenbank per .csv auf dem Ladespeicher der SPS sichern & darüber dann auch mit externen Stellen austauschen.
Dafür sind in Punkto "Aufbau des UDTs" noch ein paar Details zu beachten => siehe F1-Hilfe.
 
Ich bin generell ein Fan davon, solche Produkt- oder Rezeptdaten mit anderen Systemen auszulesen und abzuspeichern, um sie dann per Knopfdruck wieder in die PLC laden zu können.
Sollte was defekt sein, und der Haus- und Hof- Elektriker muss die Hardware tauschen, muss er nur die Speicherkarte umstecken und das Ding läuft wieder.
Wenn dann aber ein PG oder so benötigt wird, um Produktdaten einzuspielen, wirds gleich komplex.
 
Ich würde anraten, die obere Array- Grenze als globale Anwender- Konstante festzulegen. (und ggf. auch die Untere- zwecks Sauberkeit)
Denn wenn du später mal- und auf das wird es mmn zwecks Komfort hinauslaufen- die Rezepte in einer Schleife filtern willst, kannst du überall diese Grenzen verwenden und musst nicht zusätzlich das gesamte Programm durchforsten, wenn die Array- Größe geändert werden soll.

Als nächstes würde ich vorschlagen, in einem DB nur das Array mit allen Rezepten (Produkten) zu haben. Hilfsvariablen, aktive Rezepte usw. in einem weiteren DB- denn da wird sicher während des Programmierens immer wieder mal was geändert und somit kannst du das andauernde Initialisieren des Rezept- DBs verhindern.

Den Inhalt deines Produktes (PLC- Datentyp) solltest du dir auf jeden Fall bereits am Anfang genau überlegen. Ich mache zB. immer am Anfang einen UINT, der die Datensatz- Nummer des Rezeptes enthält. Ist zwar meist doppelt gemoppelt, da man den Array- Index auch verwenden könnte, jedoch will ich keine Abhängigkeit zwischen Datensatz und Array- Index schaffen.

Dann kannst du dir schon mal überlegen, welche Variable in deinem Rezept du als "Führungsvariable" verwenden möchtest. So eine nutze ich zur Logik für neue Rezepte anlegen, löschen usw. Also eine Variable, die zwingend befüllt sein muss, wen ein Rezept "existiert". Ist diese Variable zB nicht befüllt, wies ich, dass ich beim Anlegen eines neuen Rezeptes diesen Datensatz verwenden kann. Bei dir würde sich die Artikelnummer anbieten.

Und nun zur Bedienung am HMI.
(Achtung: viele Wege führen nach Rom. Das ist nur ein Vorschlag von vielen Möglichkeiten!)
Für die Gesamtübersicht aller Rezepte bzw. Auswahlseite:
Je nachdem, wie viele Datensätze du gleichzeitig auf der HMI- Seite anzeigen willst, benötigst du ein weiteres Array, die die angezeigten Datensätze beinhaltet. Wenn du zB. Platz für 10 Datensätze am HMI hast, dann mach dieses Array auch 10 groß. Nun kannst du mit je einem Plus- und Minus- Button im PLC- Programm immer die nächsten 10 in dieses Anzeigearray schieben.
Zur Bearbeitung eines Rezeptes arbeite ich immer mit einer eigen Seite, auf der wirklich ALLE Parameter eines Rezeptes ersichtlich sind- es kann nämlich sein, dass auf der Rezept- Übersichtsseite nicht alle Platz haben. Also nur die Wichtigsten zur eindeutigen Identifizierung.

Da das schon recht viel Input und ins Detail geht, mach ich hier mal eine Pause. Wenn du sagst, dass klingt plausibel und ich möchte sowieso in diese Richtung gehen, kann ich gerne mehr erzählen. Unten noch ein paar Bilder, um das oben Geschriebene besser einordnen zu können.



Anhang anzeigen 94643


Anhang anzeigen 94644Anhang anzeigen 94645Anhang anzeigen 94646
Guten Morgen.
Genau so könnte ich mir das vorstellen. Habe aber noch keinen Ansatz wie ich das richtig umsetze.
Habe jetzt erstmal den Datentyp um ein Uint erweitert und ihn Programm Nummer genannt.
Dann habe ich einen DB erstellt mit einem Array Of Produkt. Da würde ich meine Produkte rein schreiben. Das mit dem zweiten DB verstehe ich auch, dass macht auf jedenfall Sinn, das Laden und löschen des Produktes zu trennen. Der Weitere DB mit den Produkten sollte dann nur als Anzeige für das HMI zuständig sein? Ich wollte irgendwie nicht mit 100 Variablen im HMI arbeiten müssen, dachte das ich über den Array eine Nummer auswerten kann und die dann meinem Produkt zuordnen kann z.B.
Irgendwie verstehe ich dir Logik von dem System noch nicht ganz....
 

Anhänge

  • 1772520719961.png
    1772520719961.png
    20,3 KB · Aufrufe: 8
Hier mal ein Beispiel, wie bei einem meiner Kunden der Rezeptspeicher aussieht.
Als erstes würde ich mir wie gesagt Gedanken machen, wie der Datensatz wirklich aussehen sollte. Du hast ja auch irgendwas von Kameraprogramm oder so geschrieben. Soll das eine Zeichenfolge sein, oder ein Integer- Wert?

Eine Empfehlung für Stings: begrenzen auf eine maximale Länge, mit der du glaubst, dass du sicher auskommst. Denn Stings fressen dir sonnst deinen Remanenzspeicher auf.

Dann musst du dir Gedanken machen, wie du die Verwaltung für den Bediener gestalten willst. Soll er am HMI Filtern können? Soll er die Rezepte einzeln bearbeiten können? Oder nur einfach Anwählen/Aktivieren?

Das sind prinzipielle Fragen, die noch nichts mit Programmierung zu tun haben.
Wenn diese Rahmenbedingungen geklärt sind, dann kann man sich Gedanken zum Programm machen.



1772524884795.png
 
Hier mal ein Beispiel, wie bei einem meiner Kunden der Rezeptspeicher aussieht.
Als erstes würde ich mir wie gesagt Gedanken machen, wie der Datensatz wirklich aussehen sollte. Du hast ja auch irgendwas von Kameraprogramm oder so geschrieben. Soll das eine Zeichenfolge sein, oder ein Integer- Wert?

Eine Empfehlung für Stings: begrenzen auf eine maximale Länge, mit der du glaubst, dass du sicher auskommst. Denn Stings fressen dir sonnst deinen Remanenzspeicher auf.

Dann musst du dir Gedanken machen, wie du die Verwaltung für den Bediener gestalten willst. Soll er am HMI Filtern können? Soll er die Rezepte einzeln bearbeiten können? Oder nur einfach Anwählen/Aktivieren?

Das sind prinzipielle Fragen, die noch nichts mit Programmierung zu tun haben.
Wenn diese Rahmenbedingungen geklärt sind, dann kann man sich Gedanken zum Programm machen.



Anhang anzeigen 94657
Das mit dem String selber wusste ich nicht, habe sie jetzt auch auf 100 begrenzt. Auf der Maschine gibt es ca. 70 Produkte und ich gehe stark davon aus, dass es nicht viel dazu kommt.
Die Bediener sollen eigentlich nur über das HMI das Programm auswählen, dass kann z.b über die eingabe einer Nummer passieren. Dann sollte in dem Testfeld einfach das Produkt stehen, dass sie wissen das es angewählt ist. Im hintergrund möchte ich die Produkte einem Werkzeug zuweisen (z.B Werkzeug 1-6) und dementsprechend die Hubzahl der Maschine reduzieren oder eben erhöhen. Oder ob eine Nietung eingeschaltet ist oder nicht. Für das Kamera Programm muss ich nur eine Zahl der Gruppe vergeben. Dem entsprechend einen Trigger rausgeben.
 
Zurück
Oben