Programmverwaltung KRC5 durch Siemens SPS

  • Hallo Zusammen,


    ich habe aktuell die Aufgabe, eine Programmverwaltung einer KRC5 Steuerung mit übergeordneter Siemens S7-1500 SPS zu programmieren.

    Leider beschränkt sich meine Erfahrung auf die Kenntnisse aus dem Programmierung 2 Kurs von KUKA.


    In die Anlage können verschiedene Werkzeuge verbaut werden.

    Der Ablauf des Roboters ist immer (relativ) gleich, jedoch unterscheiden sich die anzufahrenden Punkte / Bahnen.

    Daher ist es nötig verschiedene Roboter-Programme über die SPS anzuwählen.


    Meine Idee ist es, pro Werkzeug einen Ordner zu erstellen, welcher ein Cell-Programm mit entsprechenden Unterprogrammen enthält.

    Über die Schnittstelle soll von der SPS ein String/Int zu übergeben werden, welcher den Ordnernamen/Ordnernummer enthält.

    Auf dem Roboter soll im sps.sub dieser String/Int in einen Dateipfad umgewandelt werden und mit CWRITE dann das entsprechende Cell-Programm aufgerufen werden.


    Ist diese vorgehensweise grundsätzlich möglich und sinnvoll?

    Oder gibt es hierzu eine sinnvolle Alternative?

    Ich freue mich über jeden Vorschlag.


    MfG

    T1m

  • Schritt für Schritt zum Roboterprofi!
  • Danke für die Antwort!


    Je Werkzeug gibt es x Bahnen zu fahren.

    Der Bediener soll bestehende Bahnen kopieren und neu teachen, jedoch nicht komplett neu anlegen.

    Also z.B. den Ordner "Werkzeug1" mit den Programmen "Bahn1", "Bahn2" etc. kopieren und im neuen Odner "Werkzeug2" die Programme "Bahn1" etc. neu teachen.

    Er soll aber nicht im Cell-Programm herumprogrammieren, um diese aufzurufen.

    Daher war mein Gedanke einfach das Cell-Programm mitzukopieren, welches die Aufrufe bereits besitzt.


    Es wäre natürlich auch möglich mit einem Cell die Programme mit einem weiteren Unterprogramm aufzurufen.

    Dann sollte ich aber trotzdem irgendwie in der Lage sein über meine Schnittstelle einen Datensatz vorzuwählen.

    Also von der SPS an die KRC den Wert "Werkzeug1" schicken, und dann auf dem Roboter das entsprechende Unterprogramm laden.


    MfG

    T1m

  • Ist diese vorgehensweise grundsätzlich möglich und sinnvoll?

    Nein. Das CELL Programm heisst so, weil es die Zelle verwaltet.

    Es ist genau dazu gedacht, endlos durchzulaufen und auf Deine SPS-Schnittstelle sinnvoll zu reagieren.


    Ein anderes Thema ist's, wenn Deine ganzen Programme zu groß sind oder aus Gründen nicht im Roboter verbleiben können oder dürfen. Dann brauchst Du den Dir-Loader von Kuka, eine höllische Option.

  • Ok danke, dann werde ich den Weg mit einem Cell und weiteren Unterprogrammen gehen.

    Es sollen grundsätzlich immer die "gleichen" Bahnen abgefahren werden, lediglich die Punkte müssen umgeteacht/erweitert werden und eventuell kommt mal eine weitere Eingangsabfrage o.Ä. hinzu.


    Nun die Frage:

    Kann ich im CELL Programme aufrufen, deren Name/Nummer NUR über die Schnittstelle mitgeteilt wird?

    Also dass ein neues Programm im CELL ohne eigenen Switch-Case aufgerufen wird?

    Ich möchte nämlich umgehen, dass der Bediener im CELL programmiert.

    Er soll lediglich alte Bahnen kopieren und für neue Werkzeuge unter neuem Namen anpassen.

    Funktioniert das?


    MfG

    T1m

  • Also ich finde das recht kompliziert.....warum nicht ein programm für alles?

    Dann muss immer alles gestoppt und abgewählt werden....Klingt irgendwie soviel wirrwar....der eine soll teachen dann wieder nicht ......weiss nicht ob das konzept so sinnvoll ist.....


    Ein Cell programm ist nichts anderes wie ein Sprungverteiler mit Programmnummer.....man kann ja auch die Cell selbst gestalten.....DAS CELL ist ja mehr oder weniger nur eine vorlage......


    Also 1 Hauptprogramm und der rest sind unterprogramme.....wäre viel übersichtlicher

  • Also dass ein neues Programm im CELL ohne eigenen Switch-Case aufgerufen wird?

    Ich möchte nämlich umgehen, dass der Bediener im CELL programmiert.

    Nein das geht leider nicht.

    Bei Anwahl von Cell müssen alle darin aufgerufene Unterprogramme schon existieren. Wenn es wirklich so komfortabel sein muss, dass die Leute neue Programme anlegen können, dann geht nur der Weg über den Sps.sub mit cwrite auf den Kommandokanal.

    Kann man schon so machen, ist halt etwas schwieriger zu debuggen.

    Eine Unterteilung der Programme in Unterordnen mag sinnvoll sein, aber im Roboter selber spielt der Pfad keine Rolle, soll heißen, jeder Programmname darf unterhalb des /R1 nur ein einziges Mal vorkommen.

  • Bei Anwahl von Cell müssen alle darin aufgerufene Unterprogramme schon existieren. Wenn es wirklich so komfortabel sein muss, dass die Leute neue Programme anlegen können, dann geht nur der Weg über den Sps.sub mit cwrite auf den Kommandokanal.

    Sehe ich genauso.


    Programmodul (src. und dat) als Kopiervorlage erstellen.

    Darin Hauptprogramm mit Logik und lokale Unterprogramme, wo die Bahnen definiert werden.


    Kann für jedes Werkzeug kopiert werden und diesbezüglich Namen vergeben werden.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Also ich finde das recht kompliziert.....warum nicht ein programm für alles?

    Dann muss immer alles gestoppt und abgewählt werden....Klingt irgendwie soviel wirrwar....der eine soll teachen dann wieder nicht ......weiss nicht ob das konzept so sinnvoll ist.....

    Ich habe die Vorgabe bekommen, dass die Programmanwahl über die SPS bzw. HMI stattfinden soll.

    Ich arbeite hauptsächlich mit Siemens und bei den Siemens Panels gibt es hierfür die Rezeptverwaltung, welche sich über die HMI oder auch über die SPS antriggern lässt.

    Um einen neuen Datensatz anzulegen, editiert der Bediener die benötigten Variablen und speichert den Datensatz unter einem neuen Namen bzw neuer Nummer ab.

    So etwas vermisse ich bei Kuka.
    Die Bahnen sollen die gleichen Punkte enthalten, aber da die Werkzeuge in der Maschine unterschiedlich sind, können die Positionen der Punkte unterschiedlich sein.

    Damit beim Werkzeug rüsten nich jedes mal neu geteacht werden muss, möchte ich hierfür eigene Datensätze anlegen.


    Bei Anwahl von Cell müssen alle darin aufgerufene Unterprogramme schon existieren. Wenn es wirklich so komfortabel sein muss, dass die Leute neue Programme anlegen können, dann geht nur der Weg über den Sps.sub mit cwrite auf den Kommandokanal.

    Sehe ich genauso.


    Programmodul (src. und dat) als Kopiervorlage erstellen.

    Darin Hauptprogramm mit Logik und lokale Unterprogramme, wo die Bahnen definiert werden.


    Kann für jedes Werkzeug kopiert werden und diesbezüglich Namen vergeben werden.

    So etwas habe ich mir vorgestellt, danke!


    Da Programm welches geladen werden soll, soll von der SPS über die Schnittstelle als STRING oder INT übergeben werden.

    Um mein Ziel zu erreichen, muss ich aus der Variable "Programmname" bzw. "Programmnummer" auf der Schnittstelle einen Dateipfad bzw. Befehl erstellen, um ein Programm mit CWRITE aufzurufen.


    1. Kann ich über die Profinet Schnittstelle überhaupt STRINGs bzw CHARs übertragen?

    Und wenn ja, wie kann ich diese bearbeiten (Text hinzufügen etc)?

    Ich habe in KRL leider keine Erfahrung mit STRINGs bzw. CHAR-Feldern.


    2. Kann ich den Befehl "RUN /xyz" in der Anweisung CWRITE überhaupt als Variable (CHAR-Feld?) übergeben?

    Vergleiche Aufruf von CELL im Standard sps.sub:


    ;Automatik extern

    IF $MODE_OP==#EX THEN

    CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()")

    ENDIF


    Vielen Dank schonmal für die Unterstützung!


    MfG

    T1m

  • Halo T1M,


    ich glaube du hast da was prinzipiell nicht verstanden, der Aufruf if $Moe_OP== #ex macht nichts anderes als beim Hochfahren des Roboters automatisch das Cell Programm aufzurufen. Im Cell selber steht ein Case Verteiler der entsprechend der von der SPS übergebenen Prorgrammnummer dieses aufruft.

    Die Abnahme von GOTO Anweisungen verhält sich reziprok zur Qualität einer Programmierung

  • Hallo Martin,


    Mir ist bewusst, dass diese Anweisung lediglich beim Hochfahren das CELL Programm startet.

    Dieses Beispiel habe ich nur als Referenz eingefügt, da ich analog dazu mit der Anweisung CWRITE Programme aufrufen möchte.


    Ich möchte mit CWRITE Programme aufrufen ohne dass CELL angewählt sein muss.

    Dadurch erhoffe ich mir, dass ich auf dem SmartPad neue Programme erstellen kann und diese über meine SPS aufrufen kann, ohne extra Aufrufe im CELL zu deklarieren.

  • i.d.R. ist es einfacher einen Integer zu übertragen und den in der Case Anweisung im Cell auszuwerten und dann das entsprechende Unterprogramm zu starten


    Je nachdem wie ähnlich sich die Bahnen sind reicht doch vllt auch ein Unterprogramm und du überträgst nur die Punkte an den Roboter?

  • Je nachdem wie ähnlich sich die Bahnen sind reicht doch vllt auch ein Unterprogramm und du überträgst nur die Punkte an den Roboter?

    Vermutlich würde es auch schon reichen, die Punkte zu übertragen.

    Aber dann stehe ich ja wieder vor dem selben Problem, dass die korrekten Punkte für das entsprechende Werkzeug aktiviert werden.

    Oder denke ich hier zu kompliziert?


    Ich habe gerade selbst nochmals im Forum gestöbert und habe ich im Beitrag Routine über String-Variable aufrufen die Antwort von Sliwka entdeckt, welche mir weiterhelfen könnte.


    Was mir dann aber immernoch fehlt ist eine Methode Zeichenketten von der SPS an die KRC zu schicken.

    Die Werkzeuge werden nicht einfach durchnummeriert, sondern enthalten auch Buchstaben und Zeichen wie '-','_' etc.

    Nummerierung wäre nur eine Notlösung.

    In der Workvisual Anleitung wird lediglich beschrieben, wie im Signal-Editor die Signale am Provider zu

    Integer- oder Digitalen Datentypen zusammengefasst werden.

    Muss ich für Zeichenketten die einzelnen CHARs als Byte übertragen und dann umwandeln?

    Und wenn ja: wie?

    Oder gibt es eine andere, einfachere Methode?


    Dankeschön!


    MfG

    T1m

  • Hallo Martin,


    ich habe mir bereits die Dokumentation zu Cread/Cwrite angeschaut.

    Darin habe ich für mich lediglich das Kapitel 7.2 Programm starten, stoppen, abwählen entdeckt, was für mich relevant ist.


    Dennoch vielen Dank für dein Interesse und deine Unterstützung!


    Mir geht es aktuell darum, wie ich von meiner Siemens SPS Zeichenketten an die KRC senden kann.

    Bisher habe ich lediglich BOOLs und INTEGER an eine KRC geschickt.


    Wenn ich weis, wie ich CHARs übertrage, dann kann ich mir das CHAR-Feld

    Code
    "RUN/R1/Programme/Werkzeug123()" 

    zusammenbasteln und mit CWRITE das entsprechende Programm aktivieren.

    So zumindest die Theorie.


    MfG

    T1m

  • Bei Char-Variablen hilft dir ehr Sread/Swrite

    Oder Du nutzt die Typumwandlung und nutzt den ASCII-Code


    So etwa wie hier



    Und ein INT kannst Du über ein Gruppensignal erhalten.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Oder Du nutzt die Typumwandlung und nutzt den ASCII-Code

    Danke, danach habe ich gesucht :thumbup:

    Ich bin davon ausgegangen, dass ich das ganze im Signal-Editor einstellen muss oder eine Umwandlung à la "ByteToChar" durchführen muss.

    Dass es aber so einfach sein kann, war mir nicht bewusst.


    Ich werde mit den Erkenntnissen aus diesem Beitrag mal mein Glück versuchen ;)


    MfG

    T1m

  • Also ich verwalte im Roboter aktuell 150 verschieden Teile, die jeweils eine eindeutige Barcodenummer haben (gespeichert sind u.A. Abmaße und Positionen), diese können jeweils noch 5 zusätzliche gleiche Muster, mit anderen Barcodes haben.

    Diese wähle ich per Suchmaschine im Roboter manuell an bzw. aus oder auch Extern über die SPS.

    Anzeigen, Editieren und neue Typen anlegen, kann das der Einricher dann in der Variablenübersicht, somit bearbeite ich im Moment bis zu 900 verschiedene Teiletypen im Roboter, die sogar noch wahllos durcheinander gefahren werden können, so der entsprechende Datensatz angelegt ist.

    Ich habe hier Zellen, in denen verschiedene Maschinen beladen werden,.

    Somit ein Programmaufruf im Cell und ein Programm, das 900 Teiletypen abarbeiten kann, einfach durch Variableneingabe des Einrichters, wie z.B. die Werkzeuglänge oder ggf. auch Positionskorrekturen.


    Aber natürlich könntest du die Daten auch in der SPS hinterlegen, per HMI-Rezept z.B. und bei Bedarf an den Roboter übertagen... ;)

  • Wenn ich weis, wie ich CHARs übertrage, dann kann ich mir das CHAR-Feld

    Code
    "RUN/R1/Programme/Werkzeug123()" 

    zusammenbasteln und mit CWRITE das entsprechende Programm aktivieren.

    So zumindest die Theorie.

    Ich glaube das funktioniert nur solange dein Programm direkt im R1-Ordner angelegt ist. Also an der selben stelle wie Cell. Zumindest war das bei mir der Fall. Solange mein Programm in einem Unterordner nach R1 war, hat der RUN Aufruf im sub nicht funktioniert.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden